5 kiến trúc server phổ biến áp dụng cho ứng dụng Web

5 kiến trúc server phổ biến áp dụng cho ứng dụng Web

Cài đặt Railgun – Phần 1: Thiết lập CloudFlare
Docker cho người mới bắt đầu
Thử dùng Envoy của Laravel để viết script deploy cho ứng dụng web

Giới thiệu

Khi quyết định xêm nên sử dụng kiến trúc server nào cho Web Application của bạn, có rất nhiều yếu tố có thể cân nhắc tới như là: performance, khả năng mở rộng, khả năng chịu tải, chi phí, dễ quản lý, …

Dưới đây là 5 kiến trúc phổ biến mà bạn có thể sử dụng:

1. Tất cả trong một

Nginx, Apache, PHP, MySQL, Memcache, … tất cả đều nằm trong 1 server. Server chịu trách nhiệm làm Application server và Database server.

Ưu điểm:

  • Đơn giản

Nhược điểm:

  • Tất cả đều nằm trên 1 server, khi hệ thống chạy chậm đi thì khó xác định được thành phần gây ra điều đó.
  • Không dễ dàng mở rộng theo chiều ngang.

2. Tách riêng Database server

Như tiêu đề, ta tách riêng tầng Database ra 1 server riêng biệt với Application server.

Ưu điểm:

  • Application và Database không sử dụng chung tài nguyên giúp cho việc dễ xác định nguyên nhân gây chậm của hệ thống.
  • Có thể mở rộng theo chiều sâu cho từng tầng riêng biệt bằng cách thêm tài nguyên cho tầng nào cần (RAM, CPU, Storage, … ).
  • Có thể tăng độ bảo mật bằng cách giấu Database server khỏi DMZ.

Nhược điểm:

  • Phức tạp hơn 1 chút so với kiến trúc thứ nhất
  • Sẽ gây ra performance issue nếu kết nối giữa Application server và Database server bị chậm (có thể do khoảng cách địa lí, băng thông hẹp, …)

3. Load balancer (Reverse Proxy)

Load balancer (LB) được thêm vào kiến trúc để tăng performance và uptime của hệ thống bằng cách phân tải ra nhiều server. Nếu 1 server bị chết, các server khác sẽ chịu tải cho đến khi server đó hoạt động trở lại.

Một số software có chức năng phân tải như: HAProxy, Nginx, Piranha, Varnish, …

Ưu điểm:

  • Cho phép mở rộng theo chiều ngang.
  • Có thể chống lại tấn công DDoS.

Nhược điểm:

  • Thành phần LB có thể gây ra nghẽn cổ chai nếu server chạy LB không đủ tài nguyên hoặc LB được cấu hình không tốt.
  • Gây phức tạp hoá trong 1 số việc ( đồng bộ session giữa 2 server, … )
  • LB là single-point-of-failure. Nếu LB fail, cả hệ thống fail.

4. HTTP Accelerator (Caching Reverse Proxy)

HTTP accelerator, hoặc caching HTTP reverse proxy, có thể sử dụng để giảm thời gian phục vụ của hệ thống với client. Kĩ thuật phổ biến nhất là cache lại nội dung trả về cho client vào bộ nhớ để phục vụ các request trong tương lai, làm giảm workloads cho Application server và Database server.

Một số các software HTTP Accelerator: Varnish, Squid, Nginx.

Ưu điểm:

  • Tăng performance bằng cách giảm CPU load.
  • Có thể đóng vai trò làm Load Balancer.
  • Một số caching software có khả năng chống lại tấn công DDoS.

Nhược điểm:

  • Cần phải tinh chỉnh để có performance tốt nhất.
  • Nếu tỉ lệ cache-hit thấp thì có thể làm chậm hệ thống.

5. Master-Slave Database Replication

1 cách để tăng performance của hệ thống Database cần thực hiện nhiều thao tác đọc hơn ghi như các hệ thống CMS,  là sử dụng kiến trúc Master-Slave replication. Kiến trúc này bao gồm 1 master và nhiều slave. Master đóng vai trò ghi dữ liệu vào và các slave đóng vai trò đọc dữ liệu ra. Kiến trúc này giúp chia tải (các thao tác đọc dữ liệu) ra nhiều server.

Ưu điểm:

  • Tăng read performance.
  • Tăng write performance bằng cách chỉ sử dụng master để ghi (master không cần phải thực hiện thao tác đọc, không gây ra trễ).

Nhược điểm:

  • Cài đặt phức tạp
  • Dữ liệu ở các slave có thể bị out-of-date do chưa kịp cập nhật.
  • Nếu master chết thì không thể update dữ liệu.
  • Chưa có giải pháp có sẵn cho trường hợp master chết.

Bonus: Kết hợp tất cả kiến trúc trên.

 

Lời kết

Trên đây là 5 kiến trúc phổ biến dành cho Web App. Tuỳ vào từng app mà bạn có thể chọn sử dụng 1 trong các kiến trúc trên hoặc kết hợp 1 số kiến trúc với nhau. Còn nhiều kiến trúc phức tạp khác nhưng tôi xin đề cập các kiến trúc này ở các bài viết sau.

Nguồn: https://www.digitalocean.com/community/tutorials/5-common-server-setups-for-your-web-application

COMMENTS