2012-05-08 26 views
135

Tôi muốn biết sự khác biệt giữa các phiên dính và không dính. Những gì tôi hiểu sau khi đọc từ internet:Các buổi họp kín và không dính

Chú ý: chỉ một đối tượng phiên duy nhất sẽ ở đó.

không dính phiên: phiên đối tượng cho mỗi nút máy chủ

Trả lời

411

Khi trang web của bạn được phục vụ bởi chỉ 1 web server, đối với mỗi cặp, một đối tượng session được tạo ra và duy trì trong bộ nhớ của máy chủ web. Tất cả các yêu cầu từ máy khách đến máy chủ web này và cập nhật đối tượng phiên này. Nếu một số dữ liệu cần được lưu trữ trong đối tượng phiên trong khoảng thời gian tương tác, nó được lưu trữ trong đối tượng phiên này và vẫn tồn tại ở đó miễn là phiên tồn tại.

Tuy nhiên, nếu trang web của bạn được phục vụ bởi multiple web servers nằm phía sau load balancer, trình cân bằng tải sẽ quyết định mỗi yêu cầu thực tế (vật lý) nào cần thực hiện. Ví dụ, nếu có 3 máy chủ web A, B và C đằng sau bộ cân bằng tải, có thể www.mywebsite.com/index.jsp được phục vụ từ máy chủ A, www.mywebsite.com/login.jsp được phục vụ từ máy chủ B và www.mywebsite.com/accoutdetails.php được phục vụ từ máy chủ C.

Bây giờ, nếu các yêu cầu đang được phục vụ từ (vật lý) 3 máy chủ khác nhau, mỗi máy chủ đã tạo đối tượng phiên cho bạn và vì các phiên này các đối tượng ngồi trên 3 hộp độc lập, không có cách nào trực tiếp để biết cái gì có trong đối tượng phiên của đối tượng kia. Để đồng bộ hóa giữa các phiên máy chủ này, bạn có thể phải ghi/đọc dữ liệu phiên vào một lớp phổ biến cho tất cả - như một DB. Bây giờ viết và đọc dữ liệu đến/từ một db cho trường hợp sử dụng này có thể không phải là một ý tưởng hay. Bây giờ, đây là vai trò của phiên dính. Nếu load balancer được hướng dẫn sử dụng các phiên dính, tất cả các tương tác của bạn sẽ xảy ra với the same physical server, ngay cả khi các máy chủ khác có mặt. Vì vậy, đối tượng phiên của bạn sẽ giống nhau trong toàn bộ tương tác của bạn với trang web này.

Để tóm tắt, trong trường hợp Phiên cố định, tất cả các yêu cầu của bạn sẽ được chuyển đến cùng một máy chủ web vật lý trong khi trường hợp không cân bằng tải có thể chọn bất kỳ máy chủ web nào để phục vụ yêu cầu của bạn.

Như một ví dụ, bạn có thể đọc về cân bằng tải đàn hồi của Amazon và các buổi dính ở đây: http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html

+0

@ TJ- điều gì sẽ xảy ra nếu một nút sẽ không khả dụng? – gstackoverflow

+8

Trong hầu hết các trường hợp, phiên sẽ bị mất. Trong trường hợp [AWS ESB] (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html) _Nếu một cá thể thất bại hoặc trở nên không lành mạnh, bộ cân bằng tải sẽ dừng yêu cầu định tuyến đến đó Ví dụ, thay vào đó chọn một thể hiện lành mạnh mới dựa trên thuật toán cân bằng tải hiện có. Bộ cân bằng tải xử lý phiên làm việc hiện tại "bị kẹt" với phiên bản mới khỏe mạnh và tiếp tục định tuyến các yêu cầu cho cá thể đó ngay cả khi trường hợp không thành công quay lại._ –

+1

