Cache, Workers, and Queues
-
Upload
jason-mccreary -
Category
Software
-
view
49 -
download
1
Transcript of Cache, Workers, and Queues
![Page 1: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/1.jpg)
Cache, Workers, and Queues
![Page 2: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/2.jpg)
JMac@gonedark
![Page 3: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/3.jpg)
Tools for your application at scale
![Page 4: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/4.jpg)
JMac != expert
![Page 5: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/5.jpg)
![Page 6: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/6.jpg)
![Page 7: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/7.jpg)
– @gonedark
“Increasing the timeout is not a solution.”
![Page 8: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/8.jpg)
Things that don’t scale
• Repeated, Expensive Operations: queries, calculations, etc…
• Ancillary Operations: sending email, processing uploads, etc…
• Notifications
![Page 9: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/9.jpg)
![Page 10: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/10.jpg)
Optimization
![Page 11: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/11.jpg)
“At some point, optimization doesn’t scale.”
![Page 12: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/12.jpg)
#1 Repeated, Expensive Operations
![Page 13: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/13.jpg)
Queries
![Page 14: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/14.jpg)
“The average WordPress page executes 35 queries.”
![Page 15: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/15.jpg)
– The Audience
“So, what do we do?”
![Page 16: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/16.jpg)
![Page 17: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/17.jpg)
Cache?
![Page 18: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/18.jpg)
Cache == Datastore
![Page 19: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/19.jpg)
![Page 20: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/20.jpg)
Caches
• memcached
• redis
• NCache
• Amazon ElastiCache
• Azure Shared Cache
![Page 21: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/21.jpg)
class User { public getAllUsers() { sql = ‘SELECT * FROM users’ users = datastore.query(sql)
return users } }
![Page 22: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/22.jpg)
class User { public getAllUsers() { users = cache.get(‘alluserkey’) if (users) { return users; }
sql = ‘SELECT * FROM users’ users = datastore.query(sql)
cache.set(‘alluserkey’, users)
return users } }
![Page 23: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/23.jpg)
class UserCache { public getAllUsers() { users = cache.get(‘alluserkey’) if (users) { return users; }
users = super.getAllUsers() cache.set(‘alluserkey’, users)
return users } }
![Page 24: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/24.jpg)
Common Architectures
• together: better utilization of resources, but individual and smaller caches
• standalone: larger, shared cache, but requires additional resources
![Page 25: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/25.jpg)
Considerations
• data size limits per key
• expiration
• stale data
• replication/consistency
![Page 26: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/26.jpg)
#2 Ancillary Operations
![Page 27: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/27.jpg)
Examples
• sending email
• processing images
• recalculations
• system interactions
![Page 28: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/28.jpg)
– The Audience
“So, what do we do?”
![Page 29: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/29.jpg)
![Page 30: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/30.jpg)
Workers
![Page 31: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/31.jpg)
Asynchronous Processes
![Page 32: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/32.jpg)
Workers
• Gearman
• Beanstalkd
• Amazon Simple Queue
• Azure Webjobs?
• You can create a job queue with a datastore…
![Page 33: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/33.jpg)
handleProfileImageUpload(file) { moveFile(file, PROFILE_IMAGE_DIR) createThumbnails(file) }
![Page 34: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/34.jpg)
handleProfileImageUpload(file) { moveFile(file, PROFILE_IMAGE_DIR) createThumbnails(file) }
![Page 35: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/35.jpg)
handleProfileImageUpload(file) { moveFile(file, PROFILE_IMAGE_DIR) JobQueue.push( ‘createThumbnails’, $file ) }
![Page 36: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/36.jpg)
class ProcessImages extends Job { public createThumbnails($file) { // do work } }
![Page 37: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/37.jpg)
Common Architectures
• together: shared resources, but might be risky resource intensive jobs
• standalone: separate resources, but requires additional resources
![Page 38: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/38.jpg)
Considerations• complexity
• asynchronicity
• idempotency
• failure
• additional resources
• environmental difference
![Page 39: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/39.jpg)
#2 Notifications
![Page 40: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/40.jpg)
Examples
• system
• in-app
• user
• third-party
![Page 41: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/41.jpg)
![Page 42: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/42.jpg)
– The Audience
“So, what do we do?”
![Page 43: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/43.jpg)
Message Queues
![Page 44: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/44.jpg)
Pub/Sub
![Page 45: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/45.jpg)
![Page 46: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/46.jpg)
Publish/Subscribe
![Page 47: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/47.jpg)
Broadcasting
![Page 48: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/48.jpg)
Messaging Queues
• RabbitMQ
• ActiveMQ
• *MQ
• redis
![Page 49: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/49.jpg)
![Page 50: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/50.jpg)
![Page 51: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/51.jpg)
getNotifications() { notifications = []
// [‘user134.*’, ‘user567.birthday’] foreach(user.channels as channel) { messages = MQ.read(channel)
if (messages) { notifications.push(messages) } }
return notifications }
![Page 52: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/52.jpg)
Common Architectures
• together: shared resources, but might be a single point of failure
• standalone: redundancy, but requires additional resources
![Page 53: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/53.jpg)
Considerations• additional resources, environmental concerns,
complexity
• protocols
• data coupling
• message delivery
• “broadcast storms”
• redundancy
![Page 54: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/54.jpg)
Cache, Workers, and Queues
![Page 55: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/55.jpg)
Questions
![Page 56: Cache, Workers, and Queues](https://reader033.fdocuments.us/reader033/viewer/2022042615/55c347bbbb61ebb87b8b46c1/html5/thumbnails/56.jpg)
Thanks!@gonedark