Scalability for Dummies

Gần đây tôi được hỏi cần những gì để một dịch vụ web có thể mở rộng ở quy mô lớn. Câu trả lời của tôi khá dài, và có thể cũng sẽ thú vị với những người khác. Vì vậy tôi chia sẻ nó ở đây trên blog của mình và chia thành nhiều phần để dễ đọc hơn.

Phần 1 – Nhân bản(Clone)

Các máy chủ công khai của một dịch vụ web có khả năng mở rộng được ẩn sau một bộ cân bằng tải. Bộ cân bằng tải này sẽ phân phối đều tải (các yêu cầu từ người dùng) lên nhóm/cụm các máy chủ ứng dụng của bạn. Điều đó có nghĩa là, ví dụ, người dùng tên Steve tương tác với dịch vụ của bạn, thì yêu cầu đầu tiên có thể được phục vụ bởi máy chủ số 2, yêu cầu thứ hai bởi máy chủ số 9, và sau đó có thể lại quay về máy chủ số 2 ở yêu cầu thứ ba.

Steve nên luôn nhận được cùng một kết quả từ các yêu cầu của mình, bất kể anh ấy “rơi” vào máy chủ nào. Điều này dẫn đến quy tắc vàng đầu tiên trong việc mở rộng: mỗi máy chủ phải chứa chính xác cùng một mã nguồn và không lưu trữ bất kỳ dữ liệu nào liên quan đến người dùng (như phiên làm việc hoặc ảnh hồ sơ) trên ổ đĩa cục bộ hay bộ nhớ tạm.

Các phiên làm việc (session) cần được lưu trữ trong một kho dữ liệu tập trung mà tất cả các máy chủ ứng dụng đều có thể truy cập. Nó có thể là một cơ sở dữ liệu bên ngoài hoặc một bộ nhớ đệm ổn định bên ngoài như Redis. Một bộ nhớ đệm ổn định sẽ có hiệu suất tốt hơn so với cơ sở dữ liệu bên ngoài. “Bên ngoài” ở đây nghĩa là kho dữ liệu không nằm trong các máy chủ ứng dụng, mà nằm ở đâu đó trong hoặc gần trung tâm dữ liệu của bạn.

Vậy còn việc triển khai thì sao? Làm sao để bạn đảm bảo rằng khi có thay đổi mã nguồn, tất cả các máy chủ đều nhận được bản cập nhật mà không có máy nào vẫn đang phục vụ mã cũ? Vấn đề khó nhằn này may mắn đã được giải quyết bởi công cụ tuyệt vời Capistrano. Dù cần học một chút, nhất là nếu bạn không quen với Ruby on Rails, nhưng chắc chắn nó rất đáng công sức.

Sau khi “tách riêng” các phiên làm việc và đảm bảo tất cả các máy chủ phục vụ cùng một mã nguồn, bạn có thể tạo một file ảnh (image) từ một trong các máy chủ này (trong AWS gọi là AMI – Amazon Machine Image). Hãy dùng AMI này như một “siêu bản sao” mà tất cả các phiên bản mới được tạo ra từ đó. Mỗi khi bạn khởi tạo một phiên bản hoặc bản sao mới, chỉ cần triển khai mã mới nhất của bạn và mọi thứ đã sẵn sàng!

Dẫn nguồn: Scalability for Dummies – Part 1: Clones.

Code Toàn Bug

Code nhiều bug nhưng biết cách giấu!

Leave a Reply

Your email address will not be published. Required fields are marked *