2015-11-12 71 views
2

我一直在網上搜索,但我有點困惑,什麼是一個Java微服務。我的意思是我知道Web服務是什麼,並即時告知,微服務是每維基如下:什麼是Java微服務

在計算中,微服務是在複雜的應用程序由與通信小的,獨立的過程的軟件體系結構風格彼此使用語言不可知的API。

和微服務的屬性是:

微服務架構的性能:

這是一種架構的服務是易於更換服務 周圍組織的能力,例如用戶界面前端, 建議,物流,結算等服務可以使用不同的編程語言,數據庫,硬件和 軟件環境,根據什麼最適合架構 對稱的,而不是分層實施 (生產者 - 消費者)

但我需要一個具體的java示例來了解我可以如何製作微服務。有沒有人有你可以提供的例子?

+0

嘗試想象Unix操作系統是如何工作的。有一個內核是控制一切的主要過程。但是,讓操作系統真正做任何事的一切都是構成系統的所有小程序。有一個單獨的小程序,可以運行系統所做的每個方面。 – durbnpoisn

+0

這是一個很好的比喻,但在Java網絡代碼你會說微服務可能是一個API調用?比方說,我有一個Web服務來獲取用戶帳戶,然後我有另一個'微服務'web api來獲取用戶帳戶的地址和電話號碼,並將其返回到第一個電話,這將算作一個微服務? – j2emanue

+0

我會這麼說。任何坐在後臺等待被授予指令,並且保持不變的東西都將符合要求。只要它不是主線程的一部分,就會在不使用時佔用內存。 – durbnpoisn

回答

7

微服務完全如其名稱所示。這是一個非常簡單的功能的小型服務。

所以是的,就代碼而言,您可能正在尋找一個REST服務。請注意,任何其他API風格都可以使用。它不一定是REST,但它必須是語言不可知論者爲您繪製所有好處。

但是這個想法比這個更大。其背後的想法是,他們非常專業化,沒有大的業務工作流程。例如,如果您有一個處理付款的服務,然後寫一個審計日誌,然後通知客戶。我不會把它算作微服務。寫一個審計日誌,這可能是一個微服務,也會通知客戶,處理信用卡。您的系統將通過調用3個必要的微服務來協調該業務工作流程(上述3個步驟)。所以你的系統是一個協調員,你不用擔心實現業務功能。

微服務不會想太多,他們只是按照他們的說法去做,但他們會盡快做到。

所以簡而言之。採取一個非常簡單的業務功能,在其前面放置一個REST API。你有一個微服務。

有幾個有趣的特性與微服務:

  1. 它們可以獨立部署。這很好,因爲您可以部署應用程序的各個部分,而無需一次全部關閉。
  2. 他們可以在自己的筒倉運行。所以如果你有一個非常內存不足的微服務,它可以部署在一個單獨的服務器上,所以它不會影響系統的其他部分。
  3. 他們可以使用不同的技術。你可能有Java中的微服務,有些服務。網
  4. 他們保持依賴性檢查。開發人員在一起生活時傾向於從一個組件向下一個組件放出依賴項。在這裏你不能。

但你也應該考慮一些弊端

  1. 這是一個很大很難在所有這些調用保持一致的交易。如果你需要回滾,你需要JTA來回滾所有的REST調用。這可能是一種痛苦,在我的經驗中表現不佳。

  2. 通過該系統,以解決可能是相當粗糙追蹤交易,如果您還沒有一致的記錄和一致的事務ID

  3. 它可能會比較難找到,其中一個缺陷是,如果引入由於可能帶來副作用的部署,地面不斷變化。

  4. 顯然,所有這些REST調用可能會相當昂貴。我不一定在談論交通工具,因爲它可能會讓所有的微服務都住在同一個數據中心。但是,每當您通過網絡撥打電話時,您都必須對數據進行編組/解組,並且這可能會很快導致CPU昂貴。

+0

@Gimby夠公平的。雖然「微」意味着更小的服務(從功能的角度來看,而不是實際的代碼大小),但這正是我想要做的。我沒有說它與REST綁定,除了提到一個典型的實現是使用REST。這受到http://martinfowler.com/articles/microservices.html第二段的支持。這不是一個限制,只是一個典型的用途。 – mprivat

+1

添加細節更加明確 – mprivat

2

您可以檢查此: https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka

這個例子是基於以下服務:

Netflix的尤里卡:

尤里卡是一個REST(代表性狀態傳輸)的該服務主要用於AWS雲中,用於定位服務以實現中間層服務器的負載平衡和故障轉移。

Eureka只是一個服務註冊表,它包含所有已啓動的服務實例服務器名稱和端口詳細信息。

Netflix的Zuul:

Zuul是邊緣服務,提供動態路由,監控,靈活性,安全性,等等。

這是微服務客戶端的終端。所有其他服務實例都在安全框中保護,而Zuul則暴露給攔截所有客戶端請求的客戶端。

Netflix的功能區:

絲帶是一個進程間通信(遠程過程調用)與內置的軟件負載均衡器庫。主要使用模型涉及具有各種序列化方案支持的REST調用。

功能區與Zuul結合使用,在N個微服務實例正在運行時,使用大量算法來選擇性能最佳的服務節點來處理請求。

簡而言之,Zuul攔截客戶端請求並根據請求URL Zuul通過使用Eureka服務發現找到Microservice實例的IP和端口。功能區選擇最佳服務節點來處理請求,然後從Zuul請求發送到相應的微服務實例。從我的角度看項目

優勢:

我們可以添加或刪除基於網絡流量「N」數字服務節點。