我們一起聊聊分布式與網(wǎng)絡(luò)原理
并發(fā)是怎么出現(xiàn)的
眾所周知,中國人口很多,人口資源相當(dāng)豐富,十幾億人口?,F(xiàn)如今的互聯(lián)網(wǎng)/移動互聯(lián)網(wǎng)發(fā)展的也很龐大,就因?yàn)槿硕?,在大家都在使用一個app的時候,就會造成擁堵的現(xiàn)象,就跟超市一樣,人多必然會擁擠,東西少,你需要搶購,你慢了一拍,就買不到,你遇到過早上大爺大媽搶著買雞蛋的場景吧?而且結(jié)賬速度也會比平時更慢,甚至還會出現(xiàn)限購的現(xiàn)象。這其實(shí)和互聯(lián)網(wǎng)環(huán)境中的高并發(fā)道理是一樣的。
相反,有些國家的人口基數(shù)本來就少,幾千萬吧,和我們沒法比,他們那邊的擁堵現(xiàn)象會好一些,但是畢竟人少。人多資源多,相應(yīng)的,我們這的大數(shù)據(jù)發(fā)展很快,人多了,用戶畫像分析啊,用戶行為分析啊,就更好做。人家國家就只有幾千萬,活躍用戶可能百來萬,大數(shù)據(jù)玩不溜。
人多人少有啥區(qū)別?消費(fèi)啊,一個國家人口那么多,那么資源開發(fā)就更多,如果有一定的手段,你可以撬動他們來消費(fèi),我一個電商平臺,做好運(yùn)營/營銷/推廣,吸引用戶多了,市場份額上來了,消費(fèi)就上來了。如果你一個電商在一個人口少的國家去推廣,市場就那么點(diǎn)大,消費(fèi)水平上不來呀,人多人少沒法比啊對吧~ 老鐵。所以,大家會很容易會聯(lián)想到什么?
- 明星結(jié)婚,微博癱瘓了
- 春運(yùn),12306 掛了,或者搶不到票
- 等等這些都是人多所出現(xiàn)的必然現(xiàn)象。
此外,我們還有一個叫做粉絲經(jīng)濟(jì),現(xiàn)如今,人人都是自媒體,只要你的流量大,粉絲多,你就能賺錢,就比如李佳琪啊羅胖呀,對吧。直播買東西就是推廣產(chǎn)品的一中手段,如此一來,就能撬動大家的購買欲望,向電商平臺輸送流量。
這個時候,直播間里的用戶會有一部分進(jìn)入到電商平臺購物。那么流量比例大概多少?一般來說都是28或者37原則,20%的用戶會進(jìn)來,甚至?xí)僖恍僭O(shè)有1000萬用戶,那么這個時候涌入的流量就是200萬,那你平臺能吃得消不?并發(fā)支撐夠不夠?有沒有負(fù)載均衡,高并發(fā)處理行不行,有沒有做高可用,這些都要考慮,并且也都和網(wǎng)絡(luò)相關(guān)。所以要支持用戶量,要想公司賺大錢,技術(shù)要和業(yè)務(wù)貼合,整體系統(tǒng)的并發(fā)與高可用以及穩(wěn)定性,都要保證。如果因?yàn)槟骋粋€短板效應(yīng)出現(xiàn)問題,那么用戶的流失會很慘重,對平臺與企業(yè)造成的影響是巨大的,除非是12306,用戶必須用,否則,用戶流量會分發(fā)的其他不同的渠道與電商平臺。
所以,由技術(shù)來拉動市場,來穩(wěn)定用戶的。并發(fā)場景無處不在,那么這整個過程其實(shí)也是貼分布式系統(tǒng)的架構(gòu)發(fā)展的。比如如下:
單體-->分布式-->集群高可用-->高并發(fā)-->微服務(wù)-->容器化。
分布式架構(gòu)演變
負(fù)載均衡
輪訓(xùn),加權(quán)輪訓(xùn),ip_hash(一致性哈希),url_hash,最小連接數(shù)
負(fù)載均衡分為7層負(fù)載和4層負(fù)載
OSI網(wǎng)絡(luò)模型原理
以上這些其實(shí)本質(zhì)上都是基于網(wǎng)絡(luò),有了網(wǎng)絡(luò)才能交互,網(wǎng)絡(luò)通信和我們的生活息息相關(guān)。那么說到網(wǎng)絡(luò)通信,咱們就得來聊一聊七層模型了,這個其實(shí)也是網(wǎng)絡(luò)基礎(chǔ),很多小伙伴們在接觸nginx以及集群啊啥的有點(diǎn)混亂,這其實(shí)本身就是比較偏網(wǎng)絡(luò)的,這邊我們就來一起聊一下。
人和人之間面對面對話溝通通過講話,打電話通過電話走電話線,那么如果這兩個人在計(jì)算機(jī)(或者手機(jī))屏幕的兩邊溝通,那么就是用戶A和計(jì)算機(jī)交互,然后計(jì)算機(jī)和用戶B交互,達(dá)到溝通的目的。其實(shí)不論是人機(jī)交互還是計(jì)算機(jī)之間(機(jī)機(jī))交互,那么都會有一個通信的過程。
通信就會涉及到計(jì)算機(jī)網(wǎng)絡(luò),和網(wǎng)絡(luò)相關(guān)。我記得在我大學(xué)那會這個就是必考知識點(diǎn)。這里就會涉及到OSI七層網(wǎng)絡(luò)模型。
圖片
什么是OSI,可以把它當(dāng)做是一種規(guī)范,計(jì)算機(jī)之間的通信,數(shù)據(jù)交互,要符合OSI標(biāo)準(zhǔn)才能夠把數(shù)據(jù)從一端發(fā)到另外一端,從而讓另外一個用戶看到,如此以來達(dá)到交互。而且分層了,那么每一層的目的就更加明確了,做什么事由自己那一層決定,就跟MVC一樣,各司其職,解耦。并且對于每一層的開發(fā)人員來講,更加專注了,不同的開發(fā)人員維護(hù)不同層面的東西,不會耦合在一起。所以,分層解耦無處不在,在開發(fā)的過程中也要多考慮。咱們先來簡單看一下:
圖片
- 應(yīng)用層(7層):如上圖,兩個用戶通過qq或者微信溝通,他們依賴于計(jì)算機(jī)或者智能手機(jī)。那么應(yīng)用軟件就是第一層,也就是應(yīng)用層這一層里的,這一層會規(guī)定http協(xié)議,數(shù)據(jù)格式等,供調(diào)用,只要是一些軟件應(yīng)用程序,他們都是基于應(yīng)用層的,也就是和人最直接溝通的一個媒介,也就是軟件,qq/微信/瀏覽器/idea/eclipse這些都是。
- 表示層(6層):協(xié)議啊,字符串的表示,加密
- 會話層(5層):session建立與保持,建立和管理應(yīng)用程序之間的通信
- 傳輸控制層(4層):如何建立連接,如何數(shù)據(jù)傳輸,數(shù)據(jù)處理傳輸OK還是失敗
- 網(wǎng)絡(luò)層(3層):數(shù)據(jù)路由,如何找到哪個節(jié)點(diǎn)去處理的,數(shù)據(jù)如何通信,怎么發(fā)的
- 數(shù)據(jù)鏈路層(2層):通信之間的協(xié)議是啥,怎么發(fā)出去
- 物理層(1層):物理傳輸設(shè)備,比如wifi,2g/3g/4g,網(wǎng)線等看得見摸得著的。
七層模型(協(xié)議)歸類合并
七層模型其實(shí)就是一些協(xié)議的定義和劃分,每一層所執(zhí)行的功能不同,對應(yīng)的協(xié)議也不同,而且我們可以把他們再進(jìn)行合并,如下圖,分成4層或5層或7層其實(shí)都行。
圖片
每一層的只能都是不同的,如下:
- 物理層:物理傳輸設(shè)備,比如wifi,2g/3g/4g,網(wǎng)線等看得見摸得著的。當(dāng)你和朋友微信聊天的時候,你用計(jì)算機(jī)插網(wǎng)線,你朋友用手機(jī)連接wifi,這些都是屬于物理層的。打電話也一樣,需要有電話線。
- 那么計(jì)算機(jī)之間的傳輸通過物理層,傳輸?shù)臅r候以什么形式傳輸呢?都是一些二進(jìn)制數(shù)據(jù),1010001001這樣的。
- 數(shù)據(jù)鏈路層:當(dāng)計(jì)算機(jī)接收到1010001這些二進(jìn)制的時候,這玩意本身很長,需要去進(jìn)行解析的,所以他們其實(shí)是可以通過8位一組來進(jìn)行劃分,每組都是8位的話那么就可以進(jìn)行數(shù)據(jù)運(yùn)算和處理。那么每組8位(或者16位/64位),這活誰干呢?它是由鏈路層來劃分的,物理層干不了,職能不夠。
- 鏈路層處理的規(guī)范協(xié)議為以太網(wǎng)協(xié)議,他是一個標(biāo)準(zhǔn),也是規(guī)范,因?yàn)樵缙诘臅r候很多公司都是對二進(jìn)制數(shù)據(jù)進(jìn)行不同的分組,能用,但是太亂了,為了更加規(guī)范,采用了以太網(wǎng)協(xié)議Ethernet。
- 計(jì)算機(jī)通信會發(fā)出數(shù)據(jù)包,數(shù)據(jù)包包含head和data兩個部分。
- head包含發(fā)送者,接受者以及數(shù)據(jù)類型(源mac地址,目標(biāo)mac地址)
- data包含數(shù)據(jù)包的具體內(nèi)容數(shù)據(jù)
- 和rest請求很像吧?: - )
- 數(shù)據(jù)發(fā)送的時候是head和data一起發(fā)的,有一定的長度限制,具體我忘了。如果太長了,會進(jìn)行分片發(fā)送,也就是切割,啥是分片,自己百度,之前講過很多了。
- 那么這個數(shù)據(jù)包其實(shí)和你平時打電話是一樣的道理,呼叫者是數(shù)據(jù)發(fā)送者,被叫者是數(shù)據(jù)接受者,談話內(nèi)容就是data數(shù)據(jù)包,對吧。
- 附帶一提,計(jì)算機(jī)里的地址,和每個人的手機(jī)號是一樣的,叫做mac地址,和你的網(wǎng)卡相關(guān)。
- 關(guān)于mac地址:之前提到了以太網(wǎng)協(xié)議Ethernet,這玩意也規(guī)定了要在互聯(lián)網(wǎng)上通信,必須得有一個mac地址,而mac地址存在于網(wǎng)卡,所以有了網(wǎng)卡才能上網(wǎng),每一個網(wǎng)卡對應(yīng)一個mac地址(知識點(diǎn)啊,這個我們在架構(gòu)師課程里的Keepalived以及LVS里說過,虛擬IP通過虛擬機(jī)里的網(wǎng)卡才能虛擬化出新的VIP),和你的手機(jī)卡也一樣,你要打電話,得買一個手機(jī)卡,每一個手機(jī)卡里有唯一的一個手機(jī)號碼,通過手機(jī)號碼才能進(jìn)行呼叫和被叫,ok吧。
- 所以,這一層的鏈路層,他就是主要來定義數(shù)據(jù)的格式化傳輸?shù)?,一端傳出去,另一端接受進(jìn)來分組解析。
- 網(wǎng)絡(luò)層:這一層其實(shí)定義了IP協(xié)議,他有一個網(wǎng)關(guān)的概念,說到網(wǎng)卡大家會想到什么?nginx?zuul?gateway?那么他們是不是都會處于某個計(jì)算機(jī)節(jié)點(diǎn)上?他們都會有一個ip,那么其實(shí)當(dāng)計(jì)算機(jī)數(shù)據(jù)發(fā)出去的時候,會經(jīng)過網(wǎng)關(guān),接受的時候,也會經(jīng)過網(wǎng)關(guān),相當(dāng)于他是一個中介,通俗點(diǎn)講,你打電話的時候,要通過運(yùn)營商吧,從電話呼出去,到接收通過,中間的過程由運(yùn)營商來幫你處理,這個時候的運(yùn)營商你可以認(rèn)為是一個網(wǎng)關(guān)(也是起到了數(shù)據(jù)路由的作用),他是存在于某一個地址的,也就是IP地址,那么每個區(qū)域都有不同的運(yùn)營商,不同的運(yùn)營商管著不同的歸屬地,那么你可以把區(qū)域(歸屬地)理解為局域網(wǎng),而手機(jī)就是每一個mac地址,同一個區(qū)域的局域網(wǎng)的ip都是一樣的,而手機(jī)號對應(yīng)的mac地址則不一樣,對吧??匆幌孪旅娴膱D來理解一下(加餐)
圖片
圖片
4. 傳輸層:建立端口與端口之間的通信。什么意思呢,就是說呢,我們可以通過ip與mac地址找到對應(yīng)的目標(biāo)計(jì)算機(jī)節(jié)點(diǎn),那么假設(shè)我們現(xiàn)在通過微信或者qq聊天,這個時候數(shù)據(jù)傳輸?shù)綄Ψ降挠?jì)算機(jī)了,那么對方的qq或者微信如何來接受你的數(shù)據(jù)呢?或者說如何把數(shù)據(jù)交給微信qq來展示給用戶?這個時候就有端口的概念了,每個應(yīng)用程序都會有一個端口,一個應(yīng)用程序要多開,那么端口號肯定不一樣,原理同tomcat。每個端口都會和網(wǎng)卡產(chǎn)生關(guān)聯(lián),我們在進(jìn)行計(jì)算機(jī)交互的時候都會攜帶端口,比如8080,如此一來,那么對應(yīng)的對方的應(yīng)用程序才會接受到數(shù)據(jù)并且展示。ok吧。
- 比如還是以打電話為例,很多時候光打電話沒用,對方?jīng)]人接聽,你需要再最后加上分機(jī)號,那么8080就比方說是分機(jī)號,可以打給人事,8088可以打給老板小蜜,那么端口就是這個意思。
- 傳輸層的協(xié)議為TCP何UDP,LVS屬于傳輸層,他是4層負(fù)載均衡。
5. 應(yīng)用層:應(yīng)用層+表示層+會話層可以共同定義為應(yīng)用層。用戶所使用的所有的應(yīng)用程序都是基于應(yīng)用層,就比如qq,微信,瀏覽器,idea,eclipse都是,這是電腦與人最直觀的交互。每個應(yīng)用程序都可以有自己的不同的數(shù)據(jù)格式,數(shù)據(jù)組成形式,那么應(yīng)用層就是規(guī)定了應(yīng)用程序的數(shù)據(jù)格式。比如qq/微信/郵箱/瀏覽器,這些應(yīng)用程序的數(shù)據(jù)傳輸?shù)臅r候,協(xié)議都是不同的,數(shù)據(jù)格式也都是不同的,協(xié)議的不同在表示層 進(jìn)行規(guī)范。會話層是建立在傳輸層之上的,和我們所說的session道理一致,用于維護(hù)兩點(diǎn)之間的通信的,也就是建立和管理應(yīng)用程序之間的通信,如果我電腦重啟了,再次打開軟件需要重新建立連接,也就是重新建立會話,OK吧。