2009-10-12 24 views
42

Một cách tiếp cận với khả năng mở rộng cao là sử dụng cân bằng tải mạng để phân chia tải xử lý giữa một số máy chủ.Ưu điểm và nhược điểm của phiên họp quan trọng/phiên Chiến lược cân bằng tải trọng?

Một thách thức mà phương pháp tiếp cận này trình bày là nơi máy chủ nhận biết trạng thái - lưu trữ trạng thái người dùng trong "phiên".

Một giải pháp cho vấn đề này là "phiên dính" (hay còn gọi là "quan hệ phiên") trong đó mỗi người dùng được chỉ định cho một máy chủ duy nhất và dữ liệu của họ được chứa trên máy chủ đó trong suốt thời gian của phiên.

Ưu điểm và nhược điểm của phương pháp "phiên dính" là gì? Bạn có sử dụng nó và nếu bạn hài lòng với nó?

Trả lời

60

Ưu điểm:

  • nó easy-- không có thay đổi ứng dụng yêu cầu.
  • tốt hơn sử dụng bộ nhớ đệm RAM địa phương (ví dụ như tìm kiếm lý lịch thành viên một lần, bộ nhớ cache nó, và có thể tái sử dụng nó lần ghé thăm sau từ cùng một người dùng)

Nhược điểm:

  • nếu máy chủ bị hỏng, phiên bị mất. (lưu ý rằng đây là một con của lưu trữ thông tin phiên cục bộ trên máy chủ web-- không phải của các phiên cố định trên mỗi giây). nếu những gì trong phiên thực sự quan trọng đối với người dùng (ví dụ: email dự thảo) hoặc trang web (ví dụ: giỏ hàng) thì việc mất một trong các máy chủ của bạn có thể rất đau đớn.
  • tùy thuộc vào việc thực hiện "dính" trong trình cân bằng tải của bạn, có thể trực tiếp tải không đồng đều đến một số máy chủ so với các máy chủ khác
  • trực tuyến máy chủ mới không ngay lập tức cung cấp tải máy chủ mới - nếu bạn có động hệ thống cân bằng tải để đối phó với gai, độ bám dính có thể làm chậm khả năng phản ứng của bạn nhanh chóng với mức tăng đột biến. Điều đó nói rằng, đây là một phần của một trường hợp góc và thực sự chỉ áp dụng cho các trang web rất lớn và tinh vi.
  • nếu bạn có ít người dùng nhưng lưu lượng truy cập của một người dùng có thể làm lu mờ một máy chủ (ví dụ: các trang phức tạp với SSL, AJAX, hình ảnh được tạo động, nén động, v.v.) 'không lây lan một tải của người dùng duy nhất đồng đều trên các máy chủ. Nếu bạn có nhiều người dùng đồng thời, đây không phải là vấn đề vì tất cả các máy chủ của bạn sẽ bị tràn ngập!

Nhưng nếu bạn phải sử dụng trạng thái phiên máy chủ cục bộ, các phiên cố định chắc chắn là cách để đi-- và thậm chí nếu bạn không sử dụng trạng thái phiên máy chủ cục bộ, tính dính có lợi ích khi sử dụng bộ nhớ cache (xem ở trên). Trình cân bằng tải của bạn sẽ có thể xem cookie HTTP (không chỉ địa chỉ IP) để xác định độ dính, vì địa chỉ IP có thể thay đổi trong một phiên duy nhất (ví dụ: ghép nối máy tính xách tay giữa mạng có dây và không dây).

Thậm chí tốt hơn, không sử dụng trạng thái phiên trên máy chủ web! Nếu trạng thái phiên rất mất mát (ví dụ: giỏ hàng), lưu trữ nó trong cơ sở dữ liệu trung tâm và xóa các phiên cũ theo định kỳ. Nếu trạng thái phiên không quan trọng (ví dụ: tên người dùng/URL hình đại diện), sau đó dán nó vào cookie-- chỉ cần đảm bảo bạn không đẩy quá nhiều dữ liệu vào cookie.

Phiên bản hiện tại của Rails, theo mặc định, lưu các biến phiên trong cookie vì những lý do trên. Các khung công tác web khác có thể có tùy chọn "lưu trữ trong cookie" và/hoặc "lưu trữ trong DB".

+1

Tốt anwsers! Bạn vui lòng giải thích thêm một chút về "Cân bằng tải của bạn có thể xem xét các cookie HTTP (không chỉ địa chỉ IP)", ý bạn là gì hơn? Làm thế nào có thể cân bằng tải biết nếu nó là cùng một người dùng? – Jaskey

+0

Ứng dụng web thường gửi cookie xuống máy khách để khi khách hàng đó trả lại yêu cầu HTTP khác, máy chủ có thể nhận ra cùng một người dùng hoặc phiên. Một số cân bằng tải có thể xem bên trong tiêu đề cookie HTTP để xác định người dùng và có thể sử dụng giá trị cookie đó thay vì địa chỉ IP để xác định máy chủ nào sẽ nhận được yêu cầu đó. –

+0

Nếu tôi lưu trữ trạng thái trong db/memcache, tôi có thể coi ứng dụng là không trạng thái, trong khi một số người sẽ nói rằng để tạo ứng dụng không trạng thái, chúng tôi phải duy trì trạng thái trong ứng dụng khách. – Jaskey

Các vấn đề liên quan