[英]How can I synchronize two java applications?
這是我遇到的情況:我在不同的服務器上運行了兩個similair java應用程序。 兩個應用程序都使用提供的Web服務從同一網站獲取數據。 但該網站當然不知道第一個應用程序采用了與第二個應用程序相同的數據安全性。 獲取數據后應保存在數據庫中。 所以我遇到了在數據庫中保存兩次相同數據的問題。
如何避免數據庫中的重復條目?
可能有兩種方法:
1)使用數據庫端。 寫一些看起來像“插入如果唯一”的東西。
2)使用服務器端。 編寫一些中間服務,它將接收來自兩個數據獲取者的響應並以某種方式處理它們。
我想第二種解決方案更有效。
你能就這個話題提出一些建議嗎? 您將如何實施該中間服務? 如何實現服務之間的通信? 如果我們使用HashMaps存儲接收的數據,我們如何估計我們的系統可以處理的HashMap的最大大小?
存在針對此類問題的分布式框架。
ConcurrentMap
。 您真的需要同時在兩台服務器上獲取數據嗎? 如果不存在,在插入期間檢查每個條目可能是昂貴的。 合並多次提取也很耗時。 並行獲取是否有任何好處? 考慮一次拿一個抓取器。
您將面臨的問題是您必須選擇哪個分布式進程應執行數據獲取並將其存儲在DB中。
這是某種領導人選舉問題。
看看Apache ZooKeeper ,它是分布式協調服務。 有一個收據如何用ZooKeeper實現領導者選舉。
有很多框架已經實現了此收據。 我建議你使用Netflix策展人 。 有關策展人領導人選舉的更多詳情,請訪問wiki 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.