微服務 微服務架構 分佈式 集羣 負載均衡

一、從面試題開始

  1. 什麼是微服務
  2. 微服務之間是如何通信的
  3. SpringCloud和Dubbo有哪些區別
    本質區別:服務之間的通信機制的不同,Dubbo是基於RPC,springcloud是基於http的restful API。
  4. springboot和SpringCloud,請你談談對他們的理解
  5. 什麼是服務熔斷?什麼是服務降級?
  6. 微服務的優缺點分別是什麼?說一下你在項目開發中碰到的坑
  7. 你所知道的微服務棧有哪些?列舉一二
  8. 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有興趣的,關注一下小編的博客,隨後更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章