M02.06 - Scaling Amazon EC2
Nếu bạn đã từng cố gắng truy cập một website mà không tải được và liên tục timeout, có thể website đó đã bị quá tải bởi nhiều requests hơn khả năng xử lý. Trong bài học này, bạn sẽ khám phá cách scalability giúp bạn quản lý demand biến động bằng cách điều chỉnh compute capacity.
Chúng ta đã có hiểu biết tốt về những điều cơ bản của Amazon EC2 và cách nó có thể giúp với bất kỳ nhu cầu compute nào, giống như pha cà phê. À, ý tôi là pha cà phê một cách ẩn dụ. Cà phê đại diện cho... bất cứ thứ gì instance của bạn đang sản xuất. Trong thực tế, các instances có thể đang xử lý web requests, phân tích dữ liệu, hoặc hosting các loại applications khác.
Bây giờ, điều tiếp theo chúng ta muốn nói đến là một lợi ích lớn khác của AWS: scalability và elasticity. Đây là cách capacity có thể tăng và giảm, dựa trên nhu cầu kinh doanh.
Mục tiêu học tập
Sau khi hoàn thành bài học này, bạn sẽ có thể:
- ✅ Nhận biết các khái niệm về scalability và elasticity khi áp dụng vào AWS
- ✅ Mô tả cách AWS có thể giúp businesses điều chỉnh compute capacity dựa trên demand biến động
- ✅ Giải thích sự khác biệt giữa scaling up và scaling out
- ✅ Mô tả cách Amazon EC2 Auto Scaling hoạt động
- ✅ Giải thích các thành phần của Auto Scaling groups (Minimum, Desired, Maximum capacity)
Vấn đề về Capacity Planning
Nếu chúng ta đang chạy một business và đang lên kế hoạch cho sự tăng trưởng, chúng ta có thể biết trung bình cần bao nhiêu capacity. Tuy nhiên, trung bình có thể bao gồm traffic theo chu kỳ với các mùa bận rộn và yên tĩnh. Chúng ta muốn khách hàng hài lòng, vì vậy chúng ta luôn muốn có đủ capacity, nhưng chúng ta có nên lên kế hoạch cho peak usage không? Điều gì sẽ xảy ra nếu peak đó chỉ kéo dài một giờ? Hoặc điều gì sẽ xảy ra nếu chúng ta không biết khi nào các peaks xảy ra vì đây là một business mới? Chúng ta có nên mua nhiều capacity dư thừa không? Điều đó nghe có vẻ đắt đỏ. Giải pháp thay thế là gì? Lên kế hoạch cho một lượng nhỏ hơn và hy vọng điều tốt nhất?
Điều gì sẽ xảy ra nếu bạn có thể provision workload của mình đúng với demand, mỗi giờ, mỗi ngày? Bây giờ bạn có khách hàng hài lòng vì họ luôn có thể nhận được các services họ muốn. Và bạn có một CFO (Chief Financial Officer) hài lòng vì họ nhận được khoản tiết kiệm chi phí mà công ty cần.
High Availability với Redundant Instances
Hãy xem cách nó hoạt động.
Morgan đang ở quầy. Cô ấy đang nhận đơn hàng, nhưng cô ấy không làm tất cả công việc ở đây, vì vậy chúng ta cần ai đó làm đồ uống. Có vẻ như Rudy đang lên. Hãy tự hỏi điều gì sẽ xảy ra nếu chúng ta mất instance nhận đơn hàng. Chúng ta sẽ phải ngừng kinh doanh cho đến khi có người khác làm việc, hoặc một instance khác hoạt động.
Đây là nơi AWS làm cho mọi thứ trở nên đơn giản. Sử dụng cùng một phương pháp lập trình mà chúng ta đã sử dụng để tạo Morgan ban đầu, chúng ta có thể tạo một bản sao thứ hai của Morgan.
Nếu một instance thất bại, chúng ta đã có một instance khác sẵn sàng ở tuyến đầu để nhận đơn hàng. Khách hàng không bao giờ mất service, và trong lúc đó, chúng ta luôn có thể khởi động một instance khác của Morgan để thay thế instance đã thất bại. Và đừng quên về backend. Hãy làm cho các processing instances của chúng ta cũng redundant.
Điều đó giải quyết cho regular operating capacity của chúng ta. Bây giờ chúng ta có một hệ thống highly available với no single point of failure. Đây là lý do tại sao đây là best practice để thiết lập các EC2 instances redundant và deploy chúng trên nhiều AZs trong một Region. Bằng cách đó, nếu có vấn đề ở một nơi, các instances được deploy ở AZ khác có thể đảm nhận công việc.
Và miễn là số lượng khách hàng trong hàng đợi giữ nguyên, chúng ta ổn. Nhưng bạn biết điều đó sẽ thay đổi, phải không? Vì vậy, hãy xem điều gì sẽ xảy ra khi chúng ta có một đợt rush khách hàng—hoặc một sự gia tăng demand.
Key Takeaways
Scalability là về tiềm năng của một hệ thống để phát triển theo thời gian, trong khi Elasticity là về việc điều chỉnh resources động, on-demand.
Scalability
Scalability đề cập đến khả năng của một hệ thống xử lý tải tăng lên bằng cách thêm resources. Bạn có thể scale up bằng cách thêm nhiều sức mạnh hơn cho các máy hiện có, hoặc bạn có thể scale out bằng cách thêm nhiều máy hơn. Scalability tập trung vào long-term capacity planning để đảm bảo rằng hệ thống có thể phát triển và accommodate nhiều users hoặc workloads hơn khi cần.

