Tại nơi làm việc chúng tôi làm hầu hết mọi thứ trong Java và perl, nhưng tôi muốn xây dựng một tính năng bằng cách sử dụng PHP và các phiên. Một số peeps nghĩ rằng đó là một ý tưởng tồi để cố gắng làm các phiên PHP trên hệ thống của chúng tôi, vì nó được phân phối cho nhiều máy chủ. Vấn đề cụ thể sẽ là gì?Các phiên PHP có khó mở rộng trên một hệ thống phân tán không?
Trả lời
Câu trả lời cho câu hỏi cụ thể của bạn, vấn đề là gì, nằm trong thực tế là theo mặc định, PHP lưu các phiên của nó trong các tệp trên hệ thống tệp. Đối với một yêu cầu phân phát máy chủ web, đây không phải là vấn đề vì dữ liệu phiên của bạn sẽ luôn có sẵn. Nhưng nếu bạn có hai máy chủ web cân bằng tải phục vụ yêu cầu thì sao?
Hãy tưởng tượng nhấn máy chủ web đầu tiên với yêu cầu, tạo tệp phiên của bạn trên hệ thống tệp của nó. Sau đó, yêu cầu tiếp theo của bạn sẽ truy cập vào máy chủ web thứ hai. Dĩ nhiên, máy chủ web thứ hai sẽ không thấy tệp phiên. Đối với người dùng, bạn có thể đăng nhập vào một trang web, và sau đó đột nhiên bị đăng xuất.
Đây không phải là vấn đề cụ thể đối với PHP và rất phổ biến. Giải pháp là lưu trữ dữ liệu phiên trong một số khu vực chung. Phương pháp phổ biến nhất cho việc này là lưu dữ liệu phiên trong cơ sở dữ liệu có thể truy cập được vào tất cả các máy chủ web hoặc một số máy chủ bộ nhớ cache được chia sẻ như memcached.
Các phiên liên tục trên một số máy chủ (còn được gọi là phân cụm phiên) là một vấn đề phổ biến cho việc mở rộng các ứng dụng web và không dành riêng cho PHP. PHP cung cấp một số giải pháp để xử lý nó, chẳng hạn như Zend Platform (máy chủ ứng dụng thương mại) và Msession (tiện ích mở rộng).
Bạn cũng có thể sử dụng một phiên tùy chỉnh tiết kiệm handler:
http://www.php.net/manual/en/function.session-set-save-handler.php
Tôi chưa bao giờ thử nó, nhưng với nó, bạn định nghĩa của riêng bạn lưu/đọc chức năng, do đó bạn có thể thực hiện một cơ sở dữ liệu hoặc một phụ trợ nfs được chia sẻ mà không cần cài đặt bất kỳ tiện ích mở rộng nào.
Ngoài ra Msession, được đề xuất bởi @Eran Galperin, trông rất thú vị như là một thay thế cho cái tôi đã đề cập trước đây.
Đây là một câu trả lời tuyệt vời, và tôi sẽ sử dụng phương pháp này. Cảm ơn! – woody121
Khá một câu hỏi mơ hồ, nhưng tôi sẽ nói rằng vấn đề lớn hơn đề cập trong các câu trả lời. Chắc chắn bạn có thể ghi đè lên cách tải và lưu cookie, nhưng cũng có chi phí. Ví dụ: bạn sẽ phải xem xét các trường hợp/câu hỏi sau:
- Nếu bạn đang đặt cookie trên máy chủ khác, điều này ảnh hưởng đến tốc độ cookie của bạn như thế nào? Điều đó rõ ràng phụ thuộc vào số lượng ghi/lần đọc bạn thực hiện.
- Bạn đang thực hiện việc này để tăng tốc độ hay có chuyển đổi dự phòng? Câu trả lời chắc chắn sẽ dẫn đến các giải pháp khác nhau:
- Trong trường hợp bạn làm điều này để chuyển đổi dự phòng, bạn sẽ xử lý như thế nào nếu (các) máy chủ web của bạn không thể truy cập vào lưu trữ phiên vì liên kết mạng bị hỏng? Điều gì xảy ra nếu cửa hàng phiên của bạn bị hỏng? Bạn sẽ phải giải quyết điều này bằng cách sử dụng một số loại bản sao chủ chính, có thể chạy phân phối phiên lưu trữ trên cùng một máy như máy chủ web cho tính sẵn sàng cao thêm (nếu tất cả các phiên có thể phù hợp trong bộ nhớ). Có một cái nhìn tại Riak hoặc tương tự cho nhân rộng master-master.
- Trong trường hợp bạn chỉ đơn giản là làm điều này cho tốc độ, tôi sẽ sử dụng apache, nginx hoặc (nhanh nhất) haproxy chỉ đơn giản là làm cân bằng tải dựa trên địa chỉ IP của khách hàng. Bằng cách đó bạn không phải bận tâm với việc thiết lập một cửa hàng phiên phân phối. Chắc chắn, nếu một trong các trường hợp PHP của bạn bị gỡ xuống, người dùng của bạn sẽ mất cookie của họ, nhưng có thể đó không phải là vấn đề. Tuỳ bạn.
dễ nhất là memcached hoặc redis.
ở đây là làm thế nào để làm điều đó trong redis - chúng tôi đang sử dụng nó vào lúc này: http://redis4you.com/articles.php?id=001&name=Redis+as+session+handler+in+PHP
- 1. PHP: Tạo hệ thống CMS mở rộng
- 2. Hệ thống phân tán, khung tốt nhất?
- 3. Có hệ thống tệp phân tán nào chạy trên Windows ngoại trừ Hadoop không?
- 4. Trong kiến trúc phân tán, tại sao khó quản lý các phiên bản?
- 5. Hệ thống phân tán: Bầu cử lãnh đạo
- 6. Celery có thích hợp để sử dụng với nhiều hệ thống phân tán nhỏ không?
- 7. Hệ thống kiểm soát phiên bản có thể mở rộng (nửa triệu tệp)
- 8. Có bất kỳ hệ thống lưu trữ tệp nguồn mở có thể mở rộng nào không?
- 9. Các tệp nhật ký trong các hệ thống phân tán ồ ạt
- 10. Làm cách nào để thiết kế và xác minh các hệ thống phân tán?
- 11. php mssql mở rộng trên wamp
- 12. Hệ thống phân phối Java
- 13. Chụp lớp gọi lên hệ thống phân cấp trong PHP
- 14. Mailbox Processor trên Hệ thống phân phối
- 15. Tiện ích mở rộng của Chrome có thể ghi vào một tệp trong thư mục hệ thống của Chrome không?
- 16. Automake: biến không mở rộng trên Solaris
- 17. Tại sao "tham gia" giảm khả năng mở rộng trong hệ thống cơ sở dữ liệu phân tán quy mô lớn?
- 18. Các mẫu thiết kế PHP/JavaScript dành cho các hệ thống dựa trên web
- 19. Java framework cho hệ thống phân phối
- 20. Phiên PHP không mở rộng hết hạn cookie trên mỗi yêu cầu
- 21. PHP - mở rộng phương pháp như mở rộng một lớp
- 22. Phiên PHP không có cookie
- 23. Các hệ thống nhúng/cấp thấp có khó lập trình cho các nhà phát triển phần mềm không?
- 24. Khung lưới điện toán phân tán lưới nào hiện đang được ưa chuộng cho các hệ thống giao dịch
- 25. php: các phiên dựa trên cookie
- 26. hệ thống đăng nhập PHP an toàn?
- 27. Hệ thống kiểm soát nguồn phân tán nào có tích hợp tốt nhất với Windows & Visual Studio?
- 28. Truy xuất phiên bản mở rộng trong php
- 29. Mở rộng PHP (không phải memcache) trên Windows
- 30. Hệ thống điều khiển phiên bản phân phối khác nhau hoạt động cùng nhau
Như @azkotoki đề cập bên dưới, một phân vùng được chia sẻ giống như một NFS gắn kết NAS cũng hoạt động tốt. Điều tốt đẹp về điều này là nó không liên quan đến thay đổi mã. Chỉ cần symlink thư mục session cục bộ vào NFS. – gerard
nhưng nếu miền nằm trong các trung tâm dữ liệu riêng biệt thì sao? – Dannyboy