要想學習微服務,首先須要知道什麼是微服務?爲何會有微服務?相信看完架構的發展史讀者就會明白html
如圖所示:將全部的模塊,全部內容(頁面、Dao、Service、Controller)所有寫入一個項目中,放在一個Tomcat容器中啓動適用於小型項目ios
優勢:開發速度快,能夠利用代碼生成工具快速的開發一個項目web
缺點:不易擴展,代碼耦合度高,且不容錯(當某部分出錯後整個服務就會中止運行)spring
既然原來單體架構中代碼耦合度高,不利於維護和運行,人們天然就想到將不一樣的內容分開。最簡單合理的方式就是將系統按照功能劃分紅不一樣的模塊,而後將各模塊獨立放入不一樣的Web容器中,這就造成了垂直架構數據庫
優勢:代碼耦合度下降,且不一樣模塊之間能夠獨立運行。一旦某個模塊壓力過大,能夠針對性的搭集羣服務器
缺點:模塊之間有可能不是那麼徹底獨立,致使實體類或者其餘層代碼不能複用,須要多出粘貼,不方便往後維護。若是直接經過HTTP調用又不是很合理。架構
分佈式架構顧名思義就是分散部署在不一樣的機器上的服務,一個服務可能負責幾個功能,是一種面向SOA架構的,服務之間也是經過rpc來交互或者是webservice來交互的架構。從開發的角度看就是Controller層(服務消費者)和Service層(服務提供者)分紅不一樣的項目,部署在不一樣的服務器上,經過RPC(遠程方法調用)來實現交互。阿里巴巴著名的Dubbo框架就是做爲分佈式架構的框架。通常推薦使用Zookeeper做爲服務的註冊中心,負責註冊和發現服務的提供者,並供服務的消費者消費app
單體架構和微服務的比較圖示:框架
微服務的核心就是將傳統的一站式應用,根據業務拆分紅一個個原子應用。完全地去耦合,一個服務只作一件事情,從技術角度講就是一個服務就是一個進程,能夠單獨啓動或銷燬,擁有獨立的數據庫。而且經過配置中心能夠方便的切換數據庫等。
優勢:
缺點:
微服務條目 | 落地技術 | 備註 |
---|---|---|
服務開發 | Springboot、Spring、SpringMVC | |
服務配置與管理 | Netflix公司的Archaius、阿里的Diamond等 | |
服務註冊與發現 | Eureka、Consul、Zookeeper等 | |
服務調用 | Rest、RPC、gRPC | |
服務熔斷器 | Hystrix、Envoy等 | |
負載均衡 | Ribbon、Nginx等 | |
服務接口調用(客戶端調用服務的簡化工具) | Feign等 | |
消息隊列 | Kafka、RabbitMQ、ActiveMQ等 | |
服務配置中心管理 | SpringCloudConfig、Chef等 | |
服務路由(API網關) | Zuul等 | |
服務監控 | Zabbix、Nagios、Metrics、Spectator等 | |
全鏈路追蹤 | Zipkin,Brave、Dapper等 | |
服務部署 | Docker、OpenStack、Kubernetes等 | |
數據流操做開發包 | SpringCloud Stream(封裝與Redis,Rabbit、Kafka等發送接收消息) | |
事件消息總線 | Spring Cloud Bus |
Spring Cloud 是實現微服務思想落地開發的一整套技術的集合
Spring Cloud開發者文檔中文版:
https://springcloud.cc/spring-cloud-dalston.html
Spring Cloud中國社區
Spring Cloud中文網