高并發(high currency):互聯網分布式系統結構設計中必須考慮的因素之一,指通過設計保證系統能夠同時并發處理很多請求。在某個時間點,有多少個訪問同時到來。
一、常用指標:
響應時間、吞吐量、每秒查詢量QPS(query per seconde),并發用戶數等
【響應時間:系統對請求做出響應的時間(如系統處理一個http請求需要200ms,就是響應時間)
QPS:每秒響應請求數
并發用戶數:同時承載正常使用系統功能的用戶數量。(如一個即時通訊系統,同時在線量也代表了系統的并發用戶數)】
二、提高系統并發能力的方式:垂直擴展和水平擴展
垂直擴展:提升單機處理能力。
又分為兩種:(1)增強單機硬件性能(例如:增加CPU核數如32核,升級更好的網卡如萬兆,升級更好的硬盤如SSD,擴充硬盤容量如2T,擴充系統內存如128G;)
(2)提升單機架構性能,例如:使用Cache來減少IO次數,使用異步來增加單服務吞吐量,使用無鎖數據結構來減少響應時間;
水平擴展:增加服務器數量,可線性擴充系統性能。
三、其他
1、處理高并發的業務邏輯是:
前端:異步請求+資源靜態化+cdn
后端:請求隊列+輪詢分發+負載均衡+共享緩存
數據層:redis緩存+數據分表+寫隊列
存儲:raid陣列+熱備
網絡:dns輪詢+DDOS攻擊防護
2、學習高并發的工具:redis、nginx/Tengine、keeplive、DRBD、heartbeat在虛擬機上跑
一、分布式:工作方式。 即一個業務拆分為多個子業務,部署在不同的服務器上。
最簡單的分布式就是大家最常用的,在負載均衡服務器后加一堆web服務器,然后在上面搞一個緩存服務器來保存臨時狀態,后面共享一個數據庫,其實很多號稱分布式專家的人也就停留于此,大致結構如下圖所示:
分布式的每一個節點,都可以用來做集群。而集群不一定就是分布式了。
二、集群:物理形態。即同一個業務,部署在多個服務器上,可以視為一臺計算機。
1、多臺服務器組成的一組計算機,作為一個整體存在,向用戶提供一組網絡資源,這些單個的服務器就是集群的節點。
2、兩個特點:
可擴展性:集群中的服務節點,可以動態的添加機器,從而增加集群的處理能力。
高可用性:如果集群某個節點發生故障,這臺節點上面運行的服務,可以被其他服務節點接管,從而增強集群的高可用性。
3、常用的集群分類
1.高可用集群(High Availability Cluster)
高可用集群,普通兩節點雙機熱備,多節點HA集群。
2.負載均衡集群(Load Balance Cluster)
常用的有 Nginx 把請求分發給后端的不同web服務器,還有就是數據庫集群,負載均衡就是,為了保證服務器的高可用,高并發。
3.科學計算集群(High Performance Computing Cluster)
簡稱HPC集群。這類集群致力于提供單個計算機所不能提供的強大的計算能力。
4、兩大能力
負載均衡:負載均衡能把任務比較均衡地分布到集群環境下的計算和網絡資源。
集群容錯:當我們的系統中用到集群環境,因為各種原因在集群調用失敗時,集群容錯起到關鍵性的作用。
三、云計算平臺:一個云計算平臺,就是通過一套軟件系統把分布式部署的資源集中調度使用。要應對大并發,要實現高可用,既需要分布式,也離不開集群。
四、分布式運用場景:分布式系統有很多種,比如分布式文件系統,分布式數據庫,分布式WebService,分布式計算等等,場景不同,運用的分布式思路也不同。
分布式架構的思路主要是:水平擴展和垂直擴展
1、水平擴展(完全平分)
舉例子:假設我們有一臺服務器,它可以承擔1百萬/秒的請求,這個請求可以的是通過http訪問網頁,通過tcp下載文件,jdbc執行sql,RPC調用接口…,現在我們有一條數據的請求是2百萬/秒,很顯然服務器hold不住了,會各種拒絕訪問,甚至崩潰,宕機,怎么辦呢。
一臺機器解決不了的問題,那就兩臺。所以我們加一臺機器,每臺承擔1百萬。如果請求繼續增加呢,兩臺解決不了的問題,那就三臺唄。
這種方式我們稱之為水平擴展。如何實現請求的平均分配便是負載均衡了。
2、垂直擴展:(按功能分)
另一個栗子,我們現在有兩個數據請求,數據1請求90萬,數據2請求80萬,上面那臺機器也hold不住,我們加一臺機器來負載均衡一下,每臺機器處理45萬數據1和40萬數據2,但是平分太麻煩,不如一臺處理數據1,一臺處理數據2,同樣能解決問題,這種方式我們稱之為垂直拆分。
五、分布式技術:
1.分布式系統的架構體系
基于對象的體系機構
面向服務的架構(SOA)
REST風格的架構
微服務架構(MSA)
容器技術
Serverless架構
2.分布式消息服務
Apache ActiveMQ
? ? ? RabbitMQ
RocketMQ
Apache Kafka
3.分布式計算
MapReduce
Apache Hadoop
Apache Spark
Apache Mesos
4.分布式存儲
Bigtable
Apache HBase
Apache Cassandra
Memcached
Redis
MongoDB
5.分布式監控
Nagios
Zabbix
Consul
Zookeeper
6.分布式的版本控制
Bazaar
Mercurial
Git
7.RESTfulAPI、微服務及容器技術
Jersey
Spring boot
Docker
常用分布式互聯網系統,使用較多的是zookeeper+dubbo組合,而Springboot推薦使用全棧Spring,就是Springboot+SpringCloud。
Cloud與Dubbo的區別,Dubbo解決的就是遠程過程調用的RPC服務,而Cloud更全面,它有一整套的分布式需要的對應的解決方案:配置管理、服務發現、熔斷、路由、微代理、控制總線、一次性token、全局鎖、leader選舉、分布式session、集群狀態。所以使用Cloud可以更快速的與云平臺進行對接。
SpringCloud五大常用組件:
服務發現-Netflix Eureka
客服端負載均衡-Netflix Ribbon
斷路器-Netflix Hystrix
服務網關-Netflix Zuul
分布式配置-SpringCloudConfig