Scaling Up (Vertical Scaling)
Scaling up, còn được gọi là vertical scaling, có nghĩa là thêm nhiều sức mạnh hơn cho các máy đang chạy. Điều này để máy cá nhân có nhiều sức mạnh hơn để làm công việc. Scaling up có thể cho bạn nhiều sức mạnh hơn mỗi instance, nhưng đó không phải lúc nào cũng là những gì bạn cần.
Scaling Out (Horizontal Scaling)
Scaling out, còn được gọi là horizontal scaling, là khi bạn thêm nhiều resources vào pool, để bạn có thể làm nhiều công việc hơn song song.
Hãy đưa ý tưởng scaling này vào coffee shop của chúng ta.
Ở đây, khi chúng ta có sự gia tăng khách hàng, một instance lớn hơn của tôi thực sự không thể nhận đơn hàng của khách hàng nhanh hơn. Điều đó phụ thuộc vào khách hàng nhiều hơn là tôi. "Tôi sẽ lấy một espresso. Ồ, đợi đã, đó có phải là organic không? Mmmm... làm nó thành một soy latte. Thực ra, tôi không biết. Bạn chỉ có trà không?" Những gì chúng ta cần là, tốt, nhiều instances của tôi hơn để xử lý nhiều khách hàng song song.
Hãy đưa nhiều khách hàng hơn vào đây. Ồ, bây giờ, điều đó không tốt. Có vẻ như các processing instances sắp bị quá tải vì các đơn hàng đang đến nhanh hơn. Các đơn hàng được xử lý nhanh hơn, nhưng đồ uống không được làm xong và khách hàng đang chờ đợi. Hãy tiếp tục và scale các processing instances, cũng vậy.
Đây là một câu hỏi có thể rõ ràng. Tại sao có nhiều order-taking instances hơn order-making instances?
Trong trường hợp này, lượng công việc được thực hiện vẫn nhiều hơn những gì các order-taking instances có thể gửi đến back of the house. Hiện tại không có backlog của đơn hàng, vì vậy không có lý do để thêm nhiều worker instances hơn. Bằng cách này, bạn có thể kết thúc với đúng lượng sức mạnh cho mỗi phần của quy trình, thay vì over-provisioning để giải quyết một vấn đề riêng biệt. Bạn có thể scale từng phần lên và xuống độc lập khi cần.
Elasticity
Elasticity là khả năng tự động scale resources lên hoặc xuống để phản ứng với real-time demand. Một hệ thống sau đó có thể nhanh chóng điều chỉnh resources của nó, scaling out trong các giai đoạn demand cao và scaling in khi demand giảm. Elasticity cung c ấp cost efficiency và optimal resource usage tại bất kỳ thời điểm nào.

Khi demand tăng tại coffee shop, hãy xem cách AWS scalability và elasticity giúp quản lý tăng trưởng hiệu quả và thích ứng với nhu cầu biến động.
Ồ, có vẻ như chúng ta vừa giải quyết xong đợt rush đó. Bây giờ đây là nơi AWS thực sự tạo ra sự khác biệt cho business của bạn. Chúng ta có các workers dư thừa đang ngồi không. Nếu chúng ta không cần chúng, chúng ta có thể gửi họ về nhà hoặc dừng các instances. Đây là cách Amazon EC2 Auto Scaling hoạt động.
Amazon EC2 Auto Scaling
Amazon EC2 Auto Scaling tự động điều chỉnh số lượng EC2 instances dựa trên thay đổi trong application demand, cung cấp better availability. Nó cung cấp hai cách tiếp cận:
- Dynamic scaling: Điều chỉnh real-time để phản ứng với biến động trong demand
- Predictive scaling: Lên lịch trước số lượng instances phù hợp dựa trên anticipated demand
EC2 Auto Scaling thêm instances dựa trên demand và các key scaling metrics, sau đó decommissions instances khi demand đó giảm xuống. Điều này có nghĩa là mỗi phút trong ngày, bạn luôn có số lượng instances mong muốn.
Cách Auto Scaling Hoạt động
Cách hoạt động kỹ thuật này liên quan đến một số AWS services khác để làm cho tất cả xảy ra. Bạn cần thu thập dữ liệu về performance của các instances, hoặc có thể dữ liệu về latency và các application metrics khác. Bạn sẽ sử dụng Amazon CloudWatch service để thu thập và monitor các metrics này. Dữ liệu này sau đó được sử dụng để xác định khi nào scaling cần xảy ra. Và, nó xảy ra tự động, đúng lúc bạn cần.
Ví dụ: Amazon EC2 Auto Scaling
Với EC2 Auto Scaling, bạn duy trì lượng compute capacity mong muốn cho application của mình bằng cách điều chỉnh động số lượng EC2 instances dựa trên demand. Bạn có thể tạo Auto Scaling groups, là các collections của EC2 instances có thể scale in hoặc out để đáp ứng nhu cầu của application.
Auto Scaling Groups
Một Auto Scaling group được cấu hình với ba key settings sau:
1. Minimum Capacity
Minimum capacity định nghĩa số lượng EC2 instances ít nhất cần thiết để giữ application chạy. Điều này đảm bảo rằng hệ thống không bao giờ scale xuống dưới ngưỡng này. Đây là số lượng EC2 instances được launch ngay sau khi bạn đã tạo Auto Scaling group.

