穀粒商城學習筆記,第一天 分布式概述與商城架構

2022-09-12 04:09:08 字數 3983 閱讀 7697

1、微服務

拒絕大型單體應用,基於業務邊界進行服務微化拆分,各個服務獨立部署執行
2、集群、分布式、節點

##集群

是一種物理形態

將幾台伺服器集中在一起,實現同一業務

##分布式

是一種工作方式

若干獨立計算機的集合,這些計算機對於使用者來說就像單個相關系統

將不同的業務分布在不同的地方

##節點

集群中的乙個伺服器

3、遠端呼叫

分布式系統中,各個服務可能處於不同主機,但是服務之間不可避免的需要互相呼叫,我們稱為遠端呼叫。

springcloud中使用http+json的方式完成遠端呼叫。

4、負載均衡

a服務呼叫b服務,b服務部署在多台機器,a傳送請求到任意乙個伺服器均可完成呼叫。

為了使每台伺服器不至於忙於處理請求,可以將請求均衡到每乙個伺服器,提公升**的可用性。

##常用負載均衡:

輪詢:請求依次按順序分發到不同的可用伺服器執行,迴圈分發請求。

最小連線:分發請求到連線數最少的伺服器。場景:處理請求用時較長的場景。

5、註冊中心:服務註冊&發現

a服務呼叫b服務、c服務,但是a服務不知道b、c服務所在的伺服器是正常還是掉線,註冊中心可以幫助解決。

註冊中心實時知道哪些服務正常,哪些服務下線,也能記錄新增的正常服務。

服務之間呼叫不需要去判斷哪些服務正常,註冊中心會告訴服務有效的呼叫位址。

##概念

服務註冊:服務將自己的ip和埠報告給註冊中心的過程。

服務檢查:檢查已註冊的服務,如發現某服務長時間無法訪問,則會從註冊中心移除該服務。

6、配置中心

每個服務都有大量配置,更新乙個配置,需要同步到每個服務,如何修改每個服務的配置呢?

每個服務從配置中心獲取配置,自動更新自己的配置。

7、服務熔斷&降級

場景:使用者下單了乙個商品,客戶端呼叫訂單服務來生成預付款訂單,訂單服務呼叫商品服務檢視下單的哪款商品,商品服務呼叫庫存服務判斷這款商品是否有庫存,如有庫存,則可以生成預付款訂單。

##服務雪崩service **alanche:

假設服務存在如上呼叫,"訂單服務"流量波動很大,流量經常會突然性增加!那麼在這種情況下,就算"訂單服務"能扛得住

請求,"商品服務"和"庫存服務"未必能扛得住這突發的請求。

此時,如果"庫存服務"因為抗不住請求,變得不可用。那麼"商品服務"的請求也會阻塞,慢慢耗盡"商品服務"的執行緒資

源,"商品服務"就會變得不可用。緊接著,對"庫存服務"的呼叫就會占用越來越多的資源,進而引起系統崩潰。

如上,乙個服務失敗,導致整條鏈路的服務都失敗的情形,我們稱之為服務雪崩。

##服務熔斷

設定服務的超時,當被呼叫的服務某段時間內失敗率達到某個閾值,則對該服務開啟短路保護,

後來的請求不呼叫這個服務,直接返回預設的資料。

##服務降級

對非核心業務降級執行:某些服務不處理,或者簡單處理(拋異常、返回null、返回mock資料)

服務熔斷 與 服務降級 的區別

##服務熔斷

舉個例子解釋,生活中每家每戶都在用電,小明家的電線因為故障導致了小明家停電了。

而小李、小張家的電是正常使用的。電力公司沒有因為小明家有故障線路而停掉其他人家的電,

同時小明家沒有使用有故障的電路的電。這時即為熔斷。

熔斷的目的是當a服務模組中的某塊程式出現故障後為了不影響其他客戶端的請求而做出的及時回應。

服務熔斷是應對雪崩效應的一種微服務鏈路保護機制。

