html
1) Martin Fowler論文對微服務的闡述(中文版)ios
2) 對單一應用進行拆分spring
3) 每個獨立的應用都有一個獨立的進程數據庫
4) 擁有本身獨立的數據庫springboot
5) 微服務化的核心就是講傳統的一站式應用,根據業務拆分紅一個一個的服務,完全地去耦合,每個微服務提供單個業務功能的服務,一個服務處理一件事,從技術角度就是一種小而獨立的處理過程,相似進程的概念,可以自行單獨啓動或銷燬,擁有本身的數據庫。架構
二.微服務與微服務架構app
2.1 微服務架構負載均衡
1) 相似於eclipse工具裏面用maven開發的一個個獨立的module,具體是使用springboot開發的一個小模塊,一個模塊就作一件功能。框架
2) 強調是總體,每個個體完成一個具體的任務或者功能,把一個個的個體拼接起來,組成一個總體並對外暴露服務。運維
3) 微服務架構是一種架構模式,它提倡將單一的應用程序劃分紅一組小的服務,服務之間互相協調、互相配合,爲用戶提供最終價值。每一個服務運行在其獨立的進程中,服務與服務間採用輕量級的通訊機制互相協做(一般是基於HTTP協議的RESTful API)。每一個服務都圍繞着具體業務進行構建,而且可以被獨立的部署到生產環境、類生產環境等。另外,應當儘可能避免統一的、集中式的服務管理機制。對具體的一個服務而言,應根據業務的上下文,選擇合適的語言、工具對其進行構建。
2.2 微服務
強調的是服務的大小,它關注的是某一個點,是具體解決某一個問題/提供落地對應服務的一個服務應用,狹義地看,能夠看作Eclipse裏面的一個個微服務工程或者Module。
注意,微服務、微服務架構、Spring Cloud是三種不一樣的概念,不要弄混淆。
三.微服務的優缺點
3.1 微服務的優勢
1) 每一個服務足夠內聚,足夠小,代碼容易理解這樣能聚焦一個指定的業務。單機版的應用因爲不少業務耦合在一塊兒,修改代碼時每每須要讀懂一整塊的業務功能,而微服務項目只須要了解其中一小塊,因爲項目足夠小而且都是獨立的,代碼更容易理解,也更容易維
2) 開發簡單,開發效率提升,精力集中,一個服務只作一件事。
3) 小團隊也能單獨開發,管理容易,管理成本下降。
4) 微服務是鬆耦合的,是有功能意義的服務,不管是在開發階段仍是在部署階段都是獨立的,這樣能夠防止某個項目出問題了其餘服務項目不會受到影響。
5) 微服務能使用不一樣語言開發。
6) 易於和第三方集成,微服務容許容易且靈活的方式集成自動部署,經過持續集成工具,例如Jenkins,Hudson,bamboo。
7) 微服務易於被一個開發人員理解,修改和維護,這樣小團隊可以更關注本身的工做成果。無需經過合做才能體現價值。
8) 微服務容許你利用融合最新技術。
9) 微服務只是業務邏輯代碼,不會和HTML,CSS或其餘界面組件混合。
10) 每一個微服務都有本身的存儲能力,能夠有本身的數據庫,也能夠有統一的數據庫。能夠靈活搭配,鏈接公共庫+鏈接獨立庫。
3.2 微服務的缺點
1) 開發人員須要處理分佈式系統的複雜性。
2) 多服務運維難度,隨着服務的增長,運維的壓力也在增大。
3) 系統部署依賴,一個模塊調不通有可能影響到其餘模塊的使用。
4) 服務間通訊成本變高。
5) 數據的一致性問題。
6) 系統集成測試變複雜。
7) 性能監控變困難。
四.微服務的技術棧有哪些
微服務技術棧是多種技術的集合體。
服務的配置與管理: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、RabbitMQ、Kafka等發送接收消息)
事件消息總棧:Spring Cloud Bus
五.分佈式框架的對比
總體解決方案和框架成熟度
社區熱度
可維護性
學習曲線
當前IT公司用的微服務架構有哪些?
阿里Dubbo/HSF
京東JSF
新浪微博Motan
噹噹網DubboX
結論:SpringCloud知足幾乎全部的微服務技術維度要求。