天天看點

Java微服務開發指南 -- 下一步該了解什麼?下一步該了解什麼?

    我們在這本小冊子裡面介紹了非常多的知識,但是它遠遠不夠涵蓋一切!我們需要知道,這隻是冰山一角,有非常多的微服務所涉及到的領域在本書中沒有探讨。在最後這個章節,我們将會簡要的介紹一些你必須了解的概念,并将這些聯系留給讀者進行深入研究。

    配置(Configuration)是分布式系統中非常重要的部分,而在微服務架構中變得愈發重要和困難。我們需要在配置和不可變遞交(Immutable delivery)之間尋求平衡,因為我們不希望出現服務的碎片化。例如:我們需要能夠改變日志級别,在A/B測試上切換特性,配置資料庫連接配接或者使用秘鑰或者密碼,我們回顧之前介紹的三個Java微服務架構,但是每個架構的配置方式略微不同,那麼在非Java環境下的微服務配置方式又會變成什麼樣子呢?

如果以配置的形式存在,不同的需求就會在一樣的代碼基礎上,生成不同的鏡像,這就是碎片化的開始

    為了能夠在容器中,技術無關的進行配置管理,我們需要采用技術無關的方式在容器中進行配置。在Docker環境中,我們能夠通過注入環境變量的方式來進行配置,Kubernetes更是推薦我們這樣進行配置。Kubernetes也提供了相應的APIs,将<code>Secrets</code>注入到容器中,而在<code>Secrets</code>中可以放置使用者名、密碼以及私有秘鑰等諸多配置内容。Kubernetes在最近也添加了<code>ConfigMaps</code>(類似<code>Secrets</code>),它被用來完成應用級别的配置,在解耦Docker鏡像中的配置同時,它可以支援通過環境變量或者檔案的方式注入配置。如果一個應用能夠以配置檔案或者環境變量的方式消費配置,那就可以使用Kubernetes來完成配置而不需要引入複雜的配置服務和用戶端。在Kubernetes下對微服務的配置,可以做到技術無關,而配置也被作為叢集管理的基礎設施。

在kubernetes中,secret對象類型主要目的是 儲存一些私密資料,比如密碼,OAuth tokens,ssh keys等資訊。将這些資訊放在secret對象中 比 直接放在pod或docker image中更安全,也更友善使用 <a href="http://www.jianshu.com/p/571383da7adf">Kubernetes中的ConfigMaps</a>

    不可置疑,微服務架構也會帶來諸多缺點,尤其是對日志、Metrics和跟蹤帶來的影響很大,随着系統被拆分成為一個個獨立的部分,就需要更多的工具投入來支援你看到全局。當你以可伸縮的方式運作服務,特别是在每個元件都有可能失敗的情況下,我們需要收集服務的資訊以及服務相關的資料(類似Metrics和跟蹤資訊)而不用理會容器是否存活。接下來,介紹一些途徑和方法當你考慮設計日志,Metrics和跟蹤政策相關的功能:

開發人員暴露他們的日志

聚合/中心化

搜尋與相關性

可視化以及圖表

    Kubernetes通過插件的方式,允許添加叢集級别的日志和Metrics收集功能。典型的解決方案包括,<code>syslog</code>、<code>Fluentd</code>或者<code>Logstash</code>,它們可以将日志從服務中拖走,以流的形式投機到中心化的聚合器中。有些人會使用消息中間件的形式來解決日志收集,目的是提升可用性,這也可以了解。<code>ElasticSearch</code>是一個非常好的聚合日志方案,它支援伸縮以及索引,并且你可以在前端架設<code>Kibana</code>,它能提供良好的儀表盤展示和搜尋界面。除此之外,還有一些<code>Prometheus</code>、<code>Zipkin</code>、<code>Grafana</code>、<code>Hawkular</code>和<code>Netflix Servo</code>方案供選擇。

事實上ELK作為實際方案已經運作很長時間了,它們分别是<code>ElasticSearch</code>、<code>Logstash</code>和<code>Kibana</code>

    在第五章中讨論過不可變遞交,它對于微服務而言是至關重要的,當我們擁有了大量小的服務後,我們現有的手工流程就無法支撐微服務的建構,換句話說,當每個團隊都能夠運維自己的服務時,我們就需要一個統一的方式來避免出現運維瓶頸以及人肉錯誤。一旦我們采用了微服務架構,我們需要洞悉并了解服務的回報,隻有這樣才能幫助我們走的更遠。當業務需求改變了,我們通過疊代開發,将需求在系統中進行了實作,我們就會不斷的分步釋出系統,事實上,我們需要一套可以運作的軟體傳遞流程。這個流程是由許多子流程組成的,它們通過交彙點等特定節點連接配接而成,理想中,我們希望能夠自動的完成建構、測試以及部署。

    本書是一個以實踐為主導,使用流行的Java為服務架構來一步一步建構分布式系統的教程。微服務不是本書讨論的唯一技術解決方案,人也是複雜系統中的重要組成部分,需要使人時刻保持伸縮以及靈活,在系統發展的同時,也要考慮組織結構的調整。

    在介紹了使用Java架構來建構微服務後,我們需要建構、部署和管理它們。使用現有的技術來進行微服務的伸縮性維護非常困難,是以我們使用類似Docker和Kubernetes來幫助我們進行建構和部署,并使用類似不可變遞交的最佳實踐。

    當我們開始通過Docker和Kubernetes來建構、部署微服務,我們可以使用本地環境來完成這些工作,為此我們使用了<code>RedHat Container Development Kit</code>以及運作在上面的<code>RedHat OpenShift</code>來完成部署工作。

譯者将其改造為Kubernetes的本地版,minikube

    最後我們接觸了一點重要的基本概念,例如:配置、日志、Metrics和持續遞交,但是我們沒有觸及注入:安全、自服務等其他數不清的話題,但是并不代表着它們不屬于微服務的範疇。

    我們希望這本書對你有用。

     Christian Posta 是RedHat的架構師和中間件專家,他是一名作家、部落客和演講家。他作為<code>Apache ActiveMQ</code>、<code>Apache Camel</code>、<code>Fabric8</code>以及相當多項目的committer。他花費了大量的時間再可伸縮web應用以及幫助企業建立大規模分布式系統,而這些在現在被稱作微服務。他熱愛分享和指導,并指導團隊通過分布式原理、微服務、devops以及cloud-native來獲得項目的成功。閑暇時刻,他會和他的妻子Jackie以及兩個女兒Madelyn和Claire來渡過美好時光。

     魏鵬,阿裡巴巴集團技術專家。2009年碩士研究所學生畢業加入阿裡巴巴中國網站技術部,曾擔任中國網站交易平台架構師,主導了交易系統服務化工作,設計實作的資料遷移系統高效的完成了阿裡巴巴中國網站交易資料到阿裡巴巴集團的遷移工作。目前在阿裡巴巴中間件技術部的應用容器與服務架構組從事Java應用容器Pandora和服務架構HSF的相關工作,其中Java應用容器Pandora是阿裡巴巴中間件運作的基礎,而服務架構HSF則是阿裡巴巴集團實作服務化的主要解決方案,二者在阿裡巴巴擁有最為廣泛的使用量。個人平時喜歡閱讀技術書籍,與同僚合著了《Java并發程式設計的藝術》一書,并翻譯一些國外優秀文檔,愛總結,喜分享,對Java應用容器、多線程程式設計以及分布式系統感興趣,深知“路漫漫其修遠兮,吾将上下而求索”,希望能夠和大家多多交流共同進步。