0
0
Lập trình
Admin Team
Admin Teamtechmely

Khám Phá Sự Khác Biệt Giữa HAProxy và Websocket Qua Kinh Nghiệm Phỏng Vấn DevOps

Đăng vào 1 tháng trước

• 4 phút đọc

Khám Phá Sự Khác Biệt Giữa HAProxy và Websocket Qua Kinh Nghiệm Phỏng Vấn DevOps

Giới thiệu

Trong thời đại công nghệ hiện nay, nhiều người thường có những hiểu lầm về việc cấu hình HAProxy và Websocket. Hôm nay, tôi sẽ chia sẻ một kinh nghiệm cá nhân từ những buổi phỏng vấn DevOps mà tôi đã tham gia, đồng thời giải thích rõ hơn về mối quan hệ giữa HAProxy, Websocket và các khái niệm liên quan.

Một Chút Về Tôi

Xin chào, tôi là Minh Monmen. Sau một thời gian dài dừng chân để theo đuổi những điều cá nhân, tôi quay trở lại với thế giới công nghệ và khám phá nhiều kiến thức mới qua những buổi phỏng vấn. Ngày hôm nay, tôi muốn chia sẻ một câu chuyện thú vị xảy ra trong một buổi phỏng vấn mà tôi tham gia gần đây.

Nội Dung Cuộc Phỏng Vấn

Trong buổi phỏng vấn, tôi đã hỏi một ứng viên về việc sử dụng HAProxy để load balance cho các server chạy Websocket, đặc biệt là việc có cần thiết sử dụng ip_hash hay mỗi phiên sticky session hay không. Câu hỏi này không chỉ đơn thuần là một câu hỏi kỹ thuật mà còn là cơ hội để khám phá sâu hơn về cách hoạt động của Websocket và HAProxy.

Câu Hỏi Của Tôi

Khi dùng HAProxy để load balance nhiều server chạy Websocket, có phải việc sử dụng ip_hash hoặc sticky session là bắt buộc để Websocket hoạt động đúng không?

Ứng viên trả lời rằng:

Vì Websocket là một kết nối dạng stateful, cần phải cấu hình HAProxy với ip_hash hoặc sticky session để đảm bảo rằng tất cả các request từ một client đều được route tới cùng một backend server.

Tuy nhiên, tôi cảm thấy có điều gì đó không đúng với câu trả lời này và quyết định tìm hiểu sâu hơn.

Tìm Hiểu Về Websocket

Trước khi đi xa hơn, chúng ta cần hiểu rõ Websocket hoạt động như thế nào. Websocket là một giao thức cho phép thực hiện kết nối hai chiều giữa client và server mà không phải thực hiện lại quá trình thiết lập kết nối liên tục. Kể từ khi kết nối TCP được mở, dữ liệu có thể được truyền đi mà không cần tạo nhiều request HTTP riêng lẻ như trong mô hình truyền thống.

Ba Giai Đoạn Chính Của Kết Nối Websocket

  1. Kết Nối (Connecting): Client gửi yêu cầu HTTP để thiết lập kết nối.
  2. Mở Kết Nối (Open): Dữ liệu được truyền đi trên cùng một kết nối TCP.
  3. Đóng Kết Nối (Closing): Một trong hai bên gửi thông báo đóng kết nối.

Trong suốt vòng đời của một kết nối Websocket, sẽ chỉ có một kết nối TCP duy nhất tồn tại giữa client và server.

HAProxy và Cách Hoạt Động Với Websocket

Giờ đây, hãy xem xét vai trò của HAProxy trong việc load balance Websocket. Trong quá trình handshake (xác thực) của Websocket, HAProxy quyết định backend server nào sẽ được sử dụng dựa trên các thông tin trong yêu cầu HTTP.

Điều quan trọng là:

  • Logic load balance chỉ diễn ra một lần trong giai đoạn handshake. Sau khi kết nối được mở, HAProxy sẽ chuyển sang chế độ tunnel và không can thiệp vào dữ liệu đang được truyền giữa client và server.
  • Do đó, chính việc sử dụng ip_hash hay sticky session là không bắt buộc cho Websocket hoạt động đúng.

Tại Sao Có Quan Niệm Sai Lầm Về Sticky Session?

Trên thực tế, nhiều developer vẫn thường cấu hình HAProxy với sticky session hoặc ip_hash cho Websocket, điều này có thể do một số lý do sau:

  1. Sử Dụng Socket.IO: Socket.IO là một thư viện phổ biến sử dụng Websocket nhưng cũng có khả năng fallback về HTTP long-polling, yêu cầu sticky session để hoạt động hiệu quả.
  2. Stateful Khác Biệt: Tính chất stateful của Websocket có thể làm người ta nhầm lẫn về việc cần thiết phải sử dụng sticky session để duy trì các kết nối.

Kết Luận

Câu chuyện trải nghiệm của tôi trong buổi phỏng vấn về HAProxy và Websocket là một bài học quý giá. Hiểu rõ những khái niệm cơ bản và mối quan hệ giữa chúng sẽ giúp chúng ta có cách nhìn sâu sắc hơn về việc cấu hình và tối ưu hóa hệ thống. Hy vọng qua bài viết này, các bạn sẽ rút ra được nhiều kiến thức hữu ích cho công việc của mình trong lĩnh vực DevOps.

Hẹn gặp lại trong những chia sẻ tiếp theo!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào