高并發(fā)(high currency):互聯(lián)網(wǎng)分布式系統(tǒng)結(jié)構(gòu)設(shè)計中必須考慮的因素之一猿推,指通過設(shè)計保證系統(tǒng)能夠同時并發(fā)處理很多請求。在某個時間點藕咏,有多少個訪問同時到來具垫。
一、常用指標(biāo):
響應(yīng)時間筝蚕、吞吐量铺坞、每秒查詢量QPS(query per seconde)济榨,并發(fā)用戶數(shù)等
【響應(yīng)時間:系統(tǒng)對請求做出響應(yīng)的時間(如系統(tǒng)處理一個http請求需要200ms绿映,就是響應(yīng)時間)
QPS:每秒響應(yīng)請求數(shù)
并發(fā)用戶數(shù):同時承載正常使用系統(tǒng)功能的用戶數(shù)量。(如一個即時通訊系統(tǒng)叉弦,同時在線量也代表了系統(tǒng)的并發(fā)用戶數(shù))】
二、提高系統(tǒng)并發(fā)能力的方式:垂直擴(kuò)展和水平擴(kuò)展
垂直擴(kuò)展:提升單機(jī)處理能力库车。
又分為兩種:(1)增強(qiáng)單機(jī)硬件性能(例如:增加CPU核數(shù)如32核樱拴,升級更好的網(wǎng)卡如萬兆,升級更好的硬盤如SSD珍坊,擴(kuò)充硬盤容量如2T正罢,擴(kuò)充系統(tǒng)內(nèi)存如128G;)
(2)提升單機(jī)架構(gòu)性能袱饭,例如:使用Cache來減少IO次數(shù)呛占,使用異步來增加單服務(wù)吞吐量,使用無鎖數(shù)據(jù)結(jié)構(gòu)來減少響應(yīng)時間晾虑;
水平擴(kuò)展:增加服務(wù)器數(shù)量帜篇,可線性擴(kuò)充系統(tǒng)性能。
三笙隙、其他
1、處理高并發(fā)的業(yè)務(wù)邏輯是:
前端:異步請求+資源靜態(tài)化+cdn
后端:請求隊列+輪詢分發(fā)+負(fù)載均衡+共享緩存
數(shù)據(jù)層:redis緩存+數(shù)據(jù)分表+寫隊列
存儲:raid陣列+熱備
網(wǎng)絡(luò):dns輪詢+DDOS攻擊防護(hù)
2签钩、學(xué)習(xí)高并發(fā)的工具:redis、nginx/Tengine憎夷、keeplive昧旨、DRBD、heartbeat在虛擬機(jī)上跑
一兔沃、分布式:工作方式粘拾。 即一個業(yè)務(wù)拆分為多個子業(yè)務(wù),部署在不同的服務(wù)器上缰雇。
最簡單的分布式就是大家最常用的追驴,在負(fù)載均衡服務(wù)器后加一堆web服務(wù)器殿雪,然后在上面搞一個緩存服務(wù)器來保存臨時狀態(tài),后面共享一個數(shù)據(jù)庫丙曙,其實很多號稱分布式專家的人也就停留于此,大致結(jié)構(gòu)如下圖所示:
分布式的每一個節(jié)點扯旷,都可以用來做集群索抓。而集群不一定就是分布式了。
二耸黑、集群:物理形態(tài)篮幢。即同一個業(yè)務(wù),部署在多個服務(wù)器上缺菌,可以視為一臺計算機(jī)。
1另患、多臺服務(wù)器組成的一組計算機(jī)蛾绎,作為一個整體存在,向用戶提供一組網(wǎng)絡(luò)資源租冠,這些單個的服務(wù)器就是集群的節(jié)點。
2纤泵、兩個特點:
可擴(kuò)展性:集群中的服務(wù)節(jié)點镜粤,可以動態(tài)的添加機(jī)器,從而增加集群的處理能力公荧。
高可用性:如果集群某個節(jié)點發(fā)生故障同规,這臺節(jié)點上面運行的服務(wù),可以被其他服務(wù)節(jié)點接管绪钥,從而增強(qiáng)集群的高可用性关炼。
3、常用的集群分類
1.高可用集群(High Availability Cluster)
高可用集群,普通兩節(jié)點雙機(jī)熱備跪楞,多節(jié)點HA集群侣灶。
2.負(fù)載均衡集群(Load Balance Cluster)
常用的有 Nginx 把請求分發(fā)給后端的不同web服務(wù)器,還有就是數(shù)據(jù)庫集群褥影,負(fù)載均衡就是,為了保證服務(wù)器的高可用校焦,高并發(fā)。
3.科學(xué)計算集群(High Performance Computing Cluster)
簡稱HPC集群氛雪。這類集群致力于提供單個計算機(jī)所不能提供的強(qiáng)大的計算能力耸成。
4、兩大能力
負(fù)載均衡:負(fù)載均衡能把任務(wù)比較均衡地分布到集群環(huán)境下的計算和網(wǎng)絡(luò)資源弦追。
集群容錯:當(dāng)我們的系統(tǒng)中用到集群環(huán)境,因為各種原因在集群調(diào)用失敗時花竞,集群容錯起到關(guān)鍵性的作用。
三零远、云計算平臺:一個云計算平臺厌蔽,就是通過一套軟件系統(tǒng)把分布式部署的資源集中調(diào)度使用。要應(yīng)對大并發(fā),要實現(xiàn)高可用供填,既需要分布式,也離不開集群叉瘩。
四粘捎、分布式運用場景:分布式系統(tǒng)有很多種,比如分布式文件系統(tǒng)泳桦,分布式數(shù)據(jù)庫娩缰,分布式WebService,分布式計算等等浮毯,場景不同,運用的分布式思路也不同债蓝。
分布式架構(gòu)的思路主要是:水平擴(kuò)展和垂直擴(kuò)展
1饰迹、水平擴(kuò)展(完全平分)
舉例子:假設(shè)我們有一臺服務(wù)器,它可以承擔(dān)1百萬/秒的請求蹦锋,這個請求可以的是通過http訪問網(wǎng)頁莉掂,通過tcp下載文件,jdbc執(zhí)行sql憎妙,RPC調(diào)用接口…厘唾,現(xiàn)在我們有一條數(shù)據(jù)的請求是2百萬/秒,很顯然服務(wù)器hold不住了抚垃,會各種拒絕訪問,甚至崩潰铣焊,宕機(jī)罕伯,怎么辦呢。
一臺機(jī)器解決不了的問題坟募,那就兩臺邑狸。所以我們加一臺機(jī)器,每臺承擔(dān)1百萬昂利。如果請求繼續(xù)增加呢,兩臺解決不了的問題蜂奸,那就三臺唄扩所。
這種方式我們稱之為水平擴(kuò)展。如何實現(xiàn)請求的平均分配便是負(fù)載均衡了助赞。
2袁勺、垂直擴(kuò)展:(按功能分)
另一個栗子,我們現(xiàn)在有兩個數(shù)據(jù)請求群叶,數(shù)據(jù)1請求90萬钝荡,數(shù)據(jù)2請求80萬,上面那臺機(jī)器也hold不住埠通,我們加一臺機(jī)器來負(fù)載均衡一下端辱,每臺機(jī)器處理45萬數(shù)據(jù)1和40萬數(shù)據(jù)2,但是平分太麻煩舞蔽,不如一臺處理數(shù)據(jù)1喷鸽,一臺處理數(shù)據(jù)2灸拍,同樣能解決問題,這種方式我們稱之為垂直拆分混槐。
五轩性、分布式技術(shù):
1.分布式系統(tǒng)的架構(gòu)體系
基于對象的體系機(jī)構(gòu)
面向服務(wù)的架構(gòu)(SOA)
REST風(fēng)格的架構(gòu)
微服務(wù)架構(gòu)(MSA)
容器技術(shù)
Serverless架構(gòu)
2.分布式消息服務(wù)
Apache ActiveMQ
? ? ? RabbitMQ
RocketMQ
Apache Kafka
3.分布式計算
MapReduce
Apache Hadoop
Apache Spark
Apache Mesos
4.分布式存儲
Bigtable
Apache HBase
Apache Cassandra
Memcached
Redis
MongoDB
5.分布式監(jiān)控
Nagios
Zabbix
Consul
Zookeeper
6.分布式的版本控制
Bazaar
Mercurial
Git
7.RESTfulAPI、微服務(wù)及容器技術(shù)
Jersey
Spring boot
Docker
常用分布式互聯(lián)網(wǎng)系統(tǒng)悯嗓,使用較多的是zookeeper+dubbo組合,而Springboot推薦使用全棧Spring铅祸,就是Springboot+SpringCloud合武。
Cloud與Dubbo的區(qū)別稼跳,Dubbo解決的就是遠(yuǎn)程過程調(diào)用的RPC服務(wù),而Cloud更全面汤善,它有一整套的分布式需要的對應(yīng)的解決方案:配置管理、服務(wù)發(fā)現(xiàn)卸伞、熔斷锉屈、路由、微代理遂黍、控制總線俊嗽、一次性token绍豁、全局鎖、leader選舉竹揍、分布式session、集群狀態(tài)无拗。所以使用Cloud可以更快速的與云平臺進(jìn)行對接昧碉。
SpringCloud五大常用組件:
服務(wù)發(fā)現(xiàn)-Netflix Eureka
客服端負(fù)載均衡-Netflix Ribbon
斷路器-Netflix Hystrix
服務(wù)網(wǎng)關(guān)-Netflix Zuul
分布式配置-SpringCloudConfig