Theo thông tin nào thì LoadBalancer tạo một phiên HTTP dính? Đặc biệt về kết nối HTTPS vấn đề này trở nên thú vị. Bạn có cấp dữ liệu LB với khóa riêng của máy chủ web để có thể chia kết nối SSL và tìm nạp phiên HTTP không? Hay LB chỉ đơn giản là sử dụng địa chỉ IP của khách hàng? Trong trường hợp này, điều gì về máy chủ proxy, nơi nhiều khách hàng sử dụng cùng một địa chỉ IP? Hoặc thậm chí tệ hơn, các khách hàng di động, nơi mà địa chỉ IP thay đổi thường xuyên? Hay thậm chí còn có một kỹ thuật tốt hơn cho điều đó? Cảm ơn – g000ze

32

Tôi đã thực hiện một câu trả lời với một số chi tiết ở đây: https://stackoverflow.com/a/11045462/592477

Hoặc bạn có thể đọc nó ở đó ==>

Khi bạn sử dụng cân bằng tải có nghĩa là bạn có nhiều trường hợp tomcat và bạn cần phải chia tải.

  • Nếu bạn đang sử dụng sao chép phiên mà không cần phiên dính: Hãy tưởng tượng bạn chỉ có một người dùng sử dụng ứng dụng web của bạn, và bạn có 3 trường tomcat. Người dùng này gửi một số yêu cầu đến ứng dụng của bạn, sau đó trình cân bằng tải sẽ gửi một số yêu cầu này đến phiên bản tomcat đầu tiên và gửi một số yêu cầu khác đến phiên bản thứ hai và thứ ba cho yêu cầu thứ ba.
  • Nếu bạn đang sử dụng phiên cố định mà không cần sao chép: Hãy tưởng tượng bạn chỉ có một người dùng sử dụng ứng dụng web của mình và bạn có 3 phiên bản tomcat . Người dùng này gửi một số yêu cầu đến ứng dụng của bạn, sau đó loadbalancer sẽ gửi yêu cầu người dùng đầu tiên đến một trong ba trường hợp tomcat và tất cả các yêu cầu khác được gửi bởi người dùng này trong phiên của anh ấy sẽ được gửi đến cùng một tomcat ví dụ. Trong các yêu cầu này, nếu bạn tắt hoặc khởi động lại phiên bản tomcat này (ví dụ tomcat được sử dụng), trình cân bằng tải sẽ gửi yêu cầu còn lại đến một phiên bản tomcat khác vẫn đang hoạt động , NHƯNG khi bạn không sử dụng sao chép phiên, Ví dụ tomcat nhận các yêu cầu còn lại không có bản sao của phiên người dùng sau đó cho người dùng này bắt đầu phiên: người dùng mất phiên và bị ngắt kết nối khỏi ứng dụng web mặc dù ứng dụng web vẫn đang chạy .
  • Nếu bạn đang sử dụng phiên cố định VỚI sao chép phiên: Hãy tưởng tượng bạn chỉ có một người dùng sử dụng ứng dụng web của mình và bạn có 3 phiên bản tomcat . Người dùng này gửi một số yêu cầu đến ứng dụng của bạn, sau đó loadbalancer sẽ gửi yêu cầu người dùng đầu tiên đến một trong ba trường hợp tomcat và tất cả các yêu cầu khác được gửi bởi người dùng này trong phiên của anh ấy sẽ được gửi đến cùng một tomcat ví dụ. Trong các yêu cầu này, nếu bạn tắt hoặc khởi động lại phiên bản tomcat này (ví dụ tomcat được sử dụng), trình cân bằng tải sẽ gửi yêu cầu còn lại đến một cá thể tomcat khác vẫn đang hoạt động, khi bạn sử dụng phiên sao chép, cá thể tomcat nhận được các yêu cầu còn lại có bản sao của phiên người dùng sau đó người dùng tiếp tục phiên của mình: người dùng tiếp tục duyệt web của bạn ứng dụng mà không bị ngắt kết nối, việc tắt phiên bản tomcat không ảnh hưởng đến điều hướng của người dùng.
Các vấn đề liên quan