# 第一章 微服務和SpringBoot
### 微服務架構
“微服務架構”這個術語最近幾年橫空出世,它以若干組可獨立部署的服務的方式進行軟件應用系統的設計。關于微服務架構的討論最早是一篇由Martin Fowler在2014寫的著名文章開始的。盡管這種架構風格在業界尚無精確的定義,但Martin Fowler還是給出了以下特征描述:
它是以開發一組小型服務的方式來開發一個獨立的應用系統的。其中每個小型服務都運行在自己的進程中,并經常采用HTTP資源API這樣輕量的機制來相互通信。這些服務圍繞業務功能進行構建,并能通過全自動的部署機制來進行獨立部署。這些微服務可以使用不同的語言來編寫,并且可以使用不同的數據存儲技術。對這些微服務我們僅做最低限度的集中管理。
說白了,微服務架構相比傳統架構的一個顯著特點就是去中心化,將之前的服務再細分,并配套相應的自動化基礎設施。
### SpringBoot
根據ThoughtWorks2016年最新的一次技術雷達顯示,SpringBoot微服務框架越來越得到業界的重視和應用。之前的Spring框架在Java語言的帶動下已經在企業開發中廣泛使用,如果Spring生態系統正像技術雷達中的顯示,走向微服務架構。那SpringBoot就是當下最好的選擇。
SpringBoot就是為微服務而誕生的,而且它提供了一個強大的一鍵式Spring的集成開發環境,能夠單獨進行一個Spring應用的開發,其中:
(1)集中式配置(application.properties)+注解,大大簡化了開發流程
(2)內嵌的Tomcat和Jetty容器,可直接打成jar包啟動,無需提供Java war包以及繁瑣的Web配置
(3)提供了Spring各個插件的基于Maven的pom模板配置,開箱即用,便利無比。
(4)可以在任何你想自動化配置的地方,實現可能
(5)提供更多的企業級開發特性,如何系統監控,健康診斷,權限控制
(6)無冗余代碼生成和XML強制配置
(7)提供支持強大的Restfult風格的編碼,非常簡潔
當然Spring Boot提供的功能,遠遠比上面的強大。 Spring boot集成了servlet容器,當我們在pom文件中增加spring-boot-starter-web的maven依賴時,不做任何web相關的配置便能提供web服務,這還得歸于Spring boot自動配置的功能(因為加了EnableAutoConfiguration的注解),幫我們創建了一堆默認的配置,以前在web.xml中配置,現在都可以通過spring bean的方式進行配置,由spring來進行生命周期的管理,大多數情況下,我們需要重載這些配置(例如修改服務的啟動端口,contextpath,filter,listener,servlet,session超時時間等)。