2016-11-19 41 views
0

我有一個由一箇中央服務器,許多移動客戶端和許多工作服務器組成的系統。每個工作服務器都有自己的數據庫,可能位於客戶基礎設施上(當他購買本地安裝時)。如何將持久性事件從中央服務器推送給其他人?

在我目前的設計中,移動客戶端向中央服務器發送更新,中央服務器更新其數據庫。工作人員服務器定期拉取中心以獲取更新的信息。這種「拉動模式」創造了很多要求,但仍然不夠完善,因爲員工經常使用過時的信息。

我想要一個「推式模型」,中央服務器可以將更新「發佈」到「某處」,這會保留最新版本的數據。然後工作人員可以「訂閱」這個「某處」並始終保持最新狀態。

的主要問題是:

  1. 一名工人服務器可能處於脫機狀態時更新發生。當它恢復在線時,它應該收到它丟失的更新。
  2. 可能會創建一個新的工作服務器,並且需要獲取更新的數據,即使是存在之前發佈的數據。

獎金點:

  • 不需要管理該 「的地方」 自己。我的應用程序部署在AWS,所以如果有任何我可以用來實現的服務組合,那就太棒了。我發現的一切都有限的時間數據保留。
  • 回答

    1

    推模式的問題是:

    • 如果客戶端是離線的,中央系統將需要重試方法,這將產生許多不是推送模式
    • 將更多的請求客戶可能是防火牆後面,所以不能接收消息
    • 它是不可擴展

    一個拉模式效率要高得多:

    • 客戶應獲取最新的數據時開始,並定期
    • 新的客戶端只需連接到中央服務器 - 無需更新中央服務器與客戶端列表(取決於您的安全需求)
    • 它更可擴展

    有用於幾個選項提供流量拉請求

    • 通過API調用,由AWS API Gateway提供支持。然後,您需要使用AWS Lambda函數或Web服務器來處理請求。
    • 從DynamoDB
    • 直接(但是客戶端需要訪問憑證)
    • 從一個Amazon S3存儲

    使用的S3存儲有許多優勢:高度可擴展的,一個良好的範圍的安全選項(公;通過憑證;通過預先簽名的URL),不需要服務器。

    只需將數據放入S3存儲桶並讓客戶端「拉」數據即可。您可以爲「每個」客戶端分配一組文件,併爲每個客戶端分配一個特定文件,從而啓用單個配置。只需將S3看作非常大的鍵值數據存儲

    +0

    我並沒有考慮直接推送,而是在中介的幫助下更像pub/sub。所以中央需要只發送一次每個更新。工作人員會立即收到更新,但也可以收到在離線或尚未存在時發佈的所有內容。但後來我需要一個帶有永久保存的消息的pub/sub或類似的東西。它看起來更具擴展性。你怎麼看? –

    +0

    這不是純粹的pub/sub模型,因爲脫機客戶端需要檢索不同的消息。例如,Amazon SNS將發送消息(如果需要,將重試幾次),但對於脫機客戶端來說還不夠。它可以將消息推送到隊列中供以後檢索,但客戶端需要輪詢隊列。所以,很難混合「推送」和「離線」功能。拉/投票肯定是一個更簡單的解決方案。但是,也許其他StackOverflovians有另一種提供? –

    相關問題