我們的商店最近開始採用SOA方法進行應用程序開發。我們看到SOA和微服務的關注點,可重用性和其他好處的分離帶來了一些很大的好處。跨微服務的查詢/分頁
然而,一個大我們堅持的項目是聚合,篩選和跨服務分頁結果。讓我用一個場景來描述這個問題。
假設我們有3個服務:
- PersonService - 對那些購買產品的商店信息 - 人們存儲的信息(姓名,地址等)
- ItemService。
- PaymentService - 存儲人們爲不同項目付款的信息。
現在,假設我們想要構建一個報告/管理工具,可以彙總顯示/報告多個服務。例如,我們想要顯示分類的付款清單,以及每個付款用於的人員和項目。這非常簡單:獲取付款清單,然後查詢相應的人員和物料記錄的PersonService和ItemService。
但是,當我們想要過濾掉這些數據時,問題就起作用了:例如,顯示購買了物品'Car'的名字爲「Bob」的人的付款分類列表。這使事情變得更加複雜,因爲我們需要過濾來自3種不同服務的結果,而不知道每個服務將返回多少結果。
從性能的角度來看,一遍又一遍查詢所有的服務來縮小結果將是非常昂貴的,所以我一直在研究更好的解決方案。但是,我找不到這個問題的具體解決方案(或者至少是「最佳實踐」)。在一個單一的應用程序中,我們簡單地在不同的表中使用SQL連接。我在計算各種服務如何/類似的情況時遇到了很多麻煩。
我對社區的問題是:你的方法是什麼?事情我已經考慮:
- 使用某種形式的搜索索引(Elasticsearch,Solr的),它包含所有服務的所有數據(通過事件更新推出的服務),然後查詢搜索索引爲結果。
- 試圖瞭解如何像GraphQL和Neo4j項目可能會幫助我們解決這些問題。
Chris Richardson對服務之間的數據庫服務共享數據庫有一些瞭解:http://microservices.io/patterns/data/database-per-service.html –