Trong ví dụ này, minimum capacity là 4 EC2 instances.
2. Desired Capacity
Desired capacity là số lượng instances lý tưởng cần thiết để xử lý current workload, mà Auto Scaling nhắm đến để duy trì. Nếu bạn không chỉ định số lượng EC2 instances mong muốn trong một Auto Scaling group, desired capacity mặc định là minimum capacity của bạn.

Trong ví dụ này, desired capacity là 6 EC2 instances.
3. Maximum Capacity
Maximum capacity đặt giới hạn trên về s ố lượng instances có thể được launch, ngăn chặn over-scaling và kiểm soát chi phí. Ví dụ, bạn có thể cấu hình Auto Scaling group để scale out để phản ứng với demand tăng lên.

Trong ví dụ này, tối đa 12 EC2 instances có thể được launch. Amazon EC2 Auto Scaling sẽ scale giữa số lượng instances tối thiểu và tối đa.
Lợi ích về Chi phí
Vì Amazon EC2 Auto Scaling sử dụng EC2 instances, bạn chỉ trả tiền cho các instances bạn sử dụng, khi bạn sử dụng chúng. Điều này cung cấp cho bạn một kiến trúc cost-effective cung cấp trải nghiệm khách hàng tốt nhất trong khi giảm chi phí.
Best Practices
High Availability với Multiple Availability Zones
Đây là lý do tại sao đây là best practice để thiết lập các EC2 instances redundant và deploy chúng trên nhiều AZs trong một Region. Bằng cách đó, nếu có vấn đề ở một nơi, các instances được deploy ở AZ khác có thể đảm nhận công việc.
Independent Scaling
Bạn có thể scale từng phần của application lên và xuống độc lập khi cần. Điều này cho phép bạn có đúng lượng sức mạnh cho mỗi phần của quy trình, thay vì over-provisioning để giải quyết một vấn đề riêng biệt.
Tóm tắt
Trong bài học này, bạn đã học về:
- ✅ Scalability: Khả năng của một hệ thống xử lý tải tăng lên bằng cách thêm resources (scale up hoặc scale out)
- ✅ Elasticity: Khả năng tự động scale resources lên hoặc xuống để phản ứng với real-time demand
- ✅ Scaling Up (Vertical Scaling): Thêm nhiều sức mạnh hơn cho các máy hiện có
- ✅ Scaling Out (Horizontal Scaling): Thêm nhiều resources vào pool để làm nhiều công việc song song
- ✅ Amazon EC2 Auto Scaling: Tự động điều chỉnh số lượng EC2 instances dựa trên demand
- ✅ Auto Scaling Groups: Collections của EC2 instances với Minimum, Desired và Maximum capacity
- ✅ High Availability: Deploy instances trên nhiều AZs để tránh single point of failure
- ✅ CloudWatch Integration: Sử dụng CloudWatch để monitor metrics và trigger scaling events
Test your skills
Câu hỏi 1
What is the primary benefit of scalability and elasticity in AWS?
- The ability to manually adjust resources based on peak usage
- The ability to grow and shrink resources dynamically based on real-time demand
- The ability to create fixed resources that never change in size
- The ability to permanently increase resource capacity for long-term growth
Giải thích: Scalability và elasticity là về việc tự động điều chỉnh resources dựa trên demand, không chỉ là can thiệp thủ công.
Câu hỏi 2
What is the main reason for deploying Amazon EC2 instances across multiple Availability Zones?
- To increase the power and speed of each individual instance
- To provide high availability by allowing instances in different Availability Zones to handle traffic if one Availability Zone fails
- To decrease the cost of instances by distributing them evenly across AWS Regions
- To automatically scale instances based on resource usage in each Availability Zone
Giải thích: Deploying across Availability Zones cải thiện availability, không phải sức mạnh của các instances cá nhân.
Câu hỏi 3
How does AWS make sure that a business can meet fluctuating demand without over-provisioning resources?
- By providing fixed resources that are always available
- By allowing businesses to provision resources that automatically scale based on demand
- By requiring businesses to purchase excess resources in advance to handle peak demand
- By offering resources that are always running, regardless of demand
Giải thích: AWS cung cấp các resources linh hoạt và scalable điều chỉnh dựa trên demand.