Trang chủ Blog Phát triển offshore

Tăng hiệu suất cho server bằng...

Tăng hiệu suất cho server bằng hệ thống load balancing với Nginx

Rabiloo

Load balancing (cân bằng tải) server là một kỹ thuật cực kỳ quan trọng và không thể thiếu đối với hệ thống server lớn, phục vụ nhiều khách hàng có lượng request lớn. Nó có vai trò quyết định đến hiệu năng, chất lượng website của doanh nghiệp và ảnh hưởng đến trải nghiệm người dùng. Vậy Load balancing server giúp hệ thống hoạt động ổn định và chịu tải ra sao, hãy cùng chúng tôi tìm hiểu qua bài viết sau.

1. Đặt vấn đề

Với các hệ thống thông thường không có cân bằng tải, một server duy nhất sẽ phải chịu tải tất cả yêu cầu từ người dùng. Điều đó làm quá tải cho server khi phải chịu nhiều request cùng 1 lúc và trong thời gian dài. 

Những vấn đề nói trên sẽ ảnh hưởng tới hiệu năng của website, gây ra phản hồi chậm trễ, ảnh hưởng tới trải nghiệm người dùng. Hơn thế nữa việc quá tải còn có thể dẫn đến việc server ngừng hoạt động khi không có khả năng chịu tải và xử lý được hết tất cả yêu cầu của người dùng. 

Có hai phương pháp thông dụng để tăng khả năng chịu tải cho server là cải thiện, nâng cấp cấu hình phần cứng (scale vertically) như RAM, CPU,… hoặc tăng nhiều server chịu tải (scale horizontally). 

Mỗi cách đều có hiệu quả và mục đích riêng, có thể kết hợp cả 2 cách để đạt hiệu quả cao nhất. Tuy nhiên, việc tăng nhiều server là điều cần thiết và quan trọng. Ngoài việc đáp ứng khả năng chịu tải, nó còn đảm bảo hệ thống hoạt động liên tục. Nếu có một server bị ngừng hoạt động, các server khác vẫn có thể hoạt động và đảm nhiệm thay. 

Tăng nhiều server sẽ phát sinh ra vấn đề điều phối và quản lý hiệu quả tài nguyên server. Giải quyết vấn đề này cũng là mục đích chính của giải pháp cân bằng tải cho server.

2. Cân bằng tải cho server là gì - Load balancing

Giải pháp cân bằng tải (Load balancing) là việc điều phối hiệu quả và hợp lý lưu lượng truy cập (request) đến một nhóm server, hay còn gọi là server pool hoặc server farm. Mục đích của load balancing là làm giảm áp lực cho server đang chịu tải lượt request lớn, điều phối request cho server đang nhàn rỗi, đảm bảo sử dụng tài nguyên server hiệu quả.

 

Hệ thống Load balancing

Hệ thống Load balancing

Một load balancer hoạt động như “Traffic cop” ở phía trước server và routing của client. Vị “Cảnh sát giao thông” này có nhiệm vụ:

  • Đảm nhiệm các request gửi tới server và phân luồng tới các server tương ứng sao cho tối ưu về tốc độ và hiệu suất, không gây ra tình trạng “tắc nghẽn giao thông”;

  • Đảm bảo không có server nào hoạt động quá mức cũng như không có server nào nhàn rỗi khi có lượng request lớn. Nếu một server đơn lẻ bị hỏng, cân bằng tải sẽ chuyển hướng đến server còn lại.

Tóm lại một load balancer sẽ thực hiện các chức năng chính sau đây:

  • Đảm bảo tính khả dụng và độ tin cậy bằng cách chỉ gửi yêu cầu đến máy chủ trực tuyến;

  • Phân phối client request một cách hiệu quả trên nhiều server;

  • Bớt hoặc mở rộng nhiều server một cách dễ dàng và linh hoạt.

3. Vai trò của cân bằng tải với doanh nghiệp

Không chỉ với doanh nghiệp, giải pháp cân bằng tải với nhiều server còn đáp ứng cho bất kỳ hệ thống hoặc website nào muốn đạt hiệu năng cao và vận hành an toàn. 

