Xin chào mọi người!
Ví dụ em có một trang web với 3 phần cơ bản:
- A là frontend gồm JS, HTML.
- B là web server run một ngôn ngữ server side bất kỳ như JS, C#, java, …
- C là DBMS như mySQL, MSSQL, …
Có cách nào để record trong C thay đổi thì C sẽ trigger cho B biết để:
-
B sẽ execute lại câu lệnh
SELECT * FROM ...
từ C để update lại data. - hoặc khi C có thay đổi dòng nào thì C truyền luôn data vừa thay đổi đó cho B (case này hơi ngược vì trước giờ toàn là B chủ động lấy data từ C nhưng không biết có cách nào để C chủ động gửi data cho B không, nghĩa là C đổi vai trò làm client còn B đổi lại làm server)
Sau khi B có data mới thì B sẽ gửi lại cho A thông qua websocket, A nhận được thì update lại DOM.
Tác nhân làm thay đổi C có thể là:
- Ngoài B ra thì có thể có có thêm web server D, E, F nào đó cùng dùng chung C. Khi D, E hoặc F tác động làm thay đổi đúng record trong table mà B đang dùng thì B cũng biết được là data của mình đã bị thay đổi nên gửi nó lại cho frontend.
- Backend có cài cron job nào đó mỗi cuối tuần data từ C’ được auto chuyển sang C, trùng hợp ngay lúc này có user đang online thì data trên browser của họ cũng tự động được update theo luôn (hoặc ít nhất browser phải hiển thị message “có update vui lòng F5”).
- DevOps mở app SQL Studio lên update record thủ công.
Nếu làm được thì em nghĩ sẽ có một khối stateful liền mạch từ C cho đến A; data được binding đồng nhất ở cả 3 “vị trí” A, B, C cho dù cả 3 ở 3 quốc gia khác nhau. Data sẽ được update realtime và tự động đồng bộ với nhau.
Nếu A, B, C là class thì sẽ có design pattern làm được VD observer nhưng không biết có design pattern nào giống obsever mà ở cấp độ system architecture không vậy mọi người.
thanks