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