Scalability & High Availability là gì?
High Availability và Scalability là hai khái niệm cơ bản trong lĩnh vực Cloud Computing nói riêng và AWS nói chung. Hai khái niệm này chỉ ra rằng một hệ thống cần đảm bảo được khả năng hoạt động bình thường ngay cả trong các điều kiện tải cao bất thường hay các sự cố không may xảy đến. Hai khái niệm này cũng chính là một trong những ưu điểm nổi bật nhất khi ta so sánh giữa các hệ thống Cloud với các hệ thống On-premise truyền thống.
Một định nghĩa khác theo IBM: "Một sản phẩm thành công yêu cầu các hệ thống cơ sở dữ liệu luôn sẵn sàng, ít xảy ra sự cố ngừng hoạt động nhất, đồng thời có thể thay đổi quy mô nhanh chóng và dễ dàng khi yêu cầu kinh doanh thay đổi."
Một ví dụ điển hình cho việc một hệ thống thiếu đi khả năng Scalability & High Availability đó là hệ thống đăng ký học của các trường đại học. Các hệ thống này thường chịu một lượng tải không đáng kể vào những ngày bình thường, tuy nhiên vào các đợt đăng ký học thì lượng tải đôi khi vượt quá hàng chục, hàng trăm lần ngưỡng bình thường dẫn đến việc đăng ký học của sinh viên giống như một cuộc chiến. Việc xây dựng các chiến lược Scalability & High Availability cũng như phân bổ tài chính một cách hợp lý hoàn toàn có thể giải quyết các vấn đề này.
Scalability
Scalability - Khả năng tự động mở rộng: có nghĩa là một ứng dụng hoặc hệ thống của có thể tự động thích nghi nhằm xử lý được một lượng tải lớn hơn nhiều mức bình thường.
Đối với khả năng mở rộng, ta có thể phân loại thành 2 chiến lược chính là Vertical Scaling - Mở rộng theo chiều dọc và Horizontal Scaling - Mở rộng theo chiều ngang hay còn gọi là elasticity.
Scalability được liên kết chặt chẽ với High Availability, tuy nhiên 2 hệ thống này có nhiều điểm khác biệt.
Vertical Scaling
Vertical Scaling - Khả năng mở rộng theo chiều dọc có nghĩa là chúng ta sẽ tăng kích thước của Insatance hiện hữu (RAM, Disk,...). Một ví dụ đơn giản, giả sử ứng dụng của bạn đang chạy trên phiên bản instance t2.micro, scale theo chiều dọc có nghĩa là bạn sẽ chuyển sang sử dụng phiên bản t2.xlarge
Mặc dù nghe có vẻ không hợp thời lắm, tuy nhiên chiến lược scale theo chiều dọc này vẫn thường xuất hiện tại các hệ thống không phân tán, điển hình là nhiều loại cơ sở dữ liệu.
Ngay trên AWS, các dịch vụ như RDS, ElastiCache cũng được áp dụng chiến lược này.
Mặc dù vẫn được sử dụng tương đối rộng rãi, nhưng nhược điểm chính của chiến lược này đó là nó sẽ luôn bị giới hạn bởi kích thước phần cứng, hay nói cách các khác là nó không thể mở rộng một cách tùy ý.
Horizontal Scaling
Hoziontal Scaling - Khả năng mở rộng theo chiều ngang hay còn gọi là elasticity có nghĩa là chúng ta sẽ mở rộng bằng cách tăng số lượng instance hiện hữu. Một ví dụ đơn giản, giả sử ứng dụng của bạn đang chạy trên 1 instance t2.micro, scale theo chiều ngang có nghĩa là bạn sẽ chuyển sang sử dụng 2 instance t2.micro.
Hoziontal Scaling là một chiến lược mở rộng phổ biến và được sử dụng rộng rãi trên AWS. Nó được thiết kế đặc biệt phù hợp với các hệ thống phân tán nói chung hay các trang web hay các ứng dụng hiện đại nói riêng. Hiện nay, việc triển khai chiến lược scale này là vô cùng dễ dàng, đặc biệt dưới sự hỗ trợ của các hệ thống như AWS.
High Availability
High Availability - Tính sẵn sàng cao: có nghĩa là một ứng dụng hoặc hệ thống có thể tiếp tục hoạt động bình thường ngay cả khi có sự cố xảy ra.
Một cách đơn giản hơn, High Availability sẽ yêu cầu ứng dụng hoặc hệ thống cần phải được triển khai ở ít nhất 02 trung tâm dữ liệu độc lập khác nhau (Đối với AWS ta có thể hiểu là các Availability Zones). Mục đích của việc này nhằm đảm bảo rằng ứng dụng có thể sống sót và hoạt động bình thường ngay cả khi một trong 2 trung tâm dữ liệu gặp phải các vấn đề bất khả kháng như thiên tai, địch họa dẫn tới việc buộc phải ngừng hoạt động. Cũng vì những lý do đó mà High Availability luôn luôn đi kèm với các chiến lược Horizontal Scaling
Các chiến lược High Avaiablity có thể được thực thi ở cả 2 dạng chủ động (ví dụ như horizontal scaling) hoặc bị động (ví dụ như RDS Multi AZ).
High Availability & Scalability đối với các máy chủ EC2
Vertical Scaling: Tăng instance size (= scale up / down)
- Từ: t2.nano - 0.5G of RAM, 1 vCPU
- Lên tới: u-12tb1.metal – 12.3 TB of RAM, 448 vCPUs
High Availability: Khởi chạy nhiều Instance cho cùng 1 ứng dụng trên nhiều AZ khác nhau: - Auto Scaling Group multi AZ
- Load Balancer multi AZ