2009-04-20 44 views
20

Tôi đang xem ASP.NET tìm hiểu video trên asp.net/learn. Trong hướng dẫn này, họ đang xây dựng một công cụ kiểm tra. Tại một thời điểm, người kể chuyện giải thích rằng chúng ta sẽ sử dụng đối tượng Session để duy trì trạng thái giữa mỗi trang (mỗi trang chứa một câu hỏi và bốn câu trả lời). Anh ấy nói rằng "vì đây là một trang web có lưu lượng truy cập thấp" nên sử dụng Session và rằng anh không có thời gian để thực hiện một phương pháp tinh vi hơn.Tại sao nên sử dụng Phiên để lưu trữ trạng thái trong các trang web lưu lượng truy cập cao?

Tôi chỉ tự hỏi phương pháp thay thế mà anh ta gợi ý là gì? Và tại sao phiên là lựa chọn không tốt cho một trang web có lưu lượng truy cập cao?

Trả lời

19

Lưu trữ dữ liệu trong cơ sở dữ liệu hoặc trong cookie hoặc một số phương pháp khác không trực tiếp liên kết bộ nhớ máy chủ web.

Ngoài tải, phiên cũng làm nảy sinh các vấn đề với khả năng sử dụng trang trại vì bạn sẽ cần phải đồng bộ hóa phiên trên trang trại hoặc tạo phiên cố định, có thể ảnh hưởng đến khả năng mở rộng.

+0

Tôi đồng ý, khi chúng tôi sử dụng trạng thái phiên, chúng tôi đã thực hiện tương tự. +1 – John

4

Dữ liệu phiên được lưu trữ trong RAM của máy chủ, nếu bạn có một trang lưu lượng truy cập cao sẽ nhanh chóng thực sự nhanh chóng và điều cuối cùng bạn muốn là dữ liệu được hoán đổi vào đĩa.

Như gaijin42 nói, cookie hoặc DB là phương án thay thế.

+0

Dữ liệu phiên chỉ được lưu trữ mặc định trong bộ nhớ, nhưng bạn có thể lưu trữ nó trong cơ sở dữ liệu. –

2

Đối với các trang web có lưu lượng truy cập cao, bạn có thể xem Memcached. Nó là một bộ nhớ đệm được lưu trữ trên RAM của một máy tính từ xa. Chỉ gần đây một cổng win32 đã được thực hiện của thư viện (chỉ có thể với linux trước).

1

Tôi sẽ không lặp lại những gì đã được đề cập ở đây, nhưng một lựa chọn khác là sử dụng hàm băm Ứng dụng. Nó nên được sử dụng một cách tiết kiệm, vì nó sẽ tiêu thụ bộ nhớ trên máy chủ web của bạn như Adam đã đề cập, nhưng nó cung cấp một cách tốt để lưu trữ những thứ phổ biến trên TẤT CẢ người dùng của bạn.

Điều này giúp bạn không phải quay lại cơ sở dữ liệu của mình để truy xuất thông tin mà nhiều khả năng đã được người khác yêu cầu.

Một thay thế tương tự như ứng dụng là bộ nhớ cache trong đó có sự linh hoạt hơn về khi nó được phát hành, thời gian vv

Dưới đây là một số liên kết trong trường hợp bạn đang quan tâm: ASP NET CachingApplication State

4

phiên như một phương pháp lưu trữ trạng thái là thô trong các hệ thống lưu lượng truy cập cao vì nhiều lý do.

Đầu tiên, phương pháp lưu trữ phiên mặc định đang trong quá trình, có nghĩa là nếu bạn có trang web có cân bằng tải, bạn sẽ liên tục 'mất' thông tin phiên làm người dùng nhận các trang được phân phối từ các máy chủ khác nhau.

Máy chủ phiên trong proc cũng bị chết khi một nhóm ứng dụng được tái chế, điều này xảy ra thường xuyên hơn trên các máy chủ lưu lượng truy cập cao hơn.

Các tùy chọn khả năng mở rộng cho dữ liệu phiên là

  1. Sử dụng tự do có sẵn ASP.NET phiên Server và chỉ tất cả ứng dụng của bạn vào nó
  2. Sử dụng SQL Server để lưu trữ dữ liệu Session.

Do tính chất của dữ liệu phiên nói chung, không phải là một lựa chọn rất tốt cho trang lưu lượng truy cập rất cao (trừ khi bạn không có tiền để ném vào phần cứng).

1

Chúng tôi sử dụng cơ sở dữ liệu cho bất kỳ lưu lượng truy cập cao nào hoặc điều đó sẽ dẫn đến trạng thái phiên lớn. Thay vào đó chúng ta lưu trữ một con trỏ trong sessionstate thực trỏ đến bản ghi cơ sở dữ liệu của chúng ta. Sau đó, chi phí duy nhất chúng tôi có là băng thông giữa máy chủ web và máy chủ cơ sở dữ liệu sẽ ít hơn nhiều so với bất kỳ người dùng cụ thể nào và máy chủ web.

+0

Tôi ngạc nhiên rằng máy chủ web đến cơ sở dữ liệu được coi là nhanh, trong khi máy chủ web cho khách hàng được coi là chậm. Phiên của bạn được lưu trữ như thế nào trong cơ sở dữ liệu của bạn? – MedicineMan

+1

Ngay cả một cơ sở dữ liệu được thiết kế kém sẽ có nhiều khả năng thực hiện máy chủ web cho ứng dụng khách vì khách hàng sẽ truy cập internet trong hầu hết các trường hợp, trừ khi bạn đang thực hiện các ứng dụng mạng nội bộ. Có khả năng máy chủ cơ sở dữ liệu và máy chủ web sẽ ở trong cùng một vị trí thực tế và thậm chí nếu không, chúng có thể sẽ nằm trên mạng được tối ưu hóa để liên lạc nhanh giữa hai máy chủ. Một lý do khác mà chúng tôi đã làm theo cách này là cho phép tiểu bang của bạn theo dõi bạn đến các máy tính khác. – John

6

Đối với các lựa chọn thay thế, bạn có thể đọc bài viết Nine Options for Managing Persistent User State in Your ASP.NET Application.

Trong các bài viết, tác giả giải thích các ưu và nhược điểm của từng phương pháp.

Từ tóm tắt:

ASP.NET cung cấp nhiều cách khác nhau để tồn tại dữ liệu giữa các yêu cầu người dùng. Bạn có thể sử dụng đối tượng Ứng dụng, cookie, trường ẩn, Phiên hoặc Đối tượng bộ nhớ cache và nhiều phương thức khác . Việc quyết định thời điểm sử dụng mỗi những điều này đôi khi có thể khó khăn. Bài viết này sẽ giới thiệu các kỹ thuật nói trên và trình bày một số nguyên tắc về thời điểm sử dụng chúng. Mặc dù nhiều kỹ thuật trong số này có số tồn tại trong ASP cổ điển, các phương pháp hay nhất khi sử dụng chúng đã thay đổi với giới thiệu .NET Framework. Để duy trì dữ liệu trong ASP.NET, bạn sẽ phải điều chỉnh những gì bạn đã học được trước đây về trạng thái xử lý trong ASP.

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