Đầu tiên, Load Balancing giúp đảm bảo xử lý được việc truy cập cùng lúc từ hàng triệu người dùng tới website của bạn. 

Ví dụ, bạn có 1 server duy nhất để quản lý web, khi có quá nhiều khách hàng cùng lúc truy cập, hệ thống server của bạn sẽ phải đáp ứng lượng yêu cầu rất lớn. Điều đó gây quá tải server, khó khăn trong việc xử lý, giảm hiệu năng của website, phản hồi chậm trễ, thậm chí server bị ngưng hoạt động.

Để khắc phục vấn đề trên, bạn cần trang bị thêm server. Khi website của bạn có nhiều server cùng quản lý, bạn sẽ cần kiểm soát chúng hiệu quả hay còn gọi là hệ thống cân bằng tải cho server. Vì sao vậy? 

Khi có quá nhiều server sẽ gây khó khăn cho chúng ta về việc quản lý tài nguyên các server sao cho hiệu quả và các vấn đề liên quan đến vận hành từng server. Việc này đòi hỏi thời gian và chuyên môn kỹ thuật cao kèm theo các chi phí phát sinh. Chính vì thế cân bằng tải tối ưu hiệu năng server ra đời giúp bạn giải quyết các vấn đề quản lý server nêu trên.

Lý do thứ hai mà Load Balancing không thể thiếu trong hệ thống mạng là khả năng vận hành ổn định, liên tục, đáp ứng độ tin cậy, cũng như thể hiện năng lực của doanh nghiệp. 

Nếu như trước kia hệ thống của bạn chỉ dùng một server duy nhất, khi server này gặp trục trặc và ngưng hoạt động thì sẽ kéo theo hệ thống của bạn không thể đáp ứng được nhu cầu của khách hàng cuối (end user). Điều này gây ra tình trạng ngắt quãng và trải nghiệm cũng như đánh giá không tốt từ khách hàng cuối cùng. Đồng thời gây ra thiệt hại rất lớn về lòng tin từ người dùng và có thể tạo ra hậu quả rất lớn đối với website thương mại điện tử, hệ thống ngân hàng, hệ thống thanh toán điện tử.

Do vậy, doanh nghiệp phải sử dụng nhiều server cùng lúc, theo đó là giải pháp cân bằng tải hỗ trợ để đạt được hiệu năng server tốt nhất, hoạt động trơn tru nhất. Không có gì đảm bảo 100% là một server sẽ hoạt động mà không bị ngừng. Do đó, ta phải tính đến sử dụng các server khác thay thế đảm nhiệm và giảm tải áp lực ngay tức thì trên nhiều server. 

Nhiều server với hệ thống cân bằng tải sẽ giúp hoạt động kinh doanh của doanh nghiệp không bị gián đoạn. Hạn chế thấp nhất những tình huống quá tải của server, nâng cao trải nghiệm khách hàng cuối.

4. Nginx load balancer là gì

Như vấn đề đã được nêu trên, với một hệ thống có lượt truy cập lớn, chúng ta cần tới một hệ thống có khả năng chịu tải tốt bằng nhiều server. Áp dụng hình thức cân bằng tải - Nginx là một trong những  giải pháp phổ biến, hữu hiệu, giúp ta giải quyết bài toán này.

Nginx là phần mềm mã nguồn mở đảm nhiệm nhiều vai trò trong hệ thống được ra mắt vào năm 2004 bởi lập trình viên kỳ cựu Igor Sysoev. Nhưng những năm 2002 nó đã được nghiên cứu để giải quyết các vấn đề C10k. C10k là giới hạn xử lý 10 ngàn kết nối cùng một lúc vấn đang gặp phải thời đó của hệ thống website cũ. 

Một số ứng dụng phổ biến của nginx:

  • Webserver cho các ứng dụng website (ví dụ như Wordpress);

  • Load balancing cho HTTP,  UDP và TCP;

  • Quản lý tài nguyên Content Cache tăng hiệu quả server;

  • Hỗ trợ Websockets;

  • Hỗ trợ bảo mật security controls (ví dụ: thiết lập giới hạn kết nối từ một địa chỉ IP, ngăn ngừa tấn công bằng việc chủ động gọi request quá nhiều lần).

Mô hình kiến trúc Nginx

Mô hình kiến trúc Nginx

NGINX sử dụng mô hình kiến trúc bất đồng bộ (Asynchronous) và kiến trúc hướng sự kiện (Event-Driven) kèm theo có khả năng mở rộng. Với ưu điểm về tốc độ nên Nginx được sử dụng để xử lý điều hướng các truy vấn đồng thời số lượng lớn cũng như sử dụng với các nội dung tĩnh (hình ảnh, css, js…).

5.Các thuật toán cân bằng tải trong Nginx 

Có 4 thuật toán cân bằng tải cơ bản dùng để load balancer quyết định điều hướng request tới máy chủ ứng dụng:

  • Round-robin (mặc định).

  • Least connections.

  • Least time.

  • IP-hash (chỉ dùng cho HTTP).

Sau đây là phần mô tả cơ bản của các thuật toán trên 

5.1 Round-robin

Đây là thuật toán mặc định, cũng là đơn giản nhất. Trong đó, Nginx sẽ điều hướng các request tới các máy chỉ theo vòng tròn lần lượt từng server. 

Với thuật toán này, không cần quan tâm tới tình trạng máy chủ có quá tải hay không, có nhận nhiều request hay không? Cứ đến lượt là server đều phải xử lý request từ client.

5.2 Least connections.

Với thuật toán này, Nginx sẽ điều hướng các request tới server đang xử lý ít request nhất. Nhờ điều này mà đảm bảo các máy chủ trong hệ thống không bị mất cân bằng, máy chủ nào cũng cũng phục vụ số request như nhau.

5.3 Least time.

Thuật toán này cao cấp hơn so với 2 thuật toán nêu trên. Tức là ngoài việc tính đến số lượng request mà máy chủ đó đang phục vụ, còn tính tới thời gian tốc độ xử lý trung bình của các request trong quá khứ, nhằm điều phối hiệu quả server nào sẽ tiếp nhận xử lý các request trong tương lai. Lý do là trong hệ thống có nhiều máy chủ, không phải máy chủ nào cũng có cấu hình tương đương hoặc tốc độ xử lý như nhau. 

5.4 IP-hash

Thuật toán hash này sẽ dựa trên 3 octet đầu tiên trên IP của client để quyết định xem client nào sẽ được gắn (map) cố định với server nào. Thích hợp với những ứng dụng cần giữ lại session của người dùng. Khi ta thêm hoặc bớt 1 server trong pool thì các giá trị hash sẽ phân bố lại. Ta có thể dùng thêm một tham số bổ trợ là consistent để giảm thiểu ảnh hưởng khi phân phối lại các giá trị hash.

6. Lời kết

Trong thực tế việc mở rộng nhiều server xuất hiện hầu hết các dự án lớn công ty lớn và kèm theo đó là cách vận hành và điều phối các server sao cho hiệu quả bằng thuật toán cân bằng tải. Nếu hệ thống của bạn đang mở rộng hoặc gặp vấn đề hiệu năng cũng như tình trạng downtime, hãy suy nghĩ về việc sử dụng nó. 

Như vậy, qua bài biết này chúng ta đã có cái nhìn cơ bản về cơ chế cũng như cách hoạt động của một hệ thống cân bằng tải. Từ đó cũng thấy được tầm quan trọng và những lợi ích không thể thiếu được khi xây dựng một hệ thống server lớn đáp ứng hàng triệu request từ người dùng. 

Cảm ơn bạn đã đọc bài viết. Chúng tôi hy vọng nó mang đến thêm kiến thức công nghệ và giải pháp giúp bạn khắc phục vấn đề trong hiện tại hoặc tương lai. Để đọc thêm về các bài viết công nghệ liên quan, hãy truy cập vào kênh tri thức của Rabiloo.

 


Bài viết liên quan

blog
HTTPS with SpringBoot