微服務完全如其名稱所示。這是一個非常簡單的功能的小型服務。
所以是的,就代碼而言,您可能正在尋找一個REST服務。請注意,任何其他API風格都可以使用。它不一定是REST,但它必須是語言不可知論者爲您繪製所有好處。
但是這個想法比這個更大。其背後的想法是,他們非常專業化,沒有大的業務工作流程。例如,如果您有一個處理付款的服務,然後寫一個審計日誌,然後通知客戶。我不會把它算作微服務。寫一個審計日誌,這可能是一個微服務,也會通知客戶,處理信用卡。您的系統將通過調用3個必要的微服務來協調該業務工作流程(上述3個步驟)。所以你的系統是一個協調員,你不用擔心實現業務功能。
微服務不會想太多,他們只是按照他們的說法去做,但他們會盡快做到。
所以簡而言之。採取一個非常簡單的業務功能,在其前面放置一個REST API。你有一個微服務。
有幾個有趣的特性與微服務:
- 它們可以獨立部署。這很好,因爲您可以部署應用程序的各個部分,而無需一次全部關閉。
- 他們可以在自己的筒倉運行。所以如果你有一個非常內存不足的微服務,它可以部署在一個單獨的服務器上,所以它不會影響系統的其他部分。
- 他們可以使用不同的技術。你可能有Java中的微服務,有些服務。網
- 他們保持依賴性檢查。開發人員在一起生活時傾向於從一個組件向下一個組件放出依賴項。在這裏你不能。
但你也應該考慮一些弊端
這是一個很大很難在所有這些調用保持一致的交易。如果你需要回滾,你需要JTA來回滾所有的REST調用。這可能是一種痛苦,在我的經驗中表現不佳。
通過該系統,以解決可能是相當粗糙追蹤交易,如果您還沒有一致的記錄和一致的事務ID
它可能會比較難找到,其中一個缺陷是,如果引入由於可能帶來副作用的部署,地面不斷變化。
顯然,所有這些REST調用可能會相當昂貴。我不一定在談論交通工具,因爲它可能會讓所有的微服務都住在同一個數據中心。但是,每當您通過網絡撥打電話時,您都必須對數據進行編組/解組,並且這可能會很快導致CPU昂貴。
嘗試想象Unix操作系統是如何工作的。有一個內核是控制一切的主要過程。但是,讓操作系統真正做任何事的一切都是構成系統的所有小程序。有一個單獨的小程序,可以運行系統所做的每個方面。 – durbnpoisn
這是一個很好的比喻,但在Java網絡代碼你會說微服務可能是一個API調用?比方說,我有一個Web服務來獲取用戶帳戶,然後我有另一個'微服務'web api來獲取用戶帳戶的地址和電話號碼,並將其返回到第一個電話,這將算作一個微服務? – j2emanue
我會這麼說。任何坐在後臺等待被授予指令,並且保持不變的東西都將符合要求。只要它不是主線程的一部分,就會在不使用時佔用內存。 – durbnpoisn