0

Sticky Session: Khi những "Linh Hồn" dữ liệu tìm đường về nhà

Hãy tượng bạn bước vào một cửa hàng cà phê quen thuộc. Bạn gọi 1 ly latte, người nhân viên mỉm cười và ghi nhớ tên bạn. Nhưng chỉ 2 phút sau, khi bạn quay lại hỏi về món đồ uống của mình, một nhân viên khác nhìn bạn ngơ ngác: "Xin lỗi quý khách là ai?".

Trong thế giới hệ thống phân tán (Distributed Systems). Bi kịch này sảy ra hàng triệu lần mỗi giây. Đó là khi một Load Balancer (bộ cân bằng tải) vô tình bạn gửi yêu cầu đến một Server hoàn toàn xa lạ, nơi không hề biết bạn đã đăng nhập hay giỏ hàng của bạn đang có gì.

Để giải quyết sự "mất trí nhớ" tạm thời này, chúng ta có một giải pháp vừa thực tế, vừa đầy nghệ thuật: Sticky Sessions.

1. Sticky Sessions là gì? (Lời hẹn ước của Load Balancer)

Sticky Sessions (hay còn gọi là Session Affinity) là một kỹ thuật Load Balance để đảm bảo rằng: Tất cả các yêu cầu từ một người dùng cụ thể trong một phiên làm việc sẽ luôn được được hướng dẫn đến đúng một server duy nhất

Nếu Server A đã mở lòng đón nhận bạn ở lần chạm đầu tiên, thì suốt hành trình đó, bạn sẽ không bị đẩy sang Server B hay C. Đó là một "lời hẹn ước" bền chặt giữa client và backend

2. Cơ chế đằng sau: Sợi chỉ đỏ định mệnh

Làm sao để Load Balancer nhận ra bạn giữa biển người mênh mông? có 2 cách phổ biến:

  • Cookie-based (Phổ biến nhất): load Balancer sẽ cài một "viên kẹo" nhỏ (Cookie) vào trình duyệt cảu bạn. Lần sau quay lại, nó chỉ cần nhìn vào viên kẹo đó để biết bạn thuộc về Server nào
  • IP-based: Load Balancer dựa trên IP của bạn. Tuy nhiên cách này hơi "rủi ro" vì nếu bạn đổi từ wifi dang 4G, sợi giây liên kết của bạn sẽ bị đứt đoạn.

3. Tại sao chúng ta cần sự "thủy chung" này?

Trong kỷ nguyên của Microservices, chúng ta luôn hướng tới Stateless (không lưu trạng thái). Nhưng thực tế phũ phàng là:

Local Caching: Server A có thể đã tốn công tải toàn bộ dữ liệu cá nhân của bạn lên RAM. Nếu sang Server B, nó phải làm lại từ đầu. Sticky Sessions giúp tối ưu hiệu năng đáng kể.

Legacy Apps: Những ứng dụng cũ lưu Session trực tiếp trên bộ nhớ máy chủ (In-memory). Không có Sticky Sessions, người dùng sẽ bị "đăng xuất" liên tục như một trò đùa dai.

4. Mặt tối của sự gắn kết (The Dark Side)

Cái gì quá "dính" cũng có cái giá của nó:

Mất cân bằng tải (Traffic Imbalance): Nếu một Server vô tình chứa toàn các "VIP user" hoạt động mạnh, nó sẽ quá tải trong khi các Server khác đang "ngồi chơi xơi nước".

Điểm yếu chết người: Nếu Server A lăn đùng ra chết, toàn bộ người dùng đang "dính" với nó sẽ mất hết dữ liệu phiên làm việc. Sự thủy chung lúc này trở thành một thảm kịch.

Lời kết: Sự cân bằng của một chiến binh hệ thống

Sticky Sessions không phải là "viên đạn bạc". Nó là một giải pháp tình thế tuyệt vời nhưng cũng là một cái bẫy nếu ta quá phụ thuộc. Một kiến trúc sư giỏi là người biết khi nào nên để dữ liệu "gắn bó" với một máy chủ, và khi nào nên để chúng tự do bay lượn trên các giải pháp lưu trữ tập trung như Redis hay Memcached.

Công nghệ, suy cho cùng, cũng như những tương tác giữa con người: Cần sự ổn định để tin tưởng, nhưng cũng cần sự linh hoạt để tồn tại.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí