Tìm hiểu về việc thiết kế một hệ thống web
Bài đăng này đã không được cập nhật trong 2 năm
Giới thiệu
Các công ty vận hành các dịch vụ web có nhiều người dùng tổ chức máy chủ như thế nào để đáp ứng được yêu cầu của dịch vụ. Bài viết tóm tắt ở mức khái quát kiến trúc phổ biến của dịch vụ web, qua đó trả lời cho câu hỏi trên.
Kiến trúc phổ biến của một dịch vụ web
Có vài chú ý trong bài viết này.
- Bài viết mô tả kiến trúc dịch vụ web gồm nhiều máy chủ (quy mô khoảng vài chục, vài trăm máy chủ)
- Có thể có cách tổ chức khác. Bài viết chỉ trình bày một cách tổ chức.
- Bài viết chỉ viết ở mức khái quát. Chi tiết sẽ dành cho các bài viết trong tương lai.
Trong một Datacenter
Các công ty vận hành dịch vụ web có nhiều người dùng thường thuê riêng một góc của datacenter và đặt máy chủ của riêng họ. Về mặt vật lý, máy chủ sẽ được đặt vào các rack và liên lạc với nhau và với internet qua các switch. Về mặt logic, kiến trúc dịch vụ web trong một datacenter có thể có tổ chức như hình vẽ sau.
Load Balancer
User thông qua internet để truy cập một dịch vụ web. Request sẽ thông qua internet để đến các máy chủ của dịch vụ. Layer đầu tiên nhận dữ liệu là Load Balancer. Với các dịch vụ "bận rộn", một máy chủ không thể phục vụ được hết các yêu cầu từ người dùng. Vì vậy, load balancer có nhiệm vụ chia tả cho các máy chủ front app server đứng ở dưới nó. Mỗi máy app server ở dưới sẽ nhận được một đơn vị yêu cầu trong khả năng xử lý của mình.
Có nhiều cách load balancer từ L2 tới L7. Với dịch vụ web chạy HTTP, Load Balancer (LB) có thể sử dụng phương pháp chia tải ở tầng 7, soi HostHeader của Http Request và chia đến máy chủ dịch vụ tương ứng. Ngoài ra có nhiều cách mà Load Balancer chia tải. Chi tiết về từng cách chia tả có thể tham khảo bài viết về Load Balancing tại wikipedia.
Load Balancer có thể là sản phẩm phần cứng hoặc là sản phầm phần mềm. LB cứng có thể kể đến các chủng loại sau:
- BigIP
- A10
- Citrix NetScaler
LB mềm là phần mềm có chức năng lọc packet và chia packet theo nội dung lọc được, chạy trên Linux. Có thể kể đến các loại phổ biến sau:
- HAProxy
- LVS
- nginx: thỉnh thoảng cũng được dùng làm load balancer.
(Load balancer cũng có thể xuất hiện giữa tầng app servers và db servers)
App Servers
App servers là máy chủ web chạy dịch vụ như Apache hoặc nginx và chạy các ứng dụng web. Ứng dụng web sẽ được viết tuỳ vào business logic của dịch vụ và thường được viết bằng các web frameworks. Các máy chủ này có thể gọi là các máy chủ "dàn hàng đầu", nhận request, hỏi các máy chủ dữ liệu đứng ở hàng sau, tính toán và trả về kết quả cho người dùng.
Có một chú ý trong hình là private segment của front và back. GlobalIP thường sẽ được gắn ở LB, còn LB liên lạc với appserver thông qua private segment. Các máy chủ web liên lạc với các DB server và redis server thông qua một private segment thứ 2. Như vậy mỗi máy chủ web phải có ít nhất 2 card mạng để có thể nói chuyện được với 2 đầu (LB và DB)
DB Servers
DB / cache ở hàng sau chịu trách nhiệm lưu trữ dữ liệu. Do là các máy chủ dữ liệu, các máy chủ này không cần kết nối internet do vậy không cần kết nói với LB mà chỉ cần nói chuyện được với front. Hầu hết các cache/db server đều nằm ở tầng này. Do nằm ở hàng sau và không có kết nối internet nên thông thường chính sách mạng (network policy) của các máy chủ ở tầng này khá thoáng. Liên lạc giữa các Datacenter
Trong trường hợp các máy chủ trong 1 datacenter không phục vụ nổi yêu cầu, các máy chủ sẽ được dàn sang các datacenter khác. Từ đây sinh ra vấn đề làm sao để đồng bộ dữ liệu giữa các datacenter.
Giữa các datacenter sẽ có cable nối trực tiếp với nhâu ở front segment và back segment (dark fiber). Do vậy các máy chủ giữa các datacenter có thể trao đổi dữ liệu với nhau được như trong cùng 1 datacenter.
Ở layer LB tới router ở trên, ta để ý thấy là 2 datacenter ở đằng sau được nối với nhau bằng cable vì vậy request đến router của datacenter 2 có thể được route qua máy chủ front của datacenter thứ 3. Ngoài ra datacenter thứ 3 không có đường ra internet vì vậy phải qua router của datacenter thứ 2 để ra internet.
Datacenter 1, 2 không có đường dây nối với nhau nên về lý thuyết 2 datacenter này hoạt động độc lập nhau với 2 AS Number khác nhau và 2 giải IP global khác nhau. Tuy vậy để traffic đến router của center thứ nhất cũng có thể được route đến center thứ 2, 2 router đầu nguồn có thể được BGP peering với nhau.
Kết luận
Bài viết trình "khái quát" kiến trúc phổ biến của dịch vụ web nhiều người dùng trong một datacenter và cách tổ chức máy chủ trải trên nhiều datacenter. Qua bài viết nhỏ và khá "không chi tiết này", hy vọng người đọc hình dung được phần nào cách các công ty internet lớn như google hay facebook trải dịch vụ trên nhiều datacenter.
All rights reserved