Đàm đạo về cân bằng tải (Load Balancer)

Đàm đạo về cân bằng tải (Load Balancer)

Tin ngắn hàng ngày dành cho bạn
  • altcha-org/altcha là một dự án mã nguồn mở thay thế giải pháp reCaptcha hay hCaptcha.

    Nghiên cứu mấy dự án này cũng hay ho phết, vì coi như tìm hiểu luôn cách nó hoạt động và ngăn chặn hành vi "spam" ra sao 🤓

    » Xem thêm
  • Manus đã chính thức mở cửa cho tất cả người dùng rồi đấy mọi người. Cho những ai chưa biết thì đây là một công cụ viết báo cáo (làm mưa làm gió) giống như Deep Research của OpenAI á. Mỗi ngày được miễn phí 300 Credits để nghiên cứu. Mỗi lượt nghiên cứu tiêu tốn tuỳ thuộc vào độ phức tạp của yêu cầu. À với cả họ đang có chương trình tặng miễn phí Credits hay sao á. Như mình thì vào thấy được hẳn 2000.

    Mình dùng thử, so sánh với cùng một lệnh giống như đợt trước dùng bên Deep Research thì nội dung khác biệt nhau hoàn toàn. Manus báo cáo như kiểu viết văn hơn so với OpenAI là các gạch đầu dòng và bảng biểu.

    À lúc đăng ký xong có bắt nhập số điện thoại để xác minh, nếu lỗi thì các bạn đợi qua ngày thử lại xem có được không nhé.

    » Xem thêm
  • Mọi người chắc nghe nhiều về xu hướng tìm kiếm thông tin bằng AI chứ không cần công cụ tìm kiếm như Google nữa rồi đúng không? Không đâu xa ánh xạ vào bản thân thì thấy đúng thật, thi thoảng mới tìm kiếm thôi chứ còn đâu toàn hỏi tụi AI.

    Ngay từ đầu viết blog, thứ mà mình hướng đến là chia sẻ kinh nghiệm chứ không phải là những bài mang nặng tính kỹ thuật, máy móc, hướng dẫn từ đầu... Vì thời điểm đó đã có quá nhiều người làm nội dung này rồi và họ làm rất tốt, tại sao mình phải cố phát minh lại bánh xe? Một điều nữa là tin tưởng độc giả của mình có khả năng tìm hiểu vấn đề. Nếu bạn đọc đủ nhiều các bài viết trên blog thì thấy mình luôn cố gắng chèn thêm các liên kết tham khảo ngoài bài viết, nêu ra vấn đề mở và rất ít khi kết luận chắc chắn một điều gì đó.

    Mình đã cố gắng rèn luyện kỹ năng viết, kỹ năng trình bày và cả cách tương tác với độc giả để mang lại giá trị cho họ. Nhiều lúc ngồi lật lại các con số thống kê thấy lượng đọc bài viết tăng lên lại cảm thấy vui. Nhưng khi nguồn truy cập đến từ Google thì lại thấy buồn, vì điều đó chứng tỏ họ biết đến mình chỉ khi đang cố đi tìm giải pháp, có thể họ chỉ đọc chớp nhoáng, may ra tìm được cách giải quyết và thế là đóng cửa sổ trình duyệt rồi đi như một cơn gió.

    Chừng vài tháng đổ lại đây, một điều khiến mình rất vui đó là lượng người truy cập thẳng vào trang chủ mà không thông qua công cụ tìm kiếm đang tăng dần lên, có nhiều hôm lượng truy cập tự nhiên còn cao hơn cả đến từ Google. Điều đó chứng tỏ độc giả đã có thói quen quay lại trang của mình nhiều hơn và họ tìm thấy được giá trị từ blog mang lại. Vui mừng khôn xiết 🤩

    Bên cạnh đó thì lượng truy cập vào chuyên mục Threads - tức là mục mình đang viết bài này đang cao hơn bao giờ hết. Điều đó chứng tỏ xu hướng đi theo tin nhanh là đúng đắn. Mình có thể ngồi cả ngày để viết tin ngắn cho bạn đọc vì nó rất nhanh mà tiện, không tốn công đi tìm tài liệu để viết, không tốn cả thời gian viết nữa, còn mình thì có rất nhiều thứ để chia sẻ 😅. Nhưng không vì thế mà bỏ bê các bài viết dài, vì dài thì có nhiều thông tin để chia sẻ hơn.

    Vài lời tâm sự thế thôi chứ hơn một tháng nay mình chưa viết bài viết mới nào vì công việc bận quá. Xong lâu dần cứ trì hoãn lại thành lười. À với cả tháng 5 này rất thích hợp để đọc các cuốn sách về cách mạng á. Có hôm đọc đến 2 giờ sáng mới đi ngủ 🥱

    » Xem thêm

