內容來源:2016年12月16日,平安壹錢包高階架構師丁雪豐在“GIAC 全球網際網路架構大會”進行《Java 生態圈與微服務》演講分享。IT大咖說作為獨家視訊合作方,經主辦方和講者審閱授權釋出。
閱讀字數:1532 | 4分鐘閱讀
摘要
嘉賓演講視訊地址:t.cn/R9HAuY1
Java老矣,尚能飯否?
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
進入微服務的落地環節之後,就要和語言有關了。比方說微服務該如何測試?微服務的服務提供方需要優雅地呼叫自己,而服務消費方要模擬提供方的反應。
如圖是一個服務提供方的簡單測試。
上圖是消費者一端的測試。
在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龐大的生態圈,但也不要指望開源軟體拿來就能用,在實際日常工作中,整合的工作是一定會有的,而且總會出現定製的需要。
總結
對於微服務而言,設計合理的業務模型很重要。
微服務與語言並沒有太大的關係。
完整的生態環境能幫助你快速地將微服務落地。
我今天的分享就到這裡,謝謝大家!