Im xây dựng một ứng dụng OO PHP sẽ chạy trên nhiều nút và sẽ tương đối không có quốc tịch và tôi cần triển khai đúng nhà xuất bản (http://en.wikipedia.org/wiki/Observer_pattern/http://sourcemaking.com/design_patterns/Observer/php) sự kiện kiểu.Sự kiện nhiều nút liên tục trong một ứng dụng web không quốc tịch trong PHP
Câu hỏi của tôi là, làm cách nào để xử lý sự kiện?
Trong ứng dụng của mình, chúng tôi đang sử dụng các công nghệ như Cassandra, Redis, Mongo và RabbitMQ.
Tôi biết PHP có sự kiện EXTENSION có sẵn, nhưng từ những gì tôi có thể nói nó nằm trong trạng thái - hoặc nếu như memcached được thừa hưởng, nó có thể được sử dụng trong nút đó ... nhưng ứng dụng của tôi sẽ được phân phối trên nhiều nút.
Vì vậy, hãy xem ví dụ: Trên nút 1, chỉ số (ID số 37) được cập nhật và mọi thứ đăng ký số liệu đó cần phải được cập nhật. Điều này xuất bản thay đổi và thay đổi khi nó cập nhật.
Tôi có nội dung được đăng ký ID số liệu 37 đang được cập nhật, ví dụ: Số liệu 38, có thể cần tính toán lại chính nó khi giá trị của số liệu thay đổi.
Số liệu 38 hiện được khởi tạo và được sử dụng trên nút 2 trong quy trình ID 1011 ... Chỉ số 37 cho chỉ số 38 trên nút 2 (Process ID 1011 trong trường hợp này) để chạy chức năng đã đăng ký như thế nào?
Số liệu 39 đăng ký vào Số liệu 38 đang được cập nhật, nhưng không được khởi tạo ở bất kỳ đâu ... Làm cách nào để cập nhật số liệu 39 khi Số liệu 38 hoàn tất cập nhật? Tôi đã nghĩ đến một cái gì đó như sử dụng RabbitMQ làm người quản lý hàng đợi sự kiện của tôi, và trên mỗi nút có một ứng dụng 'người tiêu dùng sự kiện' phong cách daemon đọc các sự kiện trong hàng đợi sự kiện (để cân bằng tải/phân phối tác phẩm) .
Sau đó, người tiêu dùng thấy "Số liệu: 38: Cập nhật", nó sẽ kiểm tra thứ gì đó như Redis cho bất kỳ thứ gì đã đăng ký "Metric: 38: Updated" và nhận giá trị ("What: Function: Values") và thực hiện điều gì đó như call_user_func_array (mảng ($ what, $ function), $ values); .... nhưng điều này có vẻ như nó có thể gây ra một gánh nặng của chi phí và một số mức độ của các vấn đề đồng bộ hóa ...
Tôi đang sử dụng Doctrine MongoDB ODM để duy trì các đối tượng của mình ... Để xử lý các vấn đề đồng bộ hóa mà tôi đã nghĩ đến một cái gì đó như thế này: Đối tượng có thể có số phiên bản ... (phiên bản = 1.0) Và redis có thể được sử dụng để duy trì tham chiếu nhanh đến phiên bản mới nhất của đối tượng (ObjectVersion: ObjectType: ObjectId) = 1.1 Và khi getter được gọi trên một thuộc tính đối tượng được đánh dấu là @critical (những thứ như isDeleted, số dư tiền tệ, v.v.) có thể kiểm tra xem ID phiên bản của cá thể có bằng phiên bản # trong redis và cập nhật các giá trị của nó từ mongo nếu nó cần .. .
Thiết lập thay thế đang sử dụng amphp/amp
(http://amphp.org/docs/amp/reactor-concepts.html) và một số hình thức RPC để đồng bộ hóa các nút
Vì tôi khá mới phát triển web (di chuyển từ C#) và không quốc tịch và phân phối .. Tôi nghĩ đó sẽ là ý tưởng tốt để hỏi cộng đồng nếu có ai có đề xuất tốt hơn?
"Tôi biết PHP có hệ thống sự kiện" Có phải không? Bạn có thể làm rõ những gì bạn đang đề cập đến? – Brad
Xin lỗi, tôi cần phải có một tham chiếu đến http://php.net/manual/en/book.event.php – ChaosAffe
Ah, vâng đó là một phần mở rộng và không thực sự là một phần của PHP. – Brad