柚子快報(bào)邀請(qǐng)碼778899分享:服務(wù)架構(gòu)發(fā)展歷程
柚子快報(bào)邀請(qǐng)碼778899分享:服務(wù)架構(gòu)發(fā)展歷程
目錄
第一時(shí)期
第二時(shí)期
第三時(shí)期
第四時(shí)期
第一時(shí)期
1、分層開(kāi)發(fā)
2、MVC架構(gòu)
3、服務(wù)器分離部署
特點(diǎn):
1、MVC分層開(kāi)發(fā)(提高了維護(hù)性、解決了容錯(cuò)性問(wèn)題)
2、數(shù)據(jù)庫(kù)和項(xiàng)目分離部署
問(wèn)題:
隨著用戶(hù)訪問(wèn)量持續(xù)增加,單臺(tái)應(yīng)用服務(wù)器已無(wú)法滿(mǎn)足需求。(高并發(fā)問(wèn)題)
解決方案:
集群(集群方案解決)
會(huì)出現(xiàn)的如下問(wèn)題:
高并發(fā)、高可用、高性能
提高系統(tǒng)的并發(fā)能力:
集群操作:
集群:同一個(gè)業(yè)務(wù),部署在多個(gè)服務(wù)器上
特點(diǎn):
項(xiàng)目采用集群(多臺(tái)服務(wù)器部署)
解決:
支持高并發(fā)、支持高可用
問(wèn)題:
1、用戶(hù)的請(qǐng)求該往哪里進(jìn)行轉(zhuǎn)發(fā)?、
通過(guò)nginx提供一個(gè)統(tǒng)一的服務(wù)入口,并通過(guò)nginx的負(fù)載均衡轉(zhuǎn)發(fā)給服務(wù)器
2、Session如何共享?
通過(guò)Redis Cluster(Spring session+Redis)實(shí)現(xiàn)
問(wèn)題:
數(shù)據(jù)庫(kù)壓力變大
我們通過(guò)nginx+redis集群方案 支持高并發(fā)(應(yīng)用的性能進(jìn)行提升訪問(wèn)),但是數(shù)據(jù)庫(kù)的負(fù)載能力慢慢增加。
怎么提高數(shù)據(jù)庫(kù)層面的訪問(wèn)壓力?
解決方案;
1、讀寫(xiě)分離
主從數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步。master主要負(fù)責(zé)增刪改操作。slave負(fù)責(zé)讀(查詢(xún))操作
mysql本身就支持master-slave的功能(主從復(fù)制)。
使用搜索引擎緩解數(shù)據(jù)庫(kù)的訪問(wèn)壓力+能力
數(shù)據(jù)庫(kù)本身對(duì)大數(shù)據(jù)量查詢(xún)效率慢,對(duì)模糊查詢(xún)支持不是特別優(yōu)秀,像電商類(lèi)網(wǎng)站。搜索是非常核心的功能。(即使做了數(shù)據(jù)庫(kù)讀寫(xiě)分離),很多功能也不能有效解決(分析技術(shù)),針對(duì)該問(wèn)題,有必要引入全文檢索服務(wù)器功能。
目前市場(chǎng)上主流的搜索引擎技術(shù):
Solr
ElasticSerach (對(duì)實(shí)時(shí)的性能比solr好一點(diǎn))
whoosh(基于python的)
引入緩存機(jī)制減輕數(shù)據(jù)庫(kù)的訪問(wèn)壓力
隨著訪問(wèn)能量的持續(xù)增加,(數(shù)據(jù)庫(kù)的訪問(wèn)壓力持續(xù)增加,甚至無(wú)法滿(mǎn)足需求)。(雖然做了主從復(fù)制)。對(duì)于熱點(diǎn)數(shù)據(jù),如果每次都從數(shù)據(jù)庫(kù)中查詢(xún),數(shù)據(jù)庫(kù)無(wú)法應(yīng)對(duì),導(dǎo)致無(wú)法對(duì)外提供服務(wù)。
最佳解決方案:Redis
1、讀寫(xiě)性能非常好(基于內(nèi)存的 )
2、提供了豐富 的數(shù)據(jù)類(lèi)型。
3、原子性
數(shù)據(jù)庫(kù)的表進(jìn)行水平/垂直拆分
一張表中有1千條數(shù)據(jù),查詢(xún)效率很高
如果有100萬(wàn)條數(shù)據(jù),查詢(xún)性能很慢
單個(gè)表性能做提升。(垂直能力終歸有限)
表為主
垂直:
假設(shè)一張表里面 用戶(hù)表(有30個(gè)字段)
熱數(shù)據(jù)/冷數(shù)據(jù)
拆成兩個(gè)表
水平拆分:
按需求進(jìn)行拆分。
分庫(kù)分表:
采用第三方數(shù)據(jù)庫(kù)中間件:mycat sharding-jdbc drds(阿里巴巴)
當(dāng)前設(shè)計(jì)特點(diǎn):
通過(guò)設(shè)計(jì)保證高并發(fā)、高可用(不斷的對(duì)服務(wù)器進(jìn)行擴(kuò)容)
當(dāng)前很多公司用的這種架構(gòu)
問(wèn)題:
1、服務(wù)器價(jià)錢(qián)?服務(wù)器越多,成本越高【服務(wù)器維護(hù)、人工成本】大量的運(yùn)維工程師
2、可維護(hù)性差(一個(gè)服務(wù)器上的服務(wù)改動(dòng)了,其他服務(wù)器也要改動(dòng))
3、可擴(kuò)展性差(服務(wù)器)
4、協(xié)同開(kāi)發(fā)不方便(大家都去修改相同業(yè)務(wù)代碼,易發(fā)生代碼沖突問(wèn)題
5、單體架構(gòu)(隨著業(yè)務(wù)需求的不斷增加,應(yīng)用代碼會(huì)變得越來(lái)越多)導(dǎo)致服務(wù)器部署時(shí)占用的硬盤(pán)也大。
第二時(shí)期
垂直應(yīng)用架構(gòu)
當(dāng)訪問(wèn)量逐漸增大,單一應(yīng)用架構(gòu)機(jī)器帶來(lái)的加速度越來(lái)越小,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效率。此時(shí),用于加速前端頁(yè)面開(kāi)發(fā)的Web框架(MVC)是關(guān)鍵。
水平拆分:(橫著拆)
將一個(gè)大的應(yīng)用拆分成多個(gè)小應(yīng)用
解決問(wèn)題:
1、模塊復(fù)用
2、減少了服務(wù)器內(nèi)容部署變小
垂直拆分:(豎著拆)
按功能拆分 :
將一個(gè)大的應(yīng)用按照功能拆分成多個(gè)互不相干的小應(yīng)用。每個(gè)應(yīng)用都是獨(dú)立的WEB的應(yīng)用程序(分布式)
解決問(wèn)題:
1、維護(hù)性能(如果發(fā)生需求變更,只需要調(diào)整某個(gè)應(yīng)用模塊即可)
2、功能擴(kuò)展(隨著業(yè)務(wù)的不斷增加,只需要?jiǎng)?chuàng)建新的WEB程序即可)
3、協(xié)同開(kāi)發(fā)方便(不同的團(tuán)隊(duì)修改不同的代碼)
4、部署內(nèi)容大小(性能擴(kuò)展),如果哪臺(tái)訪問(wèn)量大,只需要對(duì)該服務(wù)多部署幾臺(tái)即可。
此時(shí),用于加速前端頁(yè)面開(kāi)發(fā)的web框架(MVC)是關(guān)鍵。
問(wèn)題:
1、客戶(hù)對(duì)頁(yè)面 的要求越來(lái)越高?(修改頻繁)需要重新部署后臺(tái)應(yīng)用程序?(每一個(gè)應(yīng)用從頭到尾都是完整的)。
2、隨著業(yè)務(wù)的需求不斷增增加,需要很多個(gè)互不相干應(yīng)用部署?這些應(yīng)用之間一定會(huì)需要業(yè)務(wù)交互?
第三時(shí)期
分布式服務(wù)架構(gòu):
當(dāng)垂直應(yīng)用越來(lái)越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使其那段應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)是關(guān)鍵。
分布式:將一個(gè)業(yè)務(wù)拆分成多個(gè)子業(yè)務(wù),部署在不同的服務(wù)器上。
1、客戶(hù)對(duì)頁(yè)面 的要求越來(lái)越高?(修改頻繁)(每一個(gè)應(yīng)用從頭到尾都是完整的)。
答:頁(yè)面+業(yè)務(wù)代碼(前后端分離)
2、隨著業(yè)務(wù)的需求不斷增增加,需要很多個(gè)互不相干應(yīng)用部署?這些應(yīng)用之間一定會(huì)需要業(yè)務(wù)交互?
架構(gòu)的改變一定會(huì)帶來(lái)一定的技術(shù)和新的問(wèn)題
問(wèn)題:
分布式事務(wù)、分布式鎖、分布式session、分布式日志
第四時(shí)期
流動(dòng)計(jì)算架構(gòu)
柚子快報(bào)邀請(qǐng)碼778899分享:服務(wù)架構(gòu)發(fā)展歷程
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。