Bỏ qua để đến nội dung

Amazon EC2 – Mức Associate

Trước khi bàn tới kiến trúc mạng trên AWS, cần thống nhất lại nền tảng: mạng có hai loại địa chỉ IP, IPv4 và IPv6.

  • IPv4: dạng 1.160.10.240 — bốn nhóm số, mỗi nhóm nằm trong khoảng [0-255].
  • IPv6: dạng 3ffe:1900:4545:3:200:f8ff:fe21:67cf.

Ở trình độ này ta chỉ làm việc với IPv4, vì nó vẫn là định dạng phổ biến nhất trên Internet. IPv6 mới hơn và giải quyết các bài toán của Internet of Things (IoT). IPv4 cho phép 3,7 tỷ địa chỉ khác nhau trong không gian public — con số này nghe lớn nhưng không đủ cho toàn thế giới, và đó chính là lý do khái niệm “private IP” tồn tại.

Public IP Private IP
Phạm vi nhận dạng Máy được nhận dạng trên Internet (WWW) Máy chỉ được nhận dạng trong mạng nội bộ
Tính duy nhất Phải duy nhất trên toàn bộ Internet — không có hai máy cùng một public IP Phải duy nhất trong mạng nội bộ đó; nhưng hai mạng nội bộ khác nhau (hai công ty khác nhau) có thể dùng cùng dải IP
Định vị địa lý Dễ dàng geo-locate
Ra Internet Trực tiếp Phải đi qua NAT + internet gateway (một dạng proxy)
Dải địa chỉ Chỉ một dải IP xác định được dùng làm private IP

Trong ví dụ của slide: Company A và Company B đều dùng cùng một mạng nội bộ 192.168.0.1/22 — hoàn toàn hợp lệ vì đó là private IP. Nhưng các Internet Gateway và các server hướng ra Internet của họ thì phải có public IP riêng biệt, không trùng nhau (149.140.72.10, 253.144.139.205, 79.216.59.75, 211.139.37.43).

Mặc định, một máy EC2 được cấp cả hai:

  • Một private IP cho mạng nội bộ của AWS.
  • Một public IP cho Internet.

Điều này dẫn tới hai hệ quả thực tế mà bạn sẽ gặp ngay khi làm thực hành:

  • Khi SSH vào EC2 từ máy cá nhân, bạn không dùng được private IP (vì bạn không nằm trong cùng mạng đó) — chỉ dùng được public IP.
  • Nếu máy bị stop rồi start lại, public IP có thể thay đổi.

Vấn đề vừa nêu là lý do Elastic IP tồn tại: nếu bạn cần một public IP cố định cho instance của mình, bạn cần một Elastic IP.

  • Elastic IP là một public IPv4 mà bạn sở hữu, chừng nào bạn chưa xóa nó.
  • Bạn gắn nó cho một instance tại một thời điểm.
  • Nhờ Elastic IP, bạn có thể che lấp sự cố của một instance hoặc của phần mềm, bằng cách trỏ nhanh địa chỉ đó sang một instance khác trong account của mình.
  • Bạn chỉ có 5 Elastic IP trong một account (có thể xin AWS tăng giới hạn).

Nhưng đây là điểm quan trọng nhất, và cũng là phần rất dễ ra đề: nhìn chung hãy cố tránh dùng Elastic IP, vì chúng thường phản ánh những quyết định kiến trúc kém. Hai lựa chọn tốt hơn:

  • Dùng một public IP bất kỳđăng ký một tên DNS trỏ tới nó.
  • Hoặc dùng một Load Balancer và không dùng public IP cho instance nào cả.

Đôi khi bạn cần kiểm soát chiến lược đặt EC2 instance — chúng nằm gần nhau hay xa nhau trên phần cứng vật lý. Chiến lược đó được khai báo bằng placement group, và khi tạo một placement group bạn phải chọn một trong ba strategy.

