Từ điểm mốc Kiến trúc, bạn nên suy nghĩ về điều kiện là quy mô dự kiến của ứng dụng này. Và rất có thể, điều thông minh nhất là bắt đầu với chức năng phiên bản tích hợp sẵn của ASP.NET. Sau đó, nếu bạn thấy rằng bạn đang thực sự cần nó, sau đó thêm một trong hai:
- Thấp đến khả năng mở rộng trung: Load balancing với phiên dính, hoặc cân bằng tải dựa trên địa chỉ yêu cầu IP (& vẫn sử dụng ASP. NET Session).
- Khả năng mở rộng trung bình đến cao: Cửa hàng phiên chia sẻ trong RAM, tức là chia sẻ ASP.NET StateService, dự án "Vận tốc", ScaleOut SessionServer, v.v.
- Khả năng mở rộng cao: Hệ thống phiên dựa trên cookie được tạo bằng 'không quốc tịch' giữa các máy chủ web, theo nghĩa là nó dựa trên các bí mật và băm được chia sẻ trước được xác thực mà không cần truy vấn một cửa hàng phiên trung tâm. Nếu bạn đi tuyến đường này, thì bạn cũng nên cân nhắc việc lưu trữ các thiết lập người dùng không nhạy cảm trong cookie, để mở rộng quy mô này.
Lợi ích của phiên hoàn toàn dựa trên cookie là phiên có khả năng mở rộng vô hạn. Mỗi lần chúng tôi có một người dùng mới, chúng tôi cũng nhận được một máy tính từ xa mới có thể lưu trữ trạng thái phiên của anh ấy cho chúng tôi, cho 'miễn phí'. Tất nhiên, băm trong các máy chủ giao diện người dùng web của chúng tôi mất một số CPU, nhưng tầng đầu tiên là không trạng thái và dễ dàng mở rộng. Nhược điểm là nó là công việc phát triển hơn.
Yêu cầu Bjørn Hansen có tổng quan về các phiên trong cookie in these presentation slides, from around slide 16 and forward. Theo Schlossnagle đã viết về chúng trong his book Scalable Internet Architectures. Here is a good scientific paper để tạo các cookie thực sự an toàn, bảo mật tốt hơn so với các đề xuất từ Ask và Theo, nếu bộ nhớ phục vụ tôi.
Lưu ý rằng bạn có thể không cần nhiều khả năng mở rộng như bạn nghĩ. Ví dụ, Stack Overflow được phục vụ bởi chỉ 2 máy chủ frontend, với một bộ cân bằng tải chia lưu lượng truy cập theo địa chỉ IP của người dùng. Điều này làm cho ASP.NET Session cục bộ trên mỗi máy chủ webserver frontend như bình thường, miễn là tất cả các máy chủ web đang hoạt động - một giải pháp chấp nhận được và rất đơn giản cho hầu hết các trang web với 2-5 máy chủ web.
Có một sự cân nhắc có thể ghi đè lên ở trên. Nếu bạn thấy rằng bạn cần bộ nhớ cache dùng chung cho dữ liệu khác (kết quả truy vấn SQL, kết quả có thể sử dụng lại nhưng tính toán tốn kém CPU), và bạn đã sẵn sàng thực hiện bộ nhớ cache, cũng có nghĩa là cũng dính các phiên vào bộ nhớ cache này.Ví dụ về loại bộ nhớ cache dùng chung mà tôi đang nói đến là Memcached, Microsoft project "Velocity", Shared Cache, ScaleOut StateServer và các loại khác. Nhiều trang web sẽ không cần điều này, nhưng nó là một giải pháp rất tốt. Giải pháp này có thể dễ tiếp cận hơn về giá cả & thời gian phát triển khi dự án "Vận tốc" được phát hành, tùy thuộc vào ý định của Microsoft với "Vận tốc".
Kết luận
- Bạn chỉ cần buổi chia sẻ trên máy chủ frontend web, hay bạn cần điều này cho các dữ liệu khác cũng (kết quả SQL bộ nhớ đệm vv)? Bạn có cần bộ nhớ cache chung trong RAM không? Nếu vậy, bạn sẽ phải nhìn vào phần đệm trung gian/phân cụm chung được chia sẻ nói chung.
- Nếu không, bạn có biết bạn sẽ hoạt động ở quy mô nào không? Nếu bạn làm như vậy, sau đó sẽ có thể quyết định lựa chọn nào trong số 4 tùy chọn cho dữ liệu phiên (từ Phiên làm việc tích hợp ASP.NET đến cookie) phù hợp với bạn nhất.
- Nếu bạn mới bắt đầu và không biết bạn sẽ thu hút bao nhiêu người dùng, thì tôi sẽ bắt đầu với chức năng phiên bản tích hợp sẵn của ASP.NET và chỉ thêm các giải pháp phức tạp sau này.
Nguồn
2009-09-22 10:31:44
Xin chào Rex, cảm ơn sự ủng hộ và góp ý của bạn. Có thực hành nào tốt nhất để thực hiện các phiên bang không? – Geo
Chọn thuật toán mã hóa chính xác làm cho việc hack mã hóa cực kỳ khó khăn. Nó có nhiều khả năng ai đó sẽ cố gắng sử dụng cookie một cách vô ý để vi phạm hệ thống, nhưng mối đe dọa tồn tại với BẤT CỨ cookie, bao gồm cả cookie auth từ asp.net. –
@Geo chắc chắn, hãy xem phần bổ sung cho câu trả lời của tôi –