就像上面例子所說在高壓電路中,如果某個地方的電壓過高,熔斷器就會熔斷,對電路進行保護。

同樣,在微服務架構中,熔斷機制也是起著類似的作用。當呼叫鏈路的某個微服務不可用或者響應時間太長時,

會進行服務熔斷,不再有該節點微服務的呼叫,快速返回錯誤的響應資訊。

當檢測到該節點微服務呼叫響應正常後,恢復呼叫鏈路。

##服務降級

舉個例子解釋,我們去銀行排隊辦理業務,大部分的銀行分為普通視窗、特殊視窗(vip視窗,老年視窗)。

某一天銀行大廳排普通視窗的人巨多。這時特殊視窗貼出告示說某時刻之後再開放。那麼這時特殊視窗的工作

人員就可以空出來去幫其他視窗辦理業務,提高辦事效率,已達到解決普通視窗排隊的人過的目的。這時即為降級,

降級的目的是為了解決整體專案的壓力,而犧牲掉某一服務模組而採取的措施。

服務降級是指 當伺服器壓力劇增的情況下,根據實際業務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式

處理,從而釋放伺服器資源以保證核心業務正常運作或高效運作。說白了,就是盡可能的把系統資源讓給優先順序高的服務。

資源有限,而請求是無限的。如果在併發高峰期,不做服務降級處理,一方面肯定會影響整體服務的效能,

嚴重的話可能會導致宕機某些重要的服務不可用。

所以,一般在高峰期,為了保證核心功能服務的可用性,都要對某些服務降級處理。

比如當雙11活動時,把交易無關的服務統統降級,如檢視螞蟻深林,檢視歷史訂單等等。

##區別

觸發原因不太一樣,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮;

管理目標的層次不太一樣,熔斷其實是乙個框架級的處理,每個微服務都需要(無層級之分),

而降級一般需要對業務有層級之分(比如降級一般是從最外圍服務開始)

實現方式不太一樣,服務降級具有**侵入性(由控制器完成/或自動降級),熔斷一般稱為自我熔斷。

8、閘道器

api閘道器的出現的原因是微服務架構的出現,不同的微服務一般有不同的網路位址,而外部客戶端可能需要呼叫多個服務的接

口才能完成完成乙個業務需求,如果讓客戶端直接與各個微服務通訊,會出現以下的問題:

1、客戶端會多次請求不同的微服務,增加了客戶端的複雜性。

2、存在跨域請求,在一定場景下處理相對複製。

3、認證複雜,每個服務都需要獨立的認證。

4、難以重構,隨著專案的迭代。可能需要重新劃分微服務。如果客戶端與微服務直接通訊,那麼重構將會很複雜。

5、某些微服務可能使用了防火牆/瀏覽器不友好的協議,直接訪問會有一定的困難。

抽象了微服務中都需要的公共功能

提供了負載均衡、自動熔斷、灰度發布、統一認證、限流、日誌統計功能

effective C 學習筆記第一天

1.視c 為乙個語言聯邦 為了理解c 必須認識其主要的次語言。幸運的是總共只有四個 1 c 說到底c 仍是以c 為基礎。blocks,statements,preprocessor,built in data types,arrays,pointers 2 object oriented c 這部分...

rails 學習第一天筆記

在rails 專案中,從瀏覽器中發起乙個請求時,先到public 資料夾下檢查是否有index.html 檔案,有的話直接顯示。沒有的話在到config下的路由檔案 route.rb 中,根據路由規則執行相關操作。在rout.rb 檔案中定義了 root page welcome 表示訪問該項目的主...

HTML 學習筆記第一天

主要是通過菜鳥教程,剛剛開始寫的筆記,文筆較差望諒解 html 指的是超文字標記語言 hypertext markup language html 不是一種程式語言,而是一種標記語言 標記語言是一套標記標籤 markup tag html 使用標記標籤來描述網頁 html 文件包含了html 標籤及...