AWS Well Architected Framework - Design Principles Flashcards
Scalability
Scaling Horizontally - an increase in the number of resources
Scaling Vertically - an increase in the specifications of an individual resource
Scalability
Disposable resources instead of fixed servers
Instantiating compute resources - automate setting up of new resources along with their configuration and code
Infrastructure as code- AWS assets are programmable. You can apply techniques, practices, tools from software development to make your whole infrastructure reusable, maintain able, extensible, and testable
Disposable resources instead of fixed servers
Automation-
serverless management and deployment - being serverless shifts your focus to automation of your code deployment. AWS handles the management tasks for you.
infrastructure management and deployment - AWS automatically handles details, such as resource provisioning, load balancing, auto scaling, and monitoring, so you can focus on resource deployment.
Alarms and Events - AWS services will continuously monitor your resources and initiate events when certain metrics or conditions are met.
Automation
Loose Coupling-
well-defined interfaces - reduce interdependencies in a system by allowing various components to interact with each other only through specific, technology agnostic interfaces, such as RESTful APIs.
Service discovery - applications that are deployed as a set of smaller services should be able to be consumed without prior knowledge of their network topology details. Apart from hiding complexity, this also allows infrastructure details to change at any time.
Asynchronous integration - interacting components that do not need an immediate response and where an acknowledgement that a request has been registered with suffice, should integrate through an intermediate durable storage layer.
Distributed systems best practices - build applications that handle component failure in a graceful manner.
Loose Coupling
Services, not servers-
Managed Services - provide building blocks that developers can consume to power their applications, such as databases, machine learning, analytics, queuing, search, email, notifications, and more.
Serverless Architectures - allow you to build both event-driven and synchronous services without managing server infrastructure, which can reduce the operational complexity of running applications.
Services, not servers
Databases -
Relational databases - provide a powerful query language, flexible indexing, strong integrity controls, and the ability to combine data from multiple tables
NoSQL databases - trade some of the query and transaction capabilities of relational databases for a more flexible data model that seamlessly scales horizontally. It uses a variety of data models, including graphs, key-value pairs, and JSON document.
Data warehouses - are specialized type of relational database, which is optimized for analysis and reporting of large amounts of data
Graph databases - uses graph structures for queries
Databases
Managing increasing volumes of data
Data lake -an architectural approach that allows you to store massive amounts of data in a central location so that it’s readily available to be categorized, processed, analyzed, and consumed by diverse groups within the organization.
Managing increasing volumes of data
Removing single points of failure
standby redudancy - when a resource fails, functionality is recovered on a secondary resource with the failover process.
active redundancy - requests are distributed to multiple redundant compute resources. when one of them fails, the rest can simply absorb a larger share of the workfload.
detect failure - use health checks and collect logs
synchronous replication - only acknowledges a transaction after it has been durably stored in both the primary storage and its replicas.
Asynchronous replication - decouples the primary node from its replicas at the expense of introducing replication lag
Quorum -based replication - combines synchronous and asynchronous replication by defining a minimum number of nodes that must participate in a successful write operation
Removing single points of failure
Optimize for cost
Right sizing - AWS offers a broad range of resource types and configurations for many use cases.
Elasticity - save money with AWS by taking advantage of the platform’s elasticity
Take advantage of the variety of purchasing options - reserve instances vs spot instances
Optimize for cost
Caching
application data caching - store and retrieve information from fast, managed, in-memory caches
edge caching - serve content by infrastructure that is closer to viewers, which lowers latency and gives high, sustained data transfer rates necessary to deliver large popular objects to end users at scale
Caching
Security
Use AWS features for defense in depth - secure multiple levels of your infrastructure from network down to application and database
share security responsibility with AWS - AWS handles security of the cloud while customers handle security in the cloud
reduce privileged access -implement principle of least privilege controls
security as code- firewall rules, network access controls, internal/external subnets, and operating system hardening can be captured in a template that defines a golden environment
real time auditing - implement continuous monitoring and automation of controls on AWS to minimize exposure to security risks
Security
Cloud architecture best practices-
decouple your components - the key concept is to build components that do not have tight dependencies on each other so if one component were to fail for some reason, the other components in the system will continue to work. This reinforces the SOA design principle that the more loosely coupled the components of the system are the better and more stable it scales
think parallel - this internalizes the concept of parallelization when designing architectures in the cloud. it encourages you to implement parallelization whenever possible and to also automate the processes of your cloud architecture.
implement elasticity - implemented by automating your deployment process and streamlining the configuration and build process of your architecture. this ensures that the system can scale in and scale out to meet the demand without any human intervention
design for failure - encourages you to be a pessimist when designing architectures in the cloud and assume that the components of your architecture will fail. this reinforces you to always design your cloud architecture to be highly available and fault-tolerant.
Cloud architecture best practices