2010-09-03 71 views
5

Tôi đang làm việc trên ứng dụng web được phân phối và chúng tôi quyết định tách mô-đun web khỏi các dịch vụ kinh doanh để làm cho nó dễ mở rộng hơn.Quản lý phiên trong ứng dụng được phân phối

Đây là tình huống: Chúng tôi có một cá thể máy chủ lưu giữ ứng dụng web (Bộ điều khiển, JSP, v.v.) và nhiều phiên bản máy chủ với dịch vụ doanh nghiệp. Nếu ứng dụng web cần bất kỳ dữ liệu nào, nó sẽ hỏi bất kỳ máy chủ doanh nghiệp hiện có nào thông qua Hessian về nó, sau đó nhận phản hồi và hiển thị dữ liệu.

Hiện tại chúng tôi truy xuất dữ liệu từ DB dựa trên người dùng đã đăng nhập và điều này không thể thay đổi, vì vậy mọi máy chủ đều biết người dùng nào yêu cầu thực hiện công việc.

Câu hỏi của tôi là: Bạn có biết giải pháp để giữ phiên người dùng trên một số ứng dụng độc lập không?

Ví dụ: một trong các giải pháp có thể gửi tên người dùng với mọi yêu cầu nhưng đây không phải là ý tưởng hay đối với chúng tôi.

Thanks a lot

+0

Cảm ơn tất cả. Tôi đã tìm ra giải pháp tốt nhất. Chúng ta chỉ cần thêm tên người dùng (hoặc bất kỳ) làm tiêu đề yêu cầu http và lấy nó ở phía bên kia. Nó rất dễ dàng với Hessian, bạn chỉ nên mở rộng HessianProxy và thực hiện phương thức addRequestHeaders (URLConnection). Hãy quan tâm – oyushche

Trả lời

2

Có 2 phương pháp cho vấn đề này:

1) Lưu trữ tất cả thông tin phiên ở trung tâm máy chủ memcached

2) Sử dụng phiên biết cân bằng tải, mà sẽ trực tiếp cùng người dùng với cùng một nút.

+0

3) Lưu trữ tất cả các phiên trong cơ sở dữ liệu được sao chép tổng thể hỗ trợ nhiều bản sao của mỗi phiên. Bằng cách đó, bạn sẽ có chuyển đổi dự phòng. Ngoài ra, hãy xem câu trả lời đầy đủ của tôi ở đây có thể cung cấp cho bạn một số thông tin chi tiết: http://stackoverflow.com/a/8443896/260805 – Ztyx

4

Sử dụng hashtable được phân phối để lưu trữ và truy xuất phiên của bạn từ bất kỳ máy chủ nào. Hãy thử ví dụ Hazelcast. Nó là mã nguồn mở và siêu đơn giản; xem mẫu dưới đây.

Map<String, Session> mapSessions = Hazelcast.getMap("sessions"); 
// session is created or updated so put it into the sessions map 
mapSessions.put(sessionId, session); 
// any server needing to access a session should just retrieve 
// it from the map. 
// Map is distributed/shared so any JVM running Hazelcast can 
// read the sessions. 
Session session = mapSessions.get(sessionId); 

Hazelcast là peer-to-peer. Chỉ cần bao gồm một cái bình và bắt đầu chia sẻ các phiên của bạn.

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