Nội dung bài viết
Video học lập trình mỗi ngày
Load balancer là gì? Load balancer mang đến lợi ích gì? Cụm từ này quá nổi tiếng đến mức những bạn năm nhất cũng đã từng nghe tới chứ đừng nói những lập trình viện như bạn. Tôi biết không ít những bạn trong công ty tôi vẫn không biết chút gì về Load balancer (LB) cho nên hy vọng rằng qua bài viết này những bạn chưa hề biết thì bây giờ mạnh dạn tự tin trả lời là biết, sau khi đọc bài viết này.
Load balancer là gì?
Tôi nhớ không nhầm thì trong bài viết "10 cách nâng cao hiệu suất cho máy chủ và người dùng" có nhắc đến cụm từ này. Đúng như vậy, đây là một kỹ thuật hay còn gọi là một thiết kế giải pháp không thể thiếu trong việc tối ưu hóa những hệ thống lớn có nhiều người sử dụng từ đó mang đến hiệu suất cao cho người dùng trải nghiệm.
Trong các ứng dụng Internet đầu tiên và chắc cũng đây mấy chục năm rồi, vì lưu lượng người dùng tương đối nhỏ và logic nghiệp vụ tương đối đơn giản, thường thì một máy chủ có thể đáp ứng các yêu cầu tải. Khi lưu lượng truy cập Internet ngày càng lớn hơn như các hệ thống lớn tại công ty bạn làm, hệ thống tốt hơn một chút có số lượt truy cập rất lớn và các chức năng hệ thống ngày càng phức tạp hơn, vì vậy ngay cả khi hiệu suất của một máy chủ được tối ưu hóa (về phần cứng), nó không thể hỗ trợ số lượng lớn như vậy. Ngày nay lượng truy cập của người dùng rất cao. Chính vì vậy tại thời điểm này bạn cần sử dụng nhiều máy và thiết kế một cluster hiệu suất cao để đối phó với nó.
Tóm lại đơn giản là Bạn là một chủ DN vẩn chuyển hàng hoá Bắc Nam bằng xe tải hay xe gì đó cũng được. Bạn có 1 kho ở HCM. Hàng nước ngoài về thì bạn tập trung hàng tại kho HCM (hàng này bao gồm Hà Nội, Đà Nẵng, và HCM). Nhưng như nói ở trên thì bạn chỉ có kho ở HCM nên khách hàng của bạn nếu muốn lấy thì chỉ có cách xếp hàng tại kho HCM. Bạn có thể tạo một lối xếp hàng rộng hơn (nâng cấp máy chủ phần cứng) nhưng từng đó chưa đủ để khách hàng của bạn ở lại. Vì... Những người ở HCM thì dễ rồi, họ ở gần đó và nhanh chóng tiến tới lấy hàng. Nhưng những người ở Hà Nội hay Đà Nẵng họ lại mất công di chuyển vào HCM để lấy hàng. Tốn tiền, mất thời gian, chính vì vậy nếu bạn không thiết lập một cơ chế như load balancer là lập một kho ở Đà Nẵng, và ở HN và từ đó bạn phân phối ra thì mọi việc sẽ được giải quyết.
Vậy cách giải quyết của load balancer hay thuật toán của nó thế nào thì ngay bây giờ bạn hay xem tiếp...
Load balancer có bao nhiêu kiến trúc
Bạn chú ý đây là 3 sơ đồ chứ không phải là thuật toán nha. Có rất nhiều cách giải quyết khác nhau tuỳ vào mô hình của mỗi công ty. Nhưng trên thị trường Internet thì có 3 loại chính đó là:
- Load balancer dựa trên DNS
- Load balancer dựa trên phần cứng
- Load balancer dựa trên phần mềm
Từ từ đừng nôn nóng, mỗi loại có một điểm mạnh và điểm yếu riêng nhưng không thể nói đến việc kết hợp 3 cách này lại với nhau mà tôi đã xây dựng mô hình cho công ty hiện tại bên ĐỨC. Bây giờ chúng ta sẽ đi nói đến chi tiết từng cách này.
Load balancer dựa trên DNS
Load balancer dựa trên DNS thực sự là một trong những phương án thực hiện đơn giản nhất nếu bạn có kinh nhiệm về quản trị hệ thống server, bằng cách thực hiện một cấu hình đơn giản trên máy chủ DNS. Nguyên tắc là khi người dùng truy cập một tên miền, trước tiên, nó sẽ phân giải địa chỉ IP tương ứng với tên miền cho máy chủ DNS. Tại thời điểm này, chúng tôi có thể cho phép máy chủ DNS trả về các IP khác nhau theo người dùng ở các vị trí địa lý khác nhau. Ví dụ: người dùng ở phía nam trả lại IP của máy chủ doanh nghiệp của chúng tôi ở Hồ Chí Minh. Nếu người dùng ở phía bắc truy cập, tôi sẽ trả lại IP của máy chủ doanh nghiệp ở Hà Nội. Đó là ví dụ thôi, chứ ở VN thì quá gần nhau :D
Với việc triển khai theo cách này, thì giúp cho người dùng truy cập nới gần nhất để lấy hàng(đọc trên đầu bài viết để hiểu), điều này không chỉ làm giảm áp lực tải của một cụm mà còn cải thiện tốc độ truy cập của người dùng.
Ưu điểm tự nhiên của việc sử dụng DNS làm giải pháp Load balancer là cấu hình đơn giản và chi phí thực hiện rất thấp mà không cần thêm công việc phát triển và bảo trì. Nhưng nó cũng có một số nhược điểm đó là gì??? Rõ ràng nếu bạn nào đã từng trỏ DNS là hiểu khi cấu hình DNS được sửa đổi, nó sẽ không có hiệu lực kịp thời. Điều này là do các đặc điểm của DNS. DNS thường có nhiều cấp độ cache, chính vì vậy khi chúng ta sửa đổi cấu hình DNS, cache chưa thay đổi kịp, thì dẫn tới việc IP sẽ không kịp thời cập nhật, do đó ảnh hưởng đến hiệu quả của load balancer.
Ngoài ra, khi sử dụng DNS để Load balancer, hầu hết chúng đều dựa trên vị trí địa lý để tham dò User đó đang nằm ở đâu thông qua IP, không có chiến lược định tuyến nâng cao hơn, do đó đây cũng là hạn chế của giải pháp DNS.
Load balancer dựa trên thiết bị phần cứng
Nói đến cách này thì phải nói đến đại ca trong làng phân phối này đó là F5 Networks hận hạnh được giới thiệu đến anh chị và quý vị đại ca của tôi đó. Đại ca tôi chỉ là một thiết bị mang thôi hay còn gọi là F5. Bạn có thể hiểu đơn giản một cái gì đó tương tự như một bộ chuyển đổi mạng, hoàn toàn thông qua phần cứng và hiệu suất rất tốt. Số lượng yêu cầu có thể được xử lý mỗi giây đạt tới hàng triệu records.
Tất nhiên tiền nào của đó, đắt lắm nếu bạn nào xài rồi thì cho mình xin cái giá để tham khảo đối chiếu :D Loại thiết bị này thường được sử dụng đi đầu trong lối vào giao thông của các công ty Internet lớn, cũng như chính phủ, doanh nghiệp nhà nước và các doanh nghiệp khác không thiếu tiền. Các công ty vừa và nhỏ nói chung không sẵn sàng sử dụng bởi vì sao, bạn cũng biết rồi. Ngoài ra thì còn nhiều lợi lắm như bảo mật, tưởng lửa các kiểu con đà điểu...
Load balancer Dựa trên phần mềm
Load balancer phần mềm đề cập đến việc sử dụng phần mềm để phân phối và cân bằng lượng người dùng. Load balancer phần mềm được chia thành giao thức 7 Layer và giao thức 4 Layer. Nổi tiếng nhất đó là Nginx. Để có một khái niệm vững hơn thì bạn nên đọc về bài viết này What Is Layer 7 Load Balancing? Vì tác giả chưa làm qua sơ đồ này nên chưa thể có một cái nhìn tường tận được nên bỏ ngỏ tại đây.
Các thuật toán cân bằng thường được sử dụng là gì?
Sau khi chúng ta xem xét 3 kiến trúc thường được sử dụng hiện tại thì chúng ta sẽ qua những thuật toán của load balancer. Nhưng dừng lại đây tôi sẽ nói cho bạn nghe điều này. Tôi không nghĩ là tôi sẽ dừng tại đây đâu. Nhưng tôi có ghé qua một bài viết về "Các thuật toán Load Balancing là gì?" được đăng trên asking.asia thì tôi nghĩ mình sẽ không thể giải thích đầy đủ và rõ ràng như bài viết mà tôi đã đề cập. Chính vì vậy tôi mượn một chút nội dung và sử dụng tại đây.
Bắt đầu bài viết của asking.asia
Tùy thuộc công nghệ Load Balancing mà các thuật toán khác nhau sẽ được sử dụng để định tình trạng của máy chủ có hoạt động hay không. Có các loại thuật toán thường thấy là:
- Round Robin
- Weighted Round Robin
- Dynamic Round Robin
- Fastest
- Least Connections
Thuật toán Load Balancing – Round Robin là gì?
Round Robin là thuật toán lựa chọn các máy chủ theo trình tự. Theo đó, Load Balancer sẽ bắt đầu đi từ máy chủ số 1 trong danh sách của nó ứng với yêu cầu đầu tiên. Tiếp đó, nó sẽ di chuyển dần xuống trong danh sách theo thứ tự và bắt đầu lại ở đầu trang khi đến máy chủ cuối cùng.
Nhược điểm thuật toán Load Balancing – Round Robin là gì?
Khi có 2 yêu cầu liên tục từ phía người dùng sẽ có thể được gửi vào 2 server khác nhau. Điều này làm tốn thời gian tạo thêm kết nối với server thứ 2 trong khi đó server thứ nhất cũng có thể trả lời được thông tin mà người dùng đang cần. Để giải quyết điều này, round robin thường được cài đặt cùng với các phương pháp duy trì session như sử dụng cookie.
Thuật toán Load Balancing – Weighted Round Robin là gì?
Tương tự như kỹ thuật Round Robin nhưng WRR còn có khả năng xử lý theo cấu hình của từng server đích. Mỗi máy chủ được đánh giá bằng một số nguyên (giá trị trọng số Weight – mặc định giá trị là 1). Một server có khả năng xử lý gấp đôi server khác sẽ được đánh số lớn hơn và nhận được số request gấp đôi từ bộ cân bằng tải.
Nhược điểm thuật toán Load Balancing – Weighted Round Robin là gì?
Weighted Round Robin gây mất cân bằng tải động nếu như tải của các request liên tục thay đổi trong một khoảng thời gian rộng.
Thuật toán Load Balancing – Dynamic Round Robin (DRR) là gì?
Thuật toán DRR hoạt động gần giống với thuật toán WRR. Điểm khác biệt là trọng số ở đây dựa trên sự kiểm tra server một cách liên tục. Do đó trọng số liên tục thay đổi.
Việc chọn server sẽ dựa trên rất nhiều khía cạnh trong việc phân tích hiệu năng của server trên thời gia thực. Ví dụ: số kết nối hiện đang có trên các server hoặc server trả lời nhanh nhất, …
Thuật toán này thường không được cài đặt trong các bộ cân bằng tài đơn giản. Nó thường được sử dụng trong các sản phẩm cân bằng tải của F5 Network.
Thuật toán Load Balancing – Fastest là gì?
Đây là thuật toán dựa trên tính toán thời gian đáp ứng của mỗi server (response time). Thuật toán này sẽ chọn server nào có thời gian đáp ứng nhanh nhất. Thời gian đáp ứng được xác định bởi khoảng thời gian giữa thời điểm gửi một gói tin đến server và thời điểm nhận được gói tin trả lời.
Việc gửi và nhận này sẽ được bộ cân bằng tải đảm nhiệm. Dựa trên thời gian đáp ứng, bộ cân bằng tải sẽ biết chuyển yêu cầu tiếp theo đến server nào.
Thuật toán Fastest thường được dùng khi các server ở các vị trí địa lý khác nhau. Như vậy người dùng ở gần server nào thì thời gian đáp ứng của server đó sẽ nhanh nhất. Cuối cùng server đó sẽ được chọn để phục vụ.
Thuật toán Load Balancing – Least Connections là gì?
Các request sẽ được chuyển vào server có ít kết nối nhất trong hệ thống. Thuật toán này được coi như thuật toán động, vì nó phải đếm số kết nối đang hoạt động của server.
Least Connections có khả năng hoạt động tốt. Ngay cả khi tải của các kết nối biến thiên trong một khoảng lớn. Do đó nếu sử dụng RC sẽ khắc phục được nhược điểm của Round Robin.
Cách Load Balancing xử lý trạng thái là gì?
Cách Load Balancer xử lý trạng thái
Trong nhiều trường hợp ứng dụng yêu cầu người truy cập tiếp tục kết nối đến cùng một Backend Server. Một thuật toán mã nguồn sẽ tạo ra một mối quan hệ dựa trên thông tin là IP của khách hàng. Đối với ứng dụng web thông qua sticky sessions, Load Balancer sẽ đặt một cookie. Tất cả các requests từ sessions hướng đến một máy chủ vật lý.
Load Balancer dự phòng là gì?
Cài đặt Load Balancer dự phòng là một giải pháp tối ưu
Trong nhiều trường hợp, chỉ có một Load Balancer là điểm truy cập duy nhất. Chính vì vậy, chúng ta cần có một Load Balancer thứ hai. Nó sẽ được kết nối với Load Balancer ban đầu. Mục đích để mỗi Load Balancer đều có khả năng phát hiện lỗi và phục hồi.
Sẽ ra sao khi xảy ra trường hợp Load Balancer chính bị lỗi? Balancer thứ hai sẽ nhận trách nhiệm thay thế, do DNS di chuyển người dùng đến. Tuy nhiên, việc thay đổi DNS có thể mất nhiều thời gian trên internet. Và để chuyển đổi dự phòng được tự động, các quản trị viên sẽ cho phép linh hoạt địa chỉ IP Remapping. Chẳng hạn như trường hợp này là floating IPs.
IP Remapping giúp loại bỏ các vấn đề bộ nhớ đệm vốn có trong những thay đổi DNS. IP Remapping sẽ cung cấp một địa chỉ IP tĩnh. Địa chỉ IP này có thể được dễ dàng ánh xạ lại khi cần thiết. Tên miền có thể duy trì liên kết với các địa chỉ IP. Trong khi các địa chỉ IP của chính nó được di chuyển giữa các máy chủ.
Tổng kết
Hy vọng rằng những thông tin được cung cấp trong bài viết sẽ giúp bạn đọc đã có được cái nhìn tổng quan về Load Balancing. Đây một trong những thành phần cơ sở hạ tầng quan trọng nhất của ngành mạng máy tính. Hãy lưu ý kỹ các thông tin về chúng để cải thiện hiệu suất cũng như khiến người dùng hài lòng hơn về dịch vụ mạng của mình.