Lesson 2: Introduction to Computing
Amazone EC2 là gì?
Trong thế giới cloud, một trong những khái niệm quan trọng nhất bạn cần nắm chính là compute. Đây là năng lực xử lý dùng để chạy ứng dụng, xử lý dữ liệu và thực hiện các tác vụ tính toán. Nếu như trước đây bạn phải tự mua server, lắp đặt và vận hành, thì với cloud, mọi thứ trở nên đơn giản hơn rất nhiều.
Compute trong cloud cho phép bạn tạo ra các máy ảo (virtual machines) và sử dụng chúng thông qua internet. Bạn không cần sở hữu phần cứng, không cần bảo trì hệ thống vật lý, nhưng vẫn có thể chạy ứng dụng như trên một server thực thụ. Tất cả đều được cung cấp theo nhu cầu — cần là có, dùng bao nhiêu trả bấy nhiêu - và một trong những compute phổ biến nhất của AWS chính là EC2. Đây là một dịch vụ cho phép bạn khởi tạo và quản lý các máy chủ ảo một cách linh hoạt.
So với mô hình truyền thống (on-premises), sự khác biệt là rất rõ ràng. Khi sử dụng hạ tầng nội bộ, bạn phải đầu tư phần cứng từ trước, chờ triển khai và thường bị giới hạn bởi năng lực đã mua. Điều này dẫn đến hai vấn đề phổ biến: hoặc là thiếu tài nguyên khi cần mở rộng, hoặc là dư thừa tài nguyên gây lãng phí. Trong khi đó, với EC2, bạn không cần dự đoán trước nhu cầu. Bạn có thể scale theo thời gian thực, đảm bảo hệ thống luôn hoạt động tối ưu mà không phải trả tiền cho tài nguyên không sử dụng.
Sử dụng EC2 như thế nào?
Tiếp theo thì làm thế nào để chúng ta có thể sử dụng EC2? Điểm mạnh của EC2 nằm ở chỗ bạn có thể yêu cầu tài nguyên và sử dụng gần như ngay lập tức. Chỉ trong vài phút, một virtual server đã sẵn sàng để bạn triển khai ứng dụng. Toàn bộ quy trình có thể được tóm gọn trong ba bước chính: khởi tạo (launch), kết nối (connect) và sử dụng (use).
Launch Instance: Bước đầu tiên là tạo một EC2 Instance, khi khởi tạo thì bạn có thể lựa chọn một Amazone Machine Image (AMI) - Đây là một template định nghĩa hệ điều hành và các phần mềm có sẵn nếu có. Sau đó là bạn sẽ chọn instance type, cấu hình những cấu hình như CPU, RAM, Network performance.
Connect to Instance: Sau khi instance dược khởi tạo, thì chúng ta có thể kết nối tới EC2 đó để sử dụng. Có nhiều cách có thể xài như SSH (thông dụng nhất rồi đúng không) hoặc xài các dịch vụ AWS như AWS Systems Manager để kết nối một cách an toàn và đơn giản hơn.
Use the Instance: Sau khi kết nối thành công, EC2 instance hoạt động như một server thực. Nếu bạn đã từng tạo một máy ảo như VMWare bla bla thì nó cũng y chang vậy. Có thể chạy thông qua terminal, install, update, deploy,…
EC2 Instance Type
AWS cung cấp rất nhiều loại instance khác nhau, mỗi loại được tối ưu cho một mục đích riêng. Thay vì dùng “một loại cho tất cả”, bạn có thể chọn đúng tài nguyên phù hợp với workload để đạt hiệu quả cao nhất. Mỗi EC2 instance được cấu hình với một tổ hợp tài nguyên khác nhau: CPU, Memory, Storage Network,…
Instance Type | Ký hiệu | Đặc điểm chính | Use case phổ biến |
|---|---|---|---|
General Purpose | M, T | Cân bằng CPU, RAM, network | Web server, application server, dev/test |
Compute Optimized | C | CPU mạnh, hiệu năng cao | Batch processing, HPC, web hiệu năng cao |
Memory Optimized | R, X, U | RAM lớn, xử lý dữ liệu nhanh | Database, caching (Redis), analytics |
Accelerated Computing | P, G, Inf, Trn | GPU / accelerator | AI/ML, deep learning, video processing |
Storage Optimized | I, D | I/O cao, storage tốc độ cao | Big data, data warehouse, NoSQL |
EC2 Instance cũng sẽ có một quy tắc đặt tên như sau:
<instance family><generation><options>.<size>Ví dụ: c7g.large
c → Compute optimized
7 → Generation (thế hệ)
g → AWS Graviton (ARM CPU)
large → kích thước instance
Xem chi tiết đầy đủ tại https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html
Cái giá phải trả
Một trong những điểm mạnh nhất của Amazon EC2 không chỉ nằm ở khả năng linh hoạt, mà còn ở mô hình định giá đa dạng. AWS cung cấp nhiều lựa chọn pricing khác nhau để phù hợp với từng loại workload — từ ngắn hạn, không ổn định cho đến dài hạn, ổn định. Hiểu rõ các mô hình này là chìa khóa để bạn tối ưu chi phí mà không ảnh hưởng đến hiệu năng hệ thống.
Pricing Model | Mô tả | Mức tiết kiệm | Đặc điểm chính | Use case phù hợp |
|---|---|---|---|---|
On-Demand | Trả theo mức sử dụng, không cam kết | 0% | Linh hoạt, dùng khi cần | Dev/Test, workload ngắn hạn, traffic không ổn định |
Reserved Instances (RI) | Cam kết 1–3 năm | Lên đến ~75% | Giá rẻ hơn, ít linh hoạt | Production ổn định, workload dài hạn |
Savings Plans | Cam kết mức sử dụng theo giờ | Lên đến ~72% | Linh hoạt hơn RI, áp dụng nhiều dịch vụ | Workload ổn định nhưng cần flexibility |
Spot Instances | Dùng tài nguyên dư thừa | Lên đến ~90% | Có thể bị gián đoạn | Batch jobs, data processing, ML training |
Dedicated Instances | Instance chạy trên phần cứng riêng | Không focus tiết kiệm | Cách ly với account khác | Compliance, security |
Dedicated Hosts | Thuê toàn bộ server vật lý | Không focus tiết kiệm | Full control hardware | BYOL, licensing, kiểm soát hạ tầng |
Dedicated Instances vs Dedicated Hosts: Khi nào cần cách ly hạ tầng?
Trong AWS, không phải lúc nào bạn cũng muốn chạy ứng dụng trên hạ tầng dùng chung với các khách hàng khác. Đặc biệt với các hệ thống yêu cầu cao về bảo mật hoặc tuân thủ (compliance), việc cách ly tài nguyên vật lý trở nên rất quan trọng.
AWS cung cấp hai lựa chọn cho bài toán này: Dedicated Instances và Dedicated Hosts. Dedicated Instances là các EC2 instance chạy trên phần cứng riêng biệt, không chia sẻ với các tài khoản AWS khác. Dedicated Hosts là thuê toàn bộ một physical server - quyết định chạy ở đâu, resource allocation, mapping instance → hardware.
Tiêu chí | Dedicated Instances | Dedicated Hosts |
|---|---|---|
Cách ly vật lý | Có | Có |
Kiểm soát server vật lý | Không | Có |
Quyền kiểm soát | Trung bình | Cao |
Độ linh hoạt | Cao | Thấp hơn |
Chi phí | Thấp hơn | Cao hơn |
Nếu bạn chỉ cần cách ly hạ tầng → chọn Dedicated Instances. Nếu bạn cần toàn quyền kiểm soát phần cứng → chọn Dedicated Hosts
Scaling trong Amazon EC2
Trong quá trình vận hành một hệ thống, sẽ luôn có những thời điểm lưu lượng truy cập tăng đột biến — ví dụ như khi có chiến dịch marketing, flash sale, hoặc đơn giản là giờ cao điểm. Nếu hạ tầng không đủ khả năng xử lý, người dùng sẽ gặp tình trạng chậm, timeout, hoặc thậm chí không truy cập được hệ thống. Đây chính là lý do vì sao khái niệm scaling trở thành một phần cốt lõi khi xây dựng hệ thống trên cloud.
Trong AWS, scaling không chỉ đơn thuần là việc “tăng thêm server”, mà còn liên quan đến hai khái niệm quan trọng: scalability và elasticity. Hai khái niệm này nghe có vẻ giống nhau, nhưng lại phục vụ hai mục tiêu khác nhau.
Scalability đề cập đến khả năng hệ thống có thể phát triển theo thời gian. Khi nhu cầu tăng lên, bạn có thể nâng cấp tài nguyên của máy hiện tại hoặc thêm nhiều máy mới để xử lý tải lớn hơn. Đây là cách tiếp cận mang tính dài hạn, giúp hệ thống sẵn sàng cho sự tăng trưởng về người dùng hoặc workload.
Trong khi đó, elasticity lại mang tính linh hoạt theo thời gian thực. Hệ thống có thể tự động tăng tài nguyên khi nhu cầu tăng và giảm tài nguyên khi nhu cầu giảm. Điều này đặc biệt quan trọng trong môi trường cloud, nơi mà chi phí gắn liền trực tiếp với mức độ sử dụng tài nguyên. Nếu không có elasticity, bạn rất dễ rơi vào tình trạng trả tiền cho những tài nguyên không thực sự cần thiết.
Để hiện thực hóa hai khái niệm này, AWS cung cấp một dịch vụ rất quan trọng: Amazon EC2 Auto Scaling. Dịch vụ này cho phép hệ thống tự động điều chỉnh số lượng EC2 instances dựa trên nhu cầu thực tế của ứng dụng.
Thay vì phải tự tay theo dõi và scale hệ thống, bạn chỉ cần định nghĩa trước một số ngưỡng. Ví dụ, bạn có thể cấu hình để hệ thống luôn duy trì một số lượng instance tối thiểu nhằm đảm bảo ứng dụng luôn hoạt động ổn định. Đồng thời, bạn cũng có thể đặt một mức tối đa để tránh việc scale quá mức gây lãng phí chi phí. Ở giữa hai mức này là một giá trị lý tưởng mà hệ thống cố gắng duy trì trong điều kiện bình thường.
Khi lưu lượng truy cập tăng lên, Auto Scaling sẽ tự động thêm instance mới để xử lý tải. Ngược lại, khi nhu cầu giảm, các instance không cần thiết sẽ được loại bỏ. Toàn bộ quá trình này diễn ra tự động, không cần can thiệp thủ công, giúp hệ thống luôn ở trạng thái cân bằng giữa hiệu năng và chi phí.
Elastic Load Balancing
Khi hệ thống của bạn bắt đầu có nhiều người dùng hơn, một trong những vấn đề đầu tiên bạn sẽ gặp phải là việc phân phối lưu lượng truy cập. Nếu tất cả request đều đổ vào một server duy nhất, server đó sẽ nhanh chóng bị quá tải, dẫn đến chậm hoặc thậm chí sập hệ thống. Đây là lúc Elastic Load Balancing (ELB) trở thành một thành phần không thể thiếu trong kiến trúc AWS.
Elastic Load Balancing đóng vai trò như một “cổng vào” duy nhất cho toàn bộ traffic của hệ thống. Thay vì client gửi request trực tiếp đến từng EC2 instance, tất cả request sẽ đi qua load balancer trước, sau đó được phân phối đến các instance phía sau một cách hợp lý. Điều này giúp đảm bảo không có instance nào bị quá tải, đồng thời tối ưu hiệu năng tổng thể. Trong một hệ thống thực tế, ELB thường hoạt động cùng với Amazon EC2 Auto Scaling. Khi lưu lượng truy cập tăng lên, Auto Scaling sẽ tự động thêm các EC2 instance mới. Ngược lại, khi nhu cầu giảm, số lượng instance sẽ được giảm xuống. ELB sẽ liên tục cập nhật danh sách các instance đang hoạt động và phân phối traffic đến chúng một cách cân bằng. Sự kết hợp này giúp hệ thống vừa có khả năng mở rộng linh hoạt, vừa duy trì hiệu năng ổn định.
Một trong những lợi ích lớn nhất của ELB là khả năng phân phối traffic hiệu quả. Bằng cách chia đều request đến nhiều instance, hệ thống tránh được tình trạng “nút cổ chai” tại một điểm duy nhất. Đồng thời, ELB cũng tự động thích nghi với sự thay đổi của hệ thống, chẳng hạn như khi có thêm hoặc bớt instance, mà không cần can thiệp thủ công. Điều này giúp giảm đáng kể khối lượng vận hành và quản lý hạ tầng. Ngoài ra, ELB còn giúp tách biệt giữa tầng frontend và backend. Điều này có nghĩa là bạn có thể thay đổi, nâng cấp hoặc bảo trì các instance phía sau mà không ảnh hưởng trực tiếp đến người dùng cuối. Load balancer sẽ xử lý việc chuyển hướng traffic, failover và đảm bảo hệ thống luôn sẵn sàng.
Để tối ưu việc phân phối traffic, ELB sử dụng nhiều thuật toán routing khác nhau như Round Robin, Least Connections, IP Hash, Least Response Time. Chung quy lại thì ELB giúp bạn giải quyết một bài toán rất quen thuộc trong hệ thống phân tán: làm sao để nhiều server hoạt động như một hệ thống duy nhất, mượt mà và đáng tin cậy.
Message and Queuing
Trong thế giới phát triển phần mềm hiện đại, một hệ thống không chỉ cần chạy được — mà còn phải chịu lỗi tốt và dễ mở rộng. Và một trong những yếu tố quyết định điều đó chính là: coupling. Hiểu đơn giản, coupling là mức độ “phụ thuộc” giữa các thành phần trong hệ thống. Phụ thuộc càng nhiều thì càng dễ “toang dây chuyền”.
Monolithic: Khi mọi thứ dính chặt như… bát bún bò Huế
Trong kiến trúc truyền thống (monolithic), tất cả các thành phần như:
database
backend
business logic
frontend
đều nằm chung một khối. Nghe thì tiện, nhưng vấn đề là:
Chỉ cần một phần “hắt xì”… cả hệ thống có thể “cảm cúm theo”.
Ví dụ: Bạn đang đặt đồ ăn, nhưng hệ thống thanh toán bị lỗi → không đặt được món luôn, dù bếp vẫn hoạt động ngon lành. Đây chính là tight coupling:
Các thành phần phụ thuộc chặt vào nhau
Một lỗi nhỏ → lan ra toàn hệ thống
Microservices: Ai làm việc nấy, không ai kéo ai xuống
Để giải quyết vấn đề này, kiến trúc microservices ra đời.
Thay vì gom tất cả vào một khối, hệ thống được chia nhỏ thành các service độc lập:
Payment service
Order service
Inventory service
Delivery service
Mỗi service:
Hoạt động độc lập
Giao tiếp qua message hoặc event
Nếu một service “nghỉ phép”:
Các service khác vẫn chạy bình thường
Ví dụ: Thanh toán lỗi → đơn hàng vẫn được ghi nhận → retry sau. Đây là loose coupling:
Ít phụ thuộc
Hệ thống resilient hơn
Ok để giải quyết bài toán đó, thì AWS cung cấp nhiều cái dịch vụ t rung gian để các services giao tiếp với nhau thông minh hơn như:
Amazon EventBridge
Amazon SQS
Amazon SNS
Amazon EventBridge
Amazon EventBridge là dịch vụ event bus serverless giúp các thành phần trong hệ thống giao tiếp với nhau thông qua sự kiện (event). Khi một sự kiện xảy ra, EventBridge sẽ tự động định tuyến đến đúng service xử lý, giúp xây dựng hệ thống event-driven linh hoạt, dễ mở rộng và ít phụ thuộc giữa các thành phần.
Amazon SQS
Amazon SQS là dịch vụ hàng đợi message giúp các service giao tiếp với nhau một cách an toàn và không đồng bộ. Message sẽ được lưu trong queue cho đến khi được xử lý, giúp hệ thống tránh bị quá tải và đảm bảo không mất dữ liệu ngay cả khi một service tạm thời không hoạt động.
Amazon SNS
Amazon SNS là dịch vụ publish-subscribe cho phép gửi message đến nhiều subscriber cùng lúc. Khi một sự kiện được publish, SNS sẽ phân phối thông báo đến các endpoint như email, HTTP, Lambda… giúp hệ thống dễ dàng broadcast thông tin và xây dựng các luồng thông báo linh hoạt.
Hết bài
Qua phần này, hi vọng các bạn đã nắm được cách AWS thay đổi hoàn toàn cách xây dựng và vận hành hạ tầng. Với Amazon EC2, bạn có thể tạo server theo nhu cầu, scale linh hoạt và chỉ trả tiền cho những gì sử dụng.
Khi hệ thống phát triển, việc chọn đúng instance type và pricing model giúp tối ưu cả hiệu năng lẫn chi phí. Kết hợp với Auto Scaling và Elastic Load Balancing, hệ thống có thể tự động mở rộng, phân phối traffic và duy trì ổn định ngay cả khi tải tăng cao.
Cuối cùng, với các dịch vụ như Amazon EventBridge, Amazon SQS và Amazon SNS, bạn có thể xây dựng kiến trúc microservices linh hoạt, giảm phụ thuộc và tăng khả năng chịu lỗi.