- Published on
Các vấn đề về Network trên AWS EC2
- Authors
- Name Neutrino
join our community
Đối với bất kì hệ thống máy chủ nào, kể cả Cloud hay On-premise, Network đóng vai trò vô cùng quan trọng, nếu không có hệ thống mạng, các máy chủ sẽ không thể kết nối với nhau, hoặc với các thiết bị ngoài. Và AWS EC2 cũng không ngoại lệ, nếu không có hệ thống này, các máy chủ sẽ bị cô lập, và trở nên vô giá trị dù cấu hình hay chất lượng có tốt thế nào đi chăng nữa. Ngoài ra một hệ thống mạng ổn định cũng giúp tăng trải nghiệm khách hàng mà các máy chủ này phục vụ, thông thường các dịch vụ chỉ có khoảng 2s để hoàn thiện các bước xử lý trước khi trả kết quả cho client nếu muốn đem tới trải nghiệm tốt nhất.
Private vs Public IP (IPv4)
- Hiện AWS cung cấp đầy đủ cả 2 dạng IP hiện hữu là IPv4 và IPv6. 2 loại IP này có thể được mô tả như ví dụ sau:
- IPv4: 1.160.10.240
- IPv6: 3ffe:1900:4545:3:200:f8ff:fe21:67cf
- IPv4: 1.160.10.240
- Trong đa phần các trường hợp hiện nay, với 3.7 tỷ địa chỉ IP khác nhau IPv4 vẫn đủ để sử dụng, kể cả với hệ thống các máy chủ của AWS.
- Cấu trúc IPv4: [0-255].[0-255].[0-255].[0-255].
- IPv6 được sinh ra để giải quyết các vấn đề về địa chỉ IP, khi mà 3.7 tỷ địa chỉ nghe có vẻ đủ với tổng số chưa đến 8 tỷ dân cư trên toàn cầu, tuy nhiên với sự phát triển của hàng tỷ thiết bị mạng khác nhau, đặc biệt là trong các công nghệ liên quan đến IoT, xe tự lái... thì kho dự trữ 3.7 tỷ địa chỉ của IPv4 sẽ nhanh chóng bị dùng hết và khi đó người ta sẽ cần mở rộng nó ra, tạo ra IPv6.
Trong bài viết này, chúng ta sẽ tập trung vào IPv4, vì nó là loại IP được sử dụng phổ biến nhất hiện nay và cũng được dùng thường xuyên khi làm việc với các hệ thống của AWS nói chung.
Đối với IPv4, AWS cung cấp 2 loại IP là Public và Private được sử dụng cho các mục đích khác nhau. Các loại IP này có thể được mô tả như sau:
Public IP
- Địa chỉ IP này dùng để nhận diện, kết nối tới máy chủ từ Internet và có thể dễ dàng xác định vị trí.
- Địa chỉ IP này là duy nhất và nằm trong số 3.7 tỷ địa chỉ IPv4 đã được nhắc đến ở phần trên.
Private IP
- Giống như cái tên của nó, Private IP chỉ có thể được nhận diện trong một Private Network xác định và không thể nhìn thấy từ Internet.
- Mặc dù không public ra ngoài internet, địa chỉ này vẫn phải là duy nhất đối với mạng mà nó thuộc về. Tuy nhiên 2 mạng Private khác nhau có thể có chung 1 địa chỉ IP.
- Có thể kết nối ra bên ngoài internet thông qua việc sử dụng NAT + Internet Gateway (Proxy).
- Không phải bất cứ dải IP nào đều có thể sử dụng trong Private Network, theo IANA (Internet Assigned Numbers Authority), chỉ có 3 dải IP được sử dụng trong Private Network:
- Class A: 10.0.0.0 to 10.255.255.255
- Class B: 172.16.0.0 to 172.31.255.255
- Class C: 192.168.0.0 to 192.168.255.255
- Class A: 10.0.0.0 to 10.255.255.255
Elastic IPs
- Một lưu ý quan trọng là địa chỉ IP của EC2 Instance sẽ thay đổi mỗi khi người dùng Start/Stop ứng dụng. Giá trị này sẽ được cấp ngẫu nhiên.
- Mặc dù vậy, việc các nhà cung cấp Domain cần gán domain của bạn với địa chỉ IP xác định để truy cập vào ứng dụng của bạn, vì vậy bạn cần phải có một địa chỉ IP cố định. Để giải quyết vấn đề này, AWS cung cấp dịch vụ Elastic IP.
- Giá trị này thuộc về tài khoản AWS, nó sẽ không thay đổi cho tới khi được xóa bỏ. Vì vậy nên khi nó được gán cho một Instance nhất định, nó có thể giải quyết bài toán thay đổi IP nói trên. Cần lưu ý rằng một Elastic IP chỉ có thể được gắn cho 1 Instance tại 1 thời điểm (Điều này là tất yếu).
- Một lợi ích khi sử dụng Elastic IP là khi máy chủ của bạn bị lỗi, bạn có thể nhanh chóng chuyển địa chỉ này sang máy chủ khác nằm trong kế hoạch backup của bạn, để giúp duy trì hệ thống hoạt động bình thường hoặc chí ít sẽ che dấu các lỗi hệ thống với khách hàng. Thao tác này thường chỉ mất vài phút.
- Mỗi tài khoản chỉ được cấp tối đa 5 giá trị Elastic IP. Như đã nói ở trên, số lượng IPv4 là hữu hạn và nếu muốn sử dụng thêm, có thể liên hệ AWS tuy nhiên khả năng rất cao là sẽ có thêm những hóa đơn cho mục này.
Mặc dù có khá nhiều lợi ích, tuy nhiên hãy cân nhắc khi sử dụng Elastic IP vì nó thường phản ánh việc hệ thống chưa sở hữu một kiến trúc được thiết kế đủ tốt. Thay vào đó hãy đăng ký DNS cho các máy chủ trên AWS (sử dụng Route53) hoặc các cơ chế NoIP khác. Một giải pháp khác có thể kể đến, đặc biệt đối với các hệ thống có số lượng người dùng tương đối lớn, đó là sử dụng cân bằng tải (ALB). Phần này sẽ được nhắc đến trong các bài viết trong tương lai.
Placement Groups
Trong nhiều trường hợp, bạn sẽ cần gom các Instances lại nhằm tối ưu các vấn đề như độ trễ, mô hình mạng hay đơn giản đó là Policy nào đó của công ty, và Placement Group sẽ giúp xử lý các vấn đề này.
Thông thường tùy vào các mục đích khác nhau, nhìn chung Placement Group có thể được sử dụng thông qua 3 chiến lược sau:
- Cluster: Nhóm các Instances vào một nhóm có độ trễ thấp trong một Availability Zone xác định.
- Spread: Trải đều các Instances trên các phần cứng xác định, tối đa 7 Instance cho mỗi Availability Zone.
- Partition: Phân tán các Instance trên nhiều phân vùng khác nhau trên một Avaibility Zone, Scale lên tới 100 Instances trên mỗi nhóm.
Cluster Placement Groups
- Ưu điểm: Độ trễ cực kì thấp và sở hữu chất lượng đường truyền cực tốt (Lên tới 10Gbps khi truyền nhận giữa các Instances khi sử dụng Enhanced Networking).
- Nhược điểm: Khi Rack fail, toàn bộ các Instance cũng sẽ fail theo.
- Use Case:
- Các tác vụ liên quan đến Big Data cần tốc độ cao và độ trễ thấp do lượng dữ liệu lớn.
- Các ứng dụng yêu cầu độ trễ cực thấp và thông lượng mạng (throughput) cao.
- Các tác vụ liên quan đến Big Data cần tốc độ cao và độ trễ thấp do lượng dữ liệu lớn.
Spread Placement Groups
- Ưu điểm:
- Có thể mở rộng xuyên suốt các Availability Zone.
- Giảm thiểu rủi do khi gặp lỗi hệ thống.
- Các Instance sẽ được phân bổ trên các phần cứng khác nhau.
- Có thể mở rộng xuyên suốt các Availability Zone.
- Nhược điểm: Chỉ giới hạn tối đa 7 Instances/Group/Availability Zone.
- Use Case:
- Các ứng dụng yêu cầu độ ổn định cực kì cao
- Các ứng dụng yêu cầu khả năng hoạt động tốt ngay cả khi khi một hoặc nhiều Instance gặp vấn đề.
- Các ứng dụng yêu cầu độ ổn định cực kì cao
Partition Placement Groups
- Ưu điểm:
- Có thể mở rộng xuyên qua nhiều AZ trong cùng 1 khu vực (Region).
- Các Instances trong cùng 1 Partitions sẽ không cùng chia sẻ Rack với các Instances của các Partition khác.
- Khi Partition fail sẽ ảnh hưởng đến toàn bộ các Instances trong cùng 1 Partition. Tuy nhiên sẽ không ảnh hưởng đến các Partition khác.
- EC2 instances có thể truy cập vào các thông tin của Partition dưới dạng metadata.
- Có thể mở rộng xuyên qua nhiều AZ trong cùng 1 khu vực (Region).
- Nhược điểm:
- Số lượng Partition/AZ tối đa là 7. Mặc dù là hữu hạn nhưng con số này là tương đối nhiều.
- Số lượng Partition/AZ tối đa là 7. Mặc dù là hữu hạn nhưng con số này là tương đối nhiều.
- Use cases: dùng cho các hệ thống như HDFS, HBase, Cassandra, Kafka.
Elastic Network Interfaces (ENI)
Tương tự như các máy chủ vật lý, các VPC nói chung hay EC2 Instances nói riêng cũng sẽ có các card mạng ảo (virtual network card) của riêng mình. Bên cạnh card mạng mặc định này, đối với các máy chủ vật lý, ta có thể cắm nhiều đầu mạng khác vào cùng 1 thiết bị, từ đó cung cấp khả năng truy cập vào nhiều dải mạng khác nhau. Trên AWS, Elastic Network Interfaces (ENI) sẽ giải quyết vấn đề này.
Trên AWS, Elastic Network Interfaces (ENI) hoạt động theo các nguyên tắc sau:
- Sẽ luôn có 1 Primary private IPv4 được cấp cho mỗi Instance, bên cạnh đó có thể cấp thêm 1 IPv4 khác, gọi là secondary IPv4.
- 1 Elastic IPv4 / private IPv4.
- 1 Public IPv4.
- Một hoặc nhiều Security Groups.
- 1 địa chỉ MAC.
Một ENI có thể được tạo độc lập sau đó được "cắm" vào Instance nào tùy ý và có thể dễ ràng "rút ra - cắm vào" tới cá Instance khác nhau.
Ngoài ra, các ENI cũng sẽ bị ràng buộc với các Availability Zone xác định.