Chào các bạn!
Autoscaling là một tính năng vô cùng linh hoạt trên public cloud, không những giúp tăng hiệu quả xử lý của hệ thống mà còn giúp tiết kiệm chi phí vận hành hệ thống. Ví dụ, bạn có một website bán hàng với lượt truy cập trung bình hàng ngày khoảng 2000 lượt. Website của bạn hàng tháng chạy một chiến dịch khuyến mãi 90% sale off vào một giờ cố định. Lượt truy cập vào website của bạn lúc này tăng gấp 20 lần bình thường. Với hệ thống trên on-premise, nếu bạn xây dựng hệ thống vừa đủ đáp ứng 2000 lượt truy cập hàng ngày, thì lúc sale off website của bạn sẽ khó đáp ứng được, ảnh hưởng đến hiệu quả chiến dịch. Nếu bạn xây dựng hệ thống đáp ứng cho chiến dịch khuyến mãi hàng tháng, thì bạn sẽ lãng phí tài nguyên cho các ngày còn lại. Autoscaling trên public cloud sẽ giúp bạn giải quyết được vấn đề truy cập tăng đột biến và tiết kiệm chi phí cho hạ tầng.
Bài viết này mình sẽ giới thiệu cơ bản cách xây dựng hệ thống Autoscaling vơi Managed Instance Group trên Google Cloud Platform.
1.Managed Instance Group là gì?
Đây là một nhóm các máy chủ ảo (VM) trên Google Cloud, được tạo thành từ 1 VM template cố định. Các VM được tạo thành từ template này đều hoàn toàn giống nhau. Nếu muốn thay đổi cấu hình hay các dịch vụ đang chạy trêm VM, bạn phải thay đổi trên template, và tất cả các VM trong group sẽ được apply thay đổi đó một cách đồng bộ.
2. Hoạt động như thế nào?
Các bạn xem mô hình bên dưới:
- Autoscaler : control managed instance group
- Các VM được tự động add và remove dựa trên các policy
- Policy bao gồm số lượng VM sử dụng tối thiểu và số lượng VM tối đa có thể thêm vào
3. Các option cho policy
- Average CPU utilization :
Theo mô hình ví dụ trên, ta có thể hiểu được cách thức add và remove VM dựa trên hiệu suất CPU như thế nào. Cụ thể, target CPU Utilization ở đây là chỉ số trung bình tính cho toàn group, chứ không phải tính cho từng VM.
- Stackdriver Standard & Custom Metric
Bạn có thể sử dụng những metric default trên Stackdriver, hoặc có thể sử dụng Custom Metric để chạy Autoscaling.
Với Custom Metric, bạn tham khảo hình dưới:
Với nhiều trường hợp, thì autoscale với hiệu suất sử dụng CPU không được hiệu quả, bạn phải sử dụng các custom metric khác phù hợp hơn. Hình ví dụ trên với custom metric là game users / 1 VM . Ví dụ, khi 1 VM chịu tải lên đến 500 users, thì autoscaler sẽ tự động add thêm VM và điều hướng user mới vào VM đó.
4. Các bước cấu hình
- Tạo Instance Template
Trường hợp VM có cài các gói dịch vụ như apache hay các ứng dụng khác, thì các bước tạo instance template như sau:
a. Tạo 1 VM ban đầu
b. Cài đặt các gói dịch vụ, ứng dụng liên quan lên VM đó
c. Lấy Snapshop của VM đó
d. Từ Snapshop trên tạo 1 custom image
e. Tạo Instance Template từ custom image trên
Lưu ý: Trường hợp bạn cần tự động install hoặc shutdown dịch vụ khi VM khởi tạo hoặc remove, bạn phải viết các start up & shutdown script trên template này.
- Tạo Managed Instance Group
Tạo Instance group theo các bước như hình trên. Lưu ý, các bạn nhớ enable Autoscaling on HTTP Load Balacing. (Ở đây mình hướng dẫn setup autoscaling với HTTP Load Balacing)
- Cấu hình Health Check cho instance group
Hình trên là cơ chế hoạt động của healthcheck. Các bạn có thể thay đổi thông số healthcheck cho phù hợp với hệ thống của mình.
- Cấu hình HTTP(s) Load Balancer
Bạn chọn start configuration, rồi tiến hành cấu hình các thông số cho backend, front end & rules
Bạn có thể tham khảo thêm cách cấu hình HTTP(s) Load Balacing tại đây.
5. Kiểm tra kết quả
Dưới đây là hình ảnh hệ thống của mình trong trạng thái bình thường, chưa scale, mặc định hệ thống chạy với duy nhất 1 VM:
Sau đây là hệ thống đã được autoscale sau khi mình thực hiện stress test, tương tụ trường hợp có truy cập tăng nhanh đột biến, vượt quá sức chịu tải của 1 VM :
Ở đây, autoscaler sẽ tự động add thêm nhiều VM để đáp ứng lại lượng truy cập. Khi hệ thống ổn định trở lại, autoscaler sẽ tự động remove các VM này ra để tiết kiệm chi phí hạ tầng.
6. Lưu ý
Một số điểm cần lưu ý khi thực hiện autoscaling với managed instance group
- Phải đảm bảo các gói phần mềm, dịch vụ trên VM phải tự động install, start, hoặc shutdown khi VM khởi tạo từ instance tempalte
- Do VM sẽ tự động add & remove, nên bạn phải thiết kế hệ thống sao cho dữ liệu hoặc trạng thái của ứng dụng không lưu trên VM.
Hy vọng bài viết này sẽ giúp các bạn tối ưu và tiết kiệm được chi phí cho hạ tầng hệ thống của mình trên Google Cloud!