2015-10-18 105 views
0

我需要一些建議,以瞭解如何執行搜索以在微服務擁有的關係數據庫中搜索關鍵字。 我有一些微服務與他們自己的關係數據庫。這些微服務可能會部署在碼頭集裝箱中。 什麼是使用像Apache Solr實現一個搜索引擎,使每個微服務數據庫可以被索引的最佳方法,我們可以實現關鍵字搜索提前基於微服務的架構中的關鍵字搜索

感謝

回答

1

這似乎是一個建築問題雖然這很有意義,但問題也是一個開放的結局,取決於你的系統需要什麼。有幾件事情是從我的頭頂開始的:

  1. 使用Apache SOLR的DataImportHandler
  2. 使用像Kafka或Kinesis這樣的消息隊列,並讓獨立的服務從它消耗來傳播到它們的數據存儲區,在這種情況下是由Apache SOLR支持的搜索服務和由MySQL支持的另一個服務。

就我個人而言,我從來沒有使用過DataImportHandler,但我最初的想法是它將Apache SOLR連接到MySQL。設置DataImportHandler需要Apache SOLR知道MySQL模式,訪問憑證等。因此,我建議第二個選項朝向無共享架構。

我打算將MySQL支持的服務稱爲「實體」服務,因爲它聽起來像是要保存某些特定類型對象的規範服務。實體服務和搜索服務將擁有自己的特定消費者,將Kinesis或Kafka的事件吸收到他們的數據存儲中,將搜索服務提供給Apache SOLR,並將實體服務提供給MySQL。

這有助於將服務從知道彼此存在的地方分離出來,並且還可以讓每個服務彼此獨立擴展。這將成爲數據冗餘,但它應該沒問題,因爲數據訪問模式不同。

我想提及的另一個警告是,它假定您保存的實體允許異步。請注意,此係統中的消息並不要求它在本例中爲實體服務的時刻保存在MySQL中。但是,您可以根據自己的喜好將其更改爲使消息在實體服務中保留,然後通過隊列傳播給搜索服務以進行索引。索引後,您可以添加額外的端點來搜索Apache SOLR。希望這可以讓你對其他架構如何發揮作用有所瞭解。如果您對系統和涉及的實體有更多的瞭解,您可能會得到更好的答案。

+0

謝謝你@Will 大多數情況下會做SOLR + DataImportHandler。另外,因爲我的數據庫模式是高度關係的,所以將整個事物非規範化並不合理。我寧願讓它在數據庫層仍然是關係型的,並且仍然在應用程序層中解耦它。我知道這會花費我更多的遠程電話,但我似乎沒有找到任何其他解決方案。 在這種情況下,數據庫將成爲單個大型數據庫,因此DataImportHandler應該執行索引編制。 – sinjar

+1

沒問題!很高興我能幫助!只要它符合業務領域和前面的投資,這絕對是一個很好的解決方案。儘管聽起來您可能會共享一個數據庫,您可能會從中讀取不同的服務。這實際上可能會導致您的服務通過模式緊密耦合。如果你想擴展,它可能不是最好的解決方案。 –