Cluster dồn các instance vào một nhóm có độ trễ thấp, trong cùng một Availability Zone.

  • Ưu điểm: mạng rất tốt — băng thông 10 Gbps giữa các instance khi bật Enhanced Networking (được khuyến nghị).
  • Nhược điểm: nếu AZ đó gặp sự cố, toàn bộ instance chết cùng lúc.
  • Use case: công việc Big Data cần hoàn thành nhanh; ứng dụng cần độ trễ cực thấp và throughput mạng cao.

Spread rải các instance ra các phần cứng vật lý khác nhau — ngược hoàn toàn với Cluster.

  • Ưu điểm: trải được ra nhiều Availability Zone; giảm rủi ro chết đồng thời; các EC2 instance nằm trên phần cứng vật lý khác nhau.
  • Nhược điểm: giới hạn 7 instance mỗi AZ mỗi placement group.
  • Use case: ứng dụng cần tối đa hóa tính sẵn sàng cao; ứng dụng trọng yếu mà mỗi instance phải được cách ly khỏi sự cố của các instance khác.

Sơ đồ của slide minh họa rõ: ở us-east-1a có hai instance nằm trên Hardware 1 và Hardware 2, ở us-east-1b nằm trên Hardware 3 và Hardware 4, ở us-east-1c nằm trên Hardware 5 và Hardware 6 — mỗi instance một phần cứng riêng.

Partition rải các instance ra nhiều partition khác nhau, và các partition này dựa trên các bộ rack khác nhau trong một AZ. Đây là lựa chọn dành cho các hệ thống phân tán quy mô lớn.

  • Tối đa 7 partition mỗi AZ.
  • Trải được ra nhiều AZ trong cùng một Region.
  • Scale tới hàng trăm EC2 instance mỗi group.
  • Các instance trong một partition không dùng chung rack với instance của các partition khác.
  • Một partition gặp sự cố có thể ảnh hưởng nhiều EC2 nhưng không ảnh hưởng các partition khác.
  • EC2 instance truy cập được thông tin partition của mình dưới dạng metadata — điều này cho phép ứng dụng tự biết mình đang nằm ở đâu để phân bổ dữ liệu cho hợp lý.
  • Use case: HDFS, HBase, Cassandra, Kafka.
Strategy Cách đặt instance Giới hạn Use case tiêu biểu
Cluster Dồn vào một nhóm độ trễ thấp, một AZ duy nhất Cả nhóm chết nếu AZ chết Big Data cần xong nhanh, ứng dụng độ trễ cực thấp
Spread Rải trên các phần cứng khác nhau, nhiều AZ Tối đa 7 instance / AZ / group Tối đa hóa HA, ứng dụng trọng yếu cần cách ly
Partition Rải theo partition dựa trên các bộ rack khác nhau, nhiều AZ trong cùng Region Tối đa 7 partition / AZ, hàng trăm instance HDFS, HBase, Cassandra, Kafka

ENI là một thành phần logic trong một VPC, đại diện cho một card mạng ảo — hãy hình dung nó như một chiếc card mạng bạn có thể tháo ra cắm vào máy khác.

Một ENI có các thuộc tính sau:

  • Một primary private IPv4, và một hoặc nhiều secondary IPv4.
  • Một Elastic IP (IPv4) cho mỗi private IPv4.
  • Một Public IPv4.
  • Một hoặc nhiều security group.
  • Một địa chỉ MAC.

Hai đặc điểm về vận hành là phần quan trọng nhất:

  • Bạn có thể tạo ENI một cách độc lậpgắn chúng vào EC2 instance ngay lúc đang chạy (on the fly) — tức là di chuyển chúng — để làm failover.
  • ENI bị ràng buộc vào một Availability Zone cụ thể.

Trong sơ đồ của slide: một EC2 có Eth0 là primary ENI (192.168.0.31) và Eth1 là secondary ENI (192.168.0.42); chiếc Eth0 primary ENI của một instance khác thì có thể được chuyển đi — nhưng chỉ trong phạm vi cùng một Availability Zone.

Bạn đã biết hai hành động stopterminate, và sự khác nhau về dữ liệu giữa chúng:

  • Stop — dữ liệu trên đĩa (EBS) được giữ nguyên cho lần start tiếp theo.
  • Terminate — mọi EBS volume (root) được đặt cấu hình sẽ bị hủy thì mất.

