StackOverflow / ServerFault có bao nhiêu máy chủ web?
Nếu câu trả lời là 'nhiều hơn một', thì nó có đạt được Độ dính phiên trong khi bỏ phiếu DNS không?
StackOverflow / ServerFault có bao nhiêu máy chủ web?
Nếu câu trả lời là 'nhiều hơn một', thì nó có đạt được Độ dính phiên trong khi bỏ phiếu DNS không?
Câu trả lời:
Các trang web lớn có thể được "cân bằng tải" trên nhiều máy. Trong nhiều thiết lập cân bằng tải, người dùng có thể nhấn bất kỳ máy phụ trợ nào trong một phiên. Do đó, một số phương thức tồn tại để cho phép nhiều máy chia sẻ phiên người dùng.
Phương pháp được chọn sẽ phụ thuộc vào kiểu cân bằng tải được sử dụng, cũng như tính khả dụng / dung lượng của bộ lưu trữ phụ trợ:
Thông tin phiên chỉ được lưu trữ trong cookie : Thông tin phiên (không chỉ là định danh phiên) được lưu trữ trong cookie của người dùng. Ví dụ: cookie của người dùng có thể chứa nội dung trong giỏ hàng của họ. Để ngăn người dùng giả mạo dữ liệu phiên, có thể cung cấp HMAC cùng với cookie. Phương pháp này có lẽ ít phù hợp nhất cho hầu hết các ứng dụng:
Bộ cân bằng tải luôn hướng người dùng đến cùng một máy : Nhiều bộ cân bằng tải có thể đặt cookie phiên của riêng họ, cho biết người dùng nào đang thực hiện yêu cầu và chuyển chúng đến máy đó trong tương lai. Bởi vì người dùng luôn được hướng đến cùng một máy, không cần chia sẻ phiên giữa nhiều máy. Điều này có thể tốt trong một số tình huống:
Cơ sở dữ liệu phụ trợ được chia sẻ hoặc lưu trữ khóa / giá trị : Thông tin phiên được lưu trữ trong cơ sở dữ liệu phụ trợ, tất cả các máy chủ web có quyền truy cập để truy vấn và cập nhật. Trình duyệt của người dùng lưu trữ cookie chứa mã định danh (như ID phiên), chỉ vào thông tin phiên. Đây có lẽ là phương pháp sạch nhất trong ba:
Nhìn chung, hầu hết các ứng dụng web động thực hiện một số truy vấn cơ sở dữ liệu hoặc yêu cầu lưu trữ khóa / giá trị, vì vậy cơ sở dữ liệu hoặc kho lưu trữ khóa / giá trị là vị trí lưu trữ logic của dữ liệu phiên.
Nếu câu hỏi của bạn là làm thế nào để duy trì các phiên trên nhiều máy chủ web mặt trước, thì câu trả lời thường là sử dụng cơ sở dữ liệu tập trung. Thay vì dựa vào các phiên bản máy chủ web để theo dõi các tệp phiên trên hệ thống tệp cục bộ, bạn sẽ viết id phiên và dữ liệu vào DB trung tâm và thay vào đó, tất cả các máy chủ web sẽ truy xuất dữ liệu từ đó.
Sử dụng nemcached dường như là một giải pháp tốt không được đề cập bởi @David Pashley
Điều này có nghĩa là có một phiên bản memcached từ xa được chia sẻ bởi tất cả các máy chủ và sử dụng phần mở rộng PECL memcache cung cấp trình xử lý phiên riêng của nó.
Nó chỉ yêu cầu thay đổi hai tham số trong cấu hình php!
Dưới đây là một hướng dẫn tốt http://www.dotdeb.org/2008/08/25/storing-your-php-simes-USE-memcached/
IIRC, trong DotNetRocks # 440, họ cho biết một thời kỳ máy chủ. Không biết nếu đó vẫn là trường hợp.
Chỉnh sửa: Thật ra đó là Hanselminutes # 134 . Lấy làm tiếc.
Bạn có thể đặt cookie.
Bạn có thể tính toán một hàm băm của IP từ xa (tại các máy chủ từ xa được đánh số lẻ, đơn giản nhất của nó đến máy chủ A, các máy chủ được đánh số chẵn đi đến máy chủ B).
Có vẻ như bạn cũng có thể thực hiện điều đó thông qua một số giá trị nằm trong hệ thống nguồn nếu bạn đang sử dụng đường hầm ssl.
Thông thường, mỗi cơ chế trên yêu cầu máy chủ "proxy ngược" hoặc bộ cân bằng tải nào đó. Bộ cân bằng tải đó chấp nhận lưu lượng và sau đó hướng nó đến bất kỳ máy chủ nào ban đầu có phiên, dựa trên một trong các tiêu chí trên.
Tuy nhiên, tôi không chắc ý của bạn về "bỏ phiếu DNS"
a) Bạn có thể lưu trữ thông tin phiên trong cookie người dùng. Xem cookie cứng không trạng thái, không lưu trữ dữ liệu nào ở phía máy chủ, nhưng vẫn giữ trạng thái phiên http://www.cl.cam.ac.uk/~sjm217/ con / prot Protocol08cookies.pdf . b) Bạn có thể thay đổi lưu trữ phụ trợ phiên thành cơ sở dữ liệu hoặc memcached. Để loại bỏ một điểm lỗi duy nhất, bạn có thể đặt sao chép cơ sở dữ liệu hoặc nhiều nút memcached. Lưu ý, memcached được khuyến nghị trong các thiết lập như vậy trong đó việc mất trạng thái người dùng trong phiên không phải là lỗi lớn và không làm cho anh ta rất không hài lòng. Đối với các trường hợp trong đó bảo tồn nhà nước là quan trọng, sử dụng cơ sở dữ liệu. Cả PHP, Django và Rails đều cho phép nhà phát triển viết phần phụ trợ phiên tùy chỉnh.