7. Designing for failure is hard*
*Why not externalising as much components as possible then?
8. Typical Application Components
• Mailing Service for sending individual or mass e-mail
• Notification service for sending push notifications (mobile backends)
• Message Queuing Service for dispatching tasks to asynchronous
workers
• Search and data indexing
• Data Store (Database), for storing relational or non-relational data
• File Store, for storing images and other static assets
11. Outbound E-Mailing Service
• Marketing
• Transactional
• Notifications
• Social Networking
SES (Simple Email Service)
12. Queuing Service / Message Bus
• Essential for component decoupling
• Dispatch tasks to asynchronous
workers
• Breakdown big tasks into smaller
tasks to be consumed in parallel by
other services
SQS (Simple Queue Service)
Message Bus Service
Service 1 Service 2 S 3 S 4
13. Database Service
• Scalable, Fast, Reliable!
• RDS (Relational Database)!
• MySQL, Oracle, MS SQL Server, and
PostgreSQL!
• DynamoDB (NoSQL Database
Service)
14. Search and Indexing Service
• Multiple Languages Support
• Multiple Data-types Support
• Scalable, Highly Available
• Geospatial Search
Amazon CloudSearch Service
15. Mobile Push Notification Service
• Integrates with the message bus
(queuing service)
• Support for Google, Apple, and
Amazon devices
• Proper formatting for every device
• SNS (Simple Notification Service)
26. –Unknown Wisdom
“Building scalable applications by externalising core services to
Amazon AWS and focus on your business logic without re-
inventing the wheel”