Khi start một instance, chuyện sau đây xảy ra:

  • Lần start đầu tiên: OS boot và EC2 User Data script được chạy.
  • Các lần start sau: OS chỉ boot lên.

Và đây là vấn đề: sau khi OS boot, ứng dụng của bạn mới khởi động, cache mới được làm nóng (warmed up) — và việc đó có thể mất rất nhiều thời gian!

EC2 Hibernate giải quyết đúng chỗ đau đó:

  • Trạng thái bộ nhớ (RAM) được bảo toàn.
  • Instance boot nhanh hơn rất nhiều — vì OS không bị stop / restart.
  • Bên dưới nắp máy: trạng thái RAM được ghi vào một file trong root EBS volume.
  • Root EBS volume bắt buộc phải được mã hóa (encrypted).

Use case:

  • Các tiến trình xử lý chạy dài (long-running processing).
  • Cần lưu lại trạng thái RAM.
  • Các dịch vụ mất nhiều thời gian để khởi tạo.

Vòng trạng thái theo sơ đồ của slide: từ Running, khi bạn ra lệnh Hibernate, máy chuyển qua Stopping rồi Stopped — nhưng khác với stop thường, phần RAM đã được ghi xuống root EBS volume đã mã hóa. Khi Start lại, RAM được nạp trở lại và máy về Running mà không phải khởi động lại OS.

Đây là danh sách điều kiện, và chính các con số ở đây là chỗ hay ra đề:

  • Họ instance được hỗ trợ: C3, C4, C5, I3, M3, M4, R3, R4, T2, T3, …
  • Dung lượng RAM của instance: phải nhỏ hơn 150 GB.
  • Kích cỡ instance: không hỗ trợ cho bare metal instance.
  • AMI: Amazon Linux 2, Linux AMI, Ubuntu, RHEL, CentOS & Windows…
  • Root Volume: phải là EBS, phải được mã hóa, không phải instance store, và phải lớn.
  • Khả dụng cho On-Demand, Reserved và Spot Instances.
  • Một instance KHÔNG thể hibernate quá 60 ngày.
Chủ đề Cần nhớ
IPv4 Định dạng đang dùng ở đây, cho 3,7 tỷ địa chỉ public; IPv6 mới hơn, giải quyết bài toán IoT
Public IP Duy nhất trên toàn Internet, geo-locate được
Private IP Chỉ duy nhất trong mạng nội bộ, hai mạng khác nhau dùng trùng dải được, ra Internet qua NAT + internet gateway
Địa chỉ trên EC2 Mặc định có cả private IP lẫn public IP; SSH từ ngoài phải dùng public IP; stop/start có thể làm public IP thay đổi
Elastic IP Public IPv4 bạn sở hữu, gắn cho một instance tại một thời điểm, giới hạn 5 cái mỗi account, remap được khi instance chết — nhưng nên tránh, hãy dùng DNS hoặc Load Balancer
Placement Group – Cluster Một AZ, mạng 10 Gbps với Enhanced Networking; AZ chết là chết hết
Placement Group – Spread Khác phần cứng, trải nhiều AZ, tối đa 7 instance / AZ / group, dùng cho HA tối đa
Placement Group – Partition Tối đa 7 partition / AZ, hàng trăm instance, partition không dùng chung rack, instance đọc được partition qua metadata; HDFS, HBase, Cassandra, Kafka
ENI Card mạng ảo trong VPC: primary + secondary IPv4, một Elastic IP cho mỗi private IPv4, public IPv4, security group, MAC address; gắn/tháo on the fly để failover; bị khóa vào một AZ
Stop vs Terminate Stop giữ dữ liệu EBS; Terminate xóa các volume được đánh dấu xóa
EC2 Hibernate Giữ nguyên trạng thái RAM vào root EBS volume đã mã hóa, boot nhanh vì OS không restart
Điều kiện Hibernate RAM < 150 GB, không hỗ trợ bare metal, root volume là EBS đã mã hóa, dùng được với On-Demand / Reserved / Spot, không quá 60 ngày