一、從面試題開始
- 什麼是微服務
- 微服務之間是如何通信的
- SpringCloud和Dubbo有哪些區別
本質區別:服務之間的通信機制的不同,Dubbo是基於RPC,springcloud是基於http的restful API。 - springboot和SpringCloud,請你談談對他們的理解
- 什麼是服務熔斷?什麼是服務降級?
- 微服務的優缺點分別是什麼?說一下你在項目開發中碰到的坑
- 你所知道的微服務棧有哪些?列舉一二
- Eureka和Zookeeper都可以提供服務註冊與發現的功能,請說說這兩個的區別?
二、微服務概述
(1)微服務
簡單的來說,就是將一個系統的不同模塊轉變成不同的服務,每一個服務
只負責一件事。微服務強調的是一個個的個體,每一個個體完成一個具體的
任務或功能,專業的事交給專業的模塊來做,一個模塊就做一件事情。比如
說一個電子商務系統,訂單模塊只負責訂單,登陸模塊只負責登陸,這每一
個模塊就是一個微服務。
(2)微服務架構
是一種架構模式,是soa架構的最終產物,微服務架構一定是分佈式架構。一個大型複雜的軟件
應用系統應該由一個或多個微服務組成,服務之間通過一些輕量級交互機制
來通信,比如http。系統中的各個微服務可被獨立部署,都有自己獨立的進
程,各個微服務之間是松耦合的,可以有自己的數據庫,而且服務可以使用
不同的技術加以實現。可以不因爲某個模塊的升級和bug影響現有的系統業
務。
(3) 微服務的優缺點
1.單體架構
單體架構另一種架構風格,比較原始的架構。將所有功能都部署在一個web
容器中運行的系統。項目打包後,所有服務都在同一個war包中,部署在一
個web容器中,共用一個數據庫。
2.單體架構和微服務比較
(1)單體架構
優點:
1.容易測試
2.容易部署
缺點:
1.開發效率低
2.代碼維護難
3.部署不靈活
4.穩定性不高
5.擴展性不夠
(2)微服務
優點:
1.單一職責,邏輯清晰:每個服務即一個業務模塊,邏輯清晰,讓人容
易理解
2.簡化部署:修改了某個服務的代碼,無需整個系統重新構建部署,
只需要獨構建部署某個
3.靈活擴展:某部分業務請求壓力大,則可通過擴展某塊服務,因此
具有更好的擴展性
4.技術異構:因爲微服務間松耦合,不同的微服務可以選擇不同的
技術棧進行開發。同時,在應用新技術時,可以僅針對一個微服務
進行快速改造,而不會影響系統中的其它微服務,有利於系統的演進。
5.高可靠:微服務間獨立部署,一個微服務的異常不會導致其它微
服務同時異常
缺點:
1.複雜度高:開發人員要處理分佈式系統的複雜性
2.運維複雜:系統由多個獨立運行的微服務構成,需要一個設計良
好的監控系統對各個微服務的運行狀態進行監控。運維人員需要對
系統有細緻的瞭解纔對夠更好的運維繫統
3.無法避免的重複工作:少部分共用功能無法提取成微服務時,各
個微服務對於這部分功能通常需要重複開發,或至少要做代碼
複製,以避免微服務間的耦合,增加了開發成本。
4.影響性能:由於服務拆分開來,部署到不同的平臺或網絡,可能
會引起微服務間的調用延遲問題,服務間的調用延遲可能帶來整體
系統的響應緩慢問題,服務間通信成本。
(4)應用場景
單體架構和微服務架構各有各的有優缺點,使用哪種架構,還需根據具體項
目背景及需求決定
其中,在以下幾點中的,不適合使用微服務:
1.開發週期長,迭代穩定:若舊項目比較穩定,不考慮使用微服務,成本太高
2.併發量低,可用性要求不高:一些用戶量低的內部系統,比如OA系統
3.複雜度較小:使用微服務就是殺雞用牛刀
(5)微服務技術棧
微服務條目 | 落地技術 |
---|---|
服務開發 | SpringBoot、Spring、SpringMVC |
服務配置與管理 | Netflix公司的Archaius、阿里的Diamond等 |
服務註冊與發現 | Eureka、Consul、Zookeeper等 |
服務調用 | Rest、RPC、gRPC |
服務熔斷器 | Hystric、Envoy等 |
負載均衡 | Ribbon、Nginx等 |
服務接口調用(客戶端調用服務的簡化根據) | Fegin等 |
消息隊列 | Kafka、RabbitMQ、ActiveMQ等 |
服務配置中心管理 | SpringCloudConfig、Chef等 |
服務路由(API網關) | Zuul等 |
服務監控 | Zabbix、Nagios、Metrics、Spector等 |
全鏈路跟蹤 | Zipkin、Brave、Dapper等 |
服務部署 | Docker、OpenStack、Kubernetes等 |
數據流操作開發包 | SpringCloud Stream(封裝與Redis,Rabbit,kafka等發送接收消息) |
事件消息總線 | Spring Cloud Bus |
… | … |
(6)微服務框架
1.當前各大IT公司用的服務框架有哪些
- 阿里Dubbo/HSF
- 京東JSP
- 新浪微博Motan
- 噹噹網Dubbox
2.各種微服務框架對比
三、分佈式相關知識
1.分佈式
(1) 一個業務拆分多個子業務,部署到不同的服務器上。也就是將一個大
的系統劃分爲多個業務模塊,多個業務模塊分別部署到不同的服務器上,
各個業務模塊之間通過接口進行數據交互。以縮短單個任務的執行時間
來提升效率,保證服務的高性能。
(2)分佈式需要做好分佈式事務管理。
(3)分佈式存在兩個問題:任務分解(鯉魚模型)和節點通信(通過RPC
框架或消息通信件解決)
2.集羣
(1)將同一個業務,部署到多個服務器上。就是在集羣模式裏,不同服務器
部署、同一個業務,實現服務的負載均衡。通過單位時間內執行的任務數來
提升效率,保證服務的高可用。
(2)集羣需要做好session共享。一般配置nginx的負載均衡容器實現,靜
態資源緩存session共享可以附帶實現,Nginx支持5000個併發量。
(3)負載均衡器是集羣的解決方案之一,是通過添加服務器達到解決高併發
的問題
3.負載均衡
指在集羣中,將多個數據請求分散在不同單元上進行執行,主要爲了提高系統容錯能力和加強系統對數據的處理能力。
(1)當一臺服務器的性能達極限時,我們可以使用服務器集羣來提高網站的整體性
能。那麼,在服務器集羣中,需要一臺服務器充當調度者的角色,用戶所有請
求都會首先由它接收,調度者再根據每臺服務器的負載情況將請求分配給某一
臺服務器去處理
(2)常用的負載均衡器有Nginx,LVS和HAProxy
有興趣的小夥伴,可以繼續閱讀小編下一篇博客
IntelliJ idea從零開始搭建微服務spring cloud框架
微服務概述
一篇對SpringCloud的介紹
SpringCloud核心組件詳述
一篇對MySQL語句執行順序的介紹
喜歡Java的,歡迎加入少年與java交流羣5號,羣聊號碼:106643434
對SpringCloud有興趣的,關注一下小編的博客,隨後更新