微服務的簡單介紹

1、單體應用的缺點

1)部署效率低下

2)協作開發成本高

3)系統高可用性能差

4)線上發佈變慢

2、微服務的簡單介紹

2.1)將一個單一應用程序,按照業務拆分呢爲一組小型服務.

2.2)每個服務只做一件事,每個服務運行在自己的進程中

2.3)服務之間通過輕量級的通信機制(httprestapi)

2.4)每個服務都能夠獨立的部署

2.5)每個服務甚至可以擁有自己的數據庫

2.6)微服務以及微服務架構的是二個完全不同的概念。微服務強調的是服務的大小和對外提供的單一功能,而微服務架構是指把一個一個的微服務組合管理起來,對外提供一套完整的服務

3、微服務的優點

①:每個服務足夠小,足夠內聚,代碼更加容易理解,專注一個業務功能點(對比傳統應用,可能改幾行代碼需要了解整個系統)

②:開發簡單,一個服務只幹一個事情。(加入你做支付服務,你只要瞭解支付相關代碼就可以了)

③:微服務能夠被2-5個人的小團隊開發,提高效率(你應該可以想象我們那時的狀況。如果一次上線超過五個人蔘與的話,就會經常出現各種問題:有的人忘記提交代碼、有的人忘記打包、有的人忘記修改工程依賴到最新版本。一次上線過程需要反覆確認,耗費了大量精力,嚴重影響了整體的開發和部署效率。)

④:服務松耦合,每個服務都能夠開發部署。

⑤:前後段分離,作爲java開發人員,我們只要關係後端接口的安全性以及性能,不要去關注頁面的人機交互(H5工程師)根據前後端接口協議,根據入參,返回json的回參

⑥:一個服務可用擁有自己的數據庫。也可以多個服務連接同一個數據庫

4、微服務的缺點

①:增加了運維人員的工作量,以前只要部署一個war包,現在可能需要部署成百上千個war包

②:服務之間相互調用,增加通信成本

③:數據一致性問題(分佈式事物問題)

④:系能監控等..

5、springcloud的技術論壇

http://springcloud.cn/

https://springcloud.cc/spring-cloud-dalston.html

6、CAP理論

**Consistency(一致性):**多節點數據數據一致

**   Availability(可用性):**用戶可以選擇向G1或G2發起讀操作。不管是哪臺服務器,只要收到請求,就必須告訴用戶,到底是v0還是v1,否則就不滿足可用性

**Partition tolerance(分區容錯性):**大多數分佈式系統都分佈在多個子網絡。每個子網絡就叫做一個區(partition)。分區容錯的意思是,區間通信可能失敗(由於網路原因)。比如,一臺服務器放在北京,另一臺服務器放在上海,這就是兩個區,它們之間由於網絡抖動原因導致不能通信

6.1、Consistency和Availability的矛盾一致性和可用性,爲什麼不可能同時成立?

答案很簡單,因爲可能通信失敗(即出現分區容錯),如果保證G2的一致性,那麼G1必須在寫操作時,鎖定G2的讀操作和寫操作。只有數據同步後,才能重新開放讀寫。鎖定期間,G2不能讀寫,沒有可用性不。如果保證G2的可用性,那麼勢必不能鎖定G2,所以一致性不成立。綜上所述,G2無法同時做到一致性和可用性。系統設計時只能選擇一個目標。如果追求一致性,那麼無法保證所有節點的可用性;如果追求所有節點的可用性,那就沒法做到一致性。

6.2、取捨策略
CAP三個特性只能滿足其中兩個,那麼取捨的策略就共有三種:

CA without P:如果不要求P(不允許分區),則C(強一致性)和A(可用性)是可以保證的。但如果如果在分佈式的架構下,P是避免不了的。

CP without A:如果不要求A(可用),相當於每個請求都需要在服務器之間保持強一致,而P(分區)會導致同步時間無限延長(也就是等待數據同步完才能正常訪問服務),一旦發生網絡故障或者消息丟失等情況,就要犧牲用戶的體驗,等待所有數據全部一致了之後再讓用戶訪問系統。設計成CP的系統其實不少,最典型的就是分佈式數據庫,如Redis、HBase等。對於這些分佈式數據庫來說,數據的一致性是最基本的要求,因爲如果連這個標準都達不到,那麼直接採用關係型數據庫就好,沒必要再浪費資源來部署分佈式數據庫。

AP wihtout C:要高可用並允許分區,則需放棄一致性。一旦分區發生,節點之間可能會失去聯繫,爲了高可用,每個節點只能用本地數據提供服務,而這樣會導致全局數據的不一致性。這其實就是先在 A(可用性)方面保證系統可以正常的服務,然後在數據的一致性方面做了些犧牲,雖然多少會影響一些用戶體驗,但也不至於造成用戶購物流程的嚴重阻塞。

6.3、總結
現如今,對於多數大型互聯網應用的場景,主機衆多、部署分散,而且現在的集羣規模越來越大,節點只會越來越多,所以節點故障、網絡故障是常態,因此分區容錯性也就成爲了一個分佈式系統必然要面對的問題。那麼就只能在C和A之間進行取捨。但對於傳統的項目就可能有所不同,拿銀行的轉賬系統來說,涉及到金錢的對於數據一致性不能做出一絲的讓步,C必須保證,出現網絡故障的話,寧可停止服務,可以在A和P之間做取捨。

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