Vấn đề

Cân bằng tải (Load Balancing) là một kỹ thuật quan trọng trong hệ thống phân tán nhằm đảm bảo hiệu suất, tính sẵn sàng và khả năng mở rộng của ứng dụng. Đây là một khái niệm mà bất kỳ lập trình viên nào cũng nên biết vì nó là phần không thể thiếu khi muốn nâng cao hiệu suất của ứng dụng phần mềm. Đảm bảo hệ thống hoạt động ổn định trước làn sóng truy cập đầy ngẫu hứng của người dùng. Ấy thế mà lúc mới bắt đầu tìm hiểu khái niệm này, nhiều điều cảm thấy thật bối rối.

Ví dụ đơn giản là về Nginx - một web server mà ai cũng biết. Ngoài ra Nginx còn đóng vai trò như một bộ cân bằng tải, tức là cấu hình để nó phân phối các yêu cầu đến các máy chủ hoặc dịch vụ (servies) khác nhau. Rồi bỗng Docker xuất hiện, Docker cũng có khái niệm về bộ cân bằng tải thông qua cơ chế swarm, tức là yêu cầu đến một dịch vụ thì được phân phối đến các container được nhân lên (scale) tương ứng. Chưa dừng lại ở đó, Kubernetes cũng làm được điều tương tự. Ồ tại sao vậy nhỉ? Cân bằng tải xuất hiện ở khắp mọi nơi, thiết lập như thế nào mới đúng, mới tối ưu nhất?

Cách đơn giản nhất để thiết lập chế độ cân bằng tải đó chính là dựng lên một máy chủ chỉ có nhiệm vụ phân phối các yêu cầu của người dùng. Nhưng chuyện gì xảy ra nếu máy chủ đó bị... quá tải hoặc lăn ra chết? Chắc chắn rồi, dịch vụ sẽ bị gián đoạn vì không có gì điều phối được yêu cầu của người dùng nữa. Thế thì thay vì dựng lên 1 thì hãy dựng lên một cụm máy chủ chỉ có nhiệm vụ cân bằng tải, cái này trục trặc thì cái kia thay thế, luân phiên nhau thì sẽ giảm thiểu được rủi ro. Hoàn toàn đồng ý! Nhưng còn cách nào khác nữa không?

Chúng ta đều biết kể cả phần cứng hay phần mềm đều có những giới hạn. Giới hạn của phần mềm thì thường phụ thuộc vào phần cứng. Phần mềm dù có tối ưu đến mấy mà chạy trên một phần cứng hạn hẹp thì cũng coi như bỏ. Ngược lại, nếu chế ra một phần cứng siêu mạnh, kết hợp với một phần mềm siêu tối ưu thì chuyện gì sẽ xảy ra?

Liệu còn điều gì về cân bằng tải mà chúng ta chưa được biết hay không? Chắc chắn là có, vì kiến thức là vô tận mà công nghệ thì thay đổi chóng mặt. Vì thế bài viết ngày hôm nay, tôi sẽ trình bày cách hiểu của mình về cân bằng tải. Đây là một bức tranh ghép lại từ những mảnh ghép thu thập lâu nay. Hy vọng cung cấp được cho mọi người một cái nhìn khách quan nhất. Nếu có thiếu hoặc sai sót chỗ nào, mong bạn đọc giúp tôi nhận ra điều đó.

Phương pháp cân bằng tải

Đầu tiên hãy nói về phương pháp hay cách cân bằng tải. Có 2 cách phổ biến là theo thuật toán và theo lớp mạng.

Phân phối theo thuật toán bao gồm Round Robin, Least Connections, hoặc IP Hash... Trong đó Round Robin là thuật toán kết nối xoay vòng, tức là dàn đều điểm đến theo vòng tròn. Least Connections sẽ lựa chọn ra máy chủ có kết nối ít nhất... Đặc điểm của phương pháp này là viết ra thuật toán để phân phối sao cho máy chủ nào cũng được tham gia xử lý một cách hiệu quả.

Phân phối theo lớp mạng tức là dựa vào Layer 4 và Layer 7 của tầng mạng (network). Chúng ta biết đến mô hình OSI 7 lớp. Để hai máy giao tiếp được với nhau cần lần lượt đi qua 7 lớp. Trong đó Layer 4 là Transport Layer còn Layer 7 là Application Layer. Layer 7 thường được biết đến qua các giao thức HTTP, SMTP, FTP, DNS... Trong khi Layer 4 ở mức sơ khai hơn rất nhiều.

Để cho dễ hình dung, một kết nối đi qua 7 lớp trước khi đến được điểm xử lý, trong đó lớp 4 và 7 đều có khả năng điều hướng yêu cầu sang hướng khác. Thông thường chúng ta hay điều hướng ở lớp 7, tức là nhận được giao thức GET, POST... rồi mới phân loại và chuyển, cách này tiêu tốn một số lượng tài nguyên tính toán nhất định. Bù lại có đầy đủ thông tin của yêu cầu hơn, dễ viết logic chuyển hướng hơn. Trong khi lớp 4 cho hiệu năng tốt hơn nhưng khả năng tiếp cận thông tin bị hạn chế nên chỉ phân loại được ở mức độ nào đó.

Công cụ cân bằng tải

Công cụ là những thứ giúp triển khai phương pháp cân bằng tải. Công cụ được chia thành 2 loại là phần cứng và phần mềm.

Đầu tiên hãy nói về phần mềm. Đây là những phần mềm được tạo ra để phân phối các yêu cầu nhằm đảm bảo quá trình cân bằng tải. Nginx là một ví dụ, không chỉ là một máy chủ web, nginx cung cấp cả tính năng cân bằng tải ở cả lớp 4 và lớp 7. Tiếp theo là HAProxy, một phần mềm hỗ trợ cân bằng tải rất mạnh mẽ. Ngoài ra còn nhiều cái tên khác như là Apache, Traefik, Envoy... Thậm chí người ta còn tạo ra cả hệ điều hành (OS) để phục vụ cân bằng tải. Tại sao lại thế? Chẳng lẽ phần mềm là chưa đủ? Câu trả lời đơn giản thôi, đó là tuỳ nhu cầu sử dụng đơn giản hay phức tạp. Nếu phần mềm đáp ứng đủ, bạn không cần phải dùng đến OS. Ngược lại, OS được tạo ra chỉ tập trung vào chức năng cân bằng tải thì sẽ có hiệu năng lẫn tính năng vượt trội hơn so với phần mềm.

Tiếp theo là phần cứng. Đây là sản phẩm vật lý được tạo ra chỉ để cân bằng tải với hiệu suất tối đa. Mặc dù chưa được tiếp xúc trực tiếp nhưng bạn hoàn toàn có thể tìm thấy thông tin của chúng ở trên mạng Internet. Chúng thường là các cục router chuyên để điều hướng mạng, hay là một máy chủ được tối ưu hoá phần cứng để xử lý được hàng triệu kết nối cùng lúc.

Ngoài phần cứng và phần mềm ra, với sự "ảo hoá" của công nghệ đám mây (cloud) mà ngày nay chúng ta còn được hưởng lợi từ mạng lưới của các ông lớn. Từ đó sinh ra thêm công cụ cân bằng tải mới dựa trên đám mây. Khỏi phải nói chắc mọi người cũng biết AWS và Google Cloud rất mạnh về lĩnh vực này. Họ có hệ thống máy chủ ở nhiều nơi trên thế giới cùng với mạng lưới dày đặc. Lúc này chúng ta không cần quan tâm đến "điểm chịu lỗi duy nhất" nữa mà phải đặt câu hỏi xem có bao nhiêu máy chủ để nhập lên các ông lớn này.

Đặt phương pháp và công cụ lại với nhau

Như vấn đề đã nêu ở đầu bài viết, tại sao đã có Nginx làm cân bằng tải rồi mà các công cụ khác như Docker còn tạo ra cân bằng tải tiếp? Liệu điều đó có là thừa thãi và khó khăn cho người sử dụng? Chắc chắn là không rồi! Điều đó hoàn toàn bình thường vì mục đích của cân bằng tải là nằm nâng cao hiệu suất của ứng dụng. Nginx và Docker là những ứng dụng độc lập, không nhất thiết phải hoạt động cùng với nhau. Hãy thử nghĩ xem nếu bạn không dùng Nginx thì sao? Docker vẫn có thể cân bằng tải.

Trong phần này tôi sẽ trình bày cách kết hợp phần cứng và phần mềm lại với nhau để tạo thành một hệ thống cân bằng tải. Dĩ nhiên là còn rất nhiều cách kết hợp nữa nhưng hy vọng bạn đọc hình dung ra được điều tôi muốn truyền tải.

Trước tiên, hãy xem sơ đồ của một máy chủ đơn giản sử dụng Nginx để phân phối yêu cầu đến 3 dịch vụ đang chạy trong máy.

Ví dụ 1

Request là yêu cầu của máy khách (client), khi đến máy chủ (server), Nginx đón nhận và phân phối đều cho cả 3 theo thuật toán nào đó như Round Robin.

Tiếp theo là sự có mặt của Docker hay các công cụ tương tự khác. Lúc này xuất hiện thêm cả cân bằng tải ở Nginx và Docker.

Ví dụ 2

Chà, hệ thống khoẻ hơn rồi đấy! Nhưng mà tất cả đang nằm trên một máy chủ nên khả năng sử dụng tài nguyên chưa được tốt lắm. Hãy tách chúng ra.

Ví dụ 3

Vậy là chúng ta đã dựng lên một máy chủ Nginx chuyên xử lý cân bằng tải, trong đó 2 máy chủ còn lại tiếp tục tiếp tục sử dụng Nginx và Docker để xử lý. Quá mạnh rồi đây! Nhưng lỡ máy chủ cân bằng tải lỗi thì sao? Hãy đến với một sơ đồ mới.

Ví dụ 4

Lúc này có thêm sự xuất hiện của cả phần cứng và phần mềm. Router là rất mạnh, đứng ra phân chia yêu cầu đến các hệ điều hành mạng tương ứng, hệ điều hành lúc này mới phân phối đến các máy chủ nhỏ hơn. Chà điều gì xảy ra nếu router bị lỗi? Kết hợp nhiều router lại với nhau hoặc:

Ví dụ 5

Tất cả những thành phần phức tạp đã biến mất và thay bằng Cloud. Công cụ cân bằng tải đám mây này sẽ thay thế hết phần cứng và phần mềm mạng phức tạp vì nó đã ảo hoá lớp này.

Tổng kết

Như vậy có thể thấy cân bằng tải xuất hiện ở khắp mọi nơi. Từ phần cứng cho đến phần mềm, có cả thêm sự góp sức của dịch vụ đám mây. Trong đó phần cứng thường phức tạp, yêu cầu trình độ kỹ thuật cao hoặc phù hợp cho doanh nghiệp cần hiệu suất lớn. Trong khi phần mềm thì đa dạng hơn, từ hệ điều hành cho đến phần mềm cài vào máy tính đều có thể làm được.

Tham khảo:

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...