http://www.importnew.com/17588.htmlhtml
什麼是微服務(概念)java
單體->SOA->微服務web
單體->一個WAR包算法
優先:數據庫
開發簡單直接,集中式管理api
基本不會重複開發緩存
功能都在本地,沒有分佈式管理的開銷和調用通訊開銷安全
缺點:服務器
開發效率低:全部開發都在一個項目上改代碼,代碼衝突websocket
代碼維護難:代碼功能很容易耦合在一塊兒,新人不知從何下手
部署不靈活:構建不靈活,必須從新構建整個項目,時間長
穩定性不高:一個小問題可能搞掛整改應用
擴展性不夠:沒法知足高併發,新增功能必須從新構建、部署整改應用
沒有去中心化,基於模塊化的應用拆分,應用的交互依賴服務總線、
中間件服務器好比數據庫、ETCD等獨立的中間件進程爲集羣式部署、且服務端的信息相互共享不隔離。
真正分佈式的,去中心化的SOA,服務之間的不實例相互隔離,好比ETCD、數據庫實例是相互隔離的。把服務內的邏輯封裝在本身內部,把路由、消息解析放在服務內部,服務間輕量級通訊(HTTP、跨進程的Global RPC)。
簡單來講,微服務的目的是有效拆分應用,實現敏捷開發和部署。
1. 一些列的獨立的服務共同組成系統
2. 單獨部署,跑在本身的進程裏
3. 每一個服務爲獨立的業務開發
4. 分佈式的管理
APIGateway:
提供統一的服務入口,讓服務對前臺透明
聚合後臺的服務,節省流量,提高性能
提供安全、過濾、流控等管理功能
同步調用(REST、RPC),咱們如今REST也支持異步調用。實現簡單、兼容性好
異步消息調用(Kafka,RMQ),消息有緩存、通訊上來講存在弱一致
註冊中心(etcd或者zk作服務信息的分佈式管理),服務可在本地作緩存,服務變動通知客戶端。
提供尋址算法(負載均衡)
客戶端作:架構簡單,擴展靈活,只對註冊中心依賴。大公司
服務端作:優化是簡單,全部服務對於前臺調用方透明。小公司。
雪崩、調用鏈太長一個掛了 致使服務整個調用鏈不可用。
手段:
重試機制
限流
熔斷機制
負載均衡
降級(本地緩存)
API Gateway
服務間調用
服務發現
服務容錯
服務部署
數據調用
優缺點:
優勢
開發簡單
技術棧靈活
服務獨立無依賴
獨立按需擴展
可用性高
缺點
多服務運維難度
系統部署依賴
服務間通訊成本
數據一致性
系統集成測試
重複工做
性能監控
提供最精簡的karaf容器底座
提供微服務打包的開發模板
提供微服務的restful通訊開發模板
提供進程間通訊(restful、rpc)的調用框架
服務自動發現,註冊,上下線更新
關聯技術:websocket
服務性能(本地緩存優化)
1)註冊時創建服務的依賴關係,以及class訪問時與path的對應關係,path與實例的映射,實例自動緩存在本地,這樣class訪問時自動映射到實例地址
2)服務實例變動通知,採用disruptor框架將消息廣播出去,便於其餘業務獲取服務信息
關聯技術:緩存方式設計、disruptor框架
服務路由的負載均衡
用戶自由擴展路由策略
關聯技術:反射
服務可靠性
註冊中心容錯、服務的容錯熔斷
服務間通訊
1)流程:
Swagger生成開發模板->
請求方式從restful調用轉換爲API調用->
反射獲取服務的API實例->
框架將API註解掃描,並解析出註解上的Path加入本地緩存->
調用API的方法,找到請求的方法對應的Path->
而後經過path和class信息找到實例地址->
而後調用轉換爲HTTP請求發送過去。
關聯技術:反射
2)通訊方式(REST、RPC)
關聯技術:同步REST、異步REST(jetty client、jetty server)
3)序列化反序列化
關聯技術:fastxml.jackson 不一樣序列化框架的性能對比,工做原理,爲何快?
最終一致性
事件通知型(可靠事件通知型(同步事件、異步事件)、最大努力通知模式)
補償型(TCC模式、業務補償)
Jetty架構
Jetty的原理
Jetty熱加載等其餘特性
關聯技術:java NIO機制、HTTP1.1/HTTP2協議、servlet機制
原理
序列化反序列化
關聯技術:servlet機制、javax-ws-rs協議、反射、序列化框架
註冊原理
優化
Servlet規範和原理
關聯技術:servlet機制、osgi機制、jetty api使用
上報流程
上報優化(報文合併分批上報)
關聯技術:kafka、優化思路
Jetty httpclient 異步
Jetty server 異步
Jersey異步
Jetty對HTTP2協議實現