內容來源:2016年12月16日,平安壹錢包高級架構師丁雪豐在「GIAC 全球互聯網架構大會」進行《Java 生態圈與微服務》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
閱讀字數:1532 | 4分鐘閱讀
嘉賓演講視頻地址:t.cn/R9HAuY1編程
Java誕生於1995年,1996年發佈了1.0版本;2004年,發佈量大更新1.5,並改成5.0;2014年,發佈了Java8;2017年,發佈Java9(根據OpenJDK官網,9月發佈正式版)。安全
在TIOBE編程語言排行榜中,Java長期位居榜首,是2015年的年度編程語言。經過Google Trends,能夠看到Java的搜索量遠高於緊隨其後的幾門語言。架構
學習語言時,你們都會從HelloWorld寫起,在Spring Boot的幫助下,Java也能經過幾行代碼寫出一個HelloWorld的REST服務,比起目前流行的Go語言絕不遜色。
框架
在平時的工做中,你們寫的並不是HelloWorld,大多數人都是在寫業務邏輯,因此你們更關心語言自己的優點,以及它的工具鏈和生態環境。運維
所謂微服務,就是一些協同工做的小而自治的服務,這裏須要解釋兩點,首先是「一些」,微服務並不是一個服務,而是幾個相關服務的集合;其次是「小而自治」,服務要小,咱們不鼓勵大而全的服務。編程語言
微服務與語言二者間並無什麼必然的關係。微服務的好處就是能夠帶來微服務的異構性,用全部語言均可以寫出合格的微服務。沒有最好的語言,只有最合適的使用場景。微服務
在我看來,微服務最應該關注的不是開發,也不是運維,而是如何設計微服務,業務上的設計遠比代碼上的實現來得重要。此時領域驅動設計就顯得如此重要,先從領域模型入手,設計合理的服務,而後再來談微服務落地。工具
微服務的落地須要考慮不少問題,好比服務的實現、如何開發、如何測試、服務的運維、可運維和高可用。性能
進入微服務的落地環節以後,就要和語言有關了。比方說微服務該如何測試?微服務的服務提供方須要優雅地調用本身,而服務消費方要模擬提供方的反應。學習
如圖是一個服務提供方的簡單測試。
上圖是消費者一端的測試。
在Java中可選擇的代碼質量工具仍是有不少的,好比測試覆蓋率工具、Mock工具、性能測試工具、持續集成工具以及代碼掃描工具。這就是生態圈的強大。
另外一方面,微服務也須要受到保護,好比服務的認證與受權。在一些場景下,開發和測試環境是相通的,測試環境的請求可能會跑到開發生產環境中去;甚至有些狀況下整個集團的網都是通的。這時就須要作服務的認證與受權。
OAuth2.0能夠用來提供各類服務受權,不只對外也能對內。它的受權模式有受權碼模式、簡化模式、密碼模式和客戶端模式,在內部服務中通常會用客戶端模式。
一樣,Java的生態圈中還有不少安全相關的工具,好比安全框架、簽名&摘要工具和加解密工具等等。
當服務的數量到達必定成都後,就須要考慮服務的發現與註冊,Spring Cloud默認提供了Eureka做爲註冊中心,但同時也可使用Consul,雖然Consul不是Java寫的,但配合Spring Cloud Consul也很好用。相似的還有國內很是知名的Dubbo。
在Spring Boot和Spring Cloud的幫助下,咱們能夠很方便地瞭解到服務的運行狀況,好比經過Hystrix實現服務降級:
經過Zipkin實現鏈路分析,配合標準化的日誌,結合ELK等工具,能對信息作進一步的統一處理。
雖然Spring很強大,Spring Boot和Spring Cloud也紅的發紫,加之Java龐大的生態圈,但也不要期望開源軟件拿來就能用,在實際平常工做中,整合的工做是必定會有的,並且總會出現定製的須要。
對於微服務而言,設計合理的業務模型很重要。
微服務與語言並無太大的關係。
完整的生態環境能幫助你快速地將微服務落地。
我今天的分享就到這裏,謝謝你們!