欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何做一個(gè)和滴滴打車一樣的高并發(fā)互聯(lián)網(wǎng)架構(gòu)?

其實(shí)互聯(lián)網(wǎng)的高并發(fā)架構(gòu)解決方案很多,而且大多都存在很多共同的地方,我們常常用秒殺來(lái)作為高并發(fā)設(shè)計(jì)的案例,因?yàn)槊霘⒌膯吸c(diǎn)時(shí)間內(nèi)的請(qǐng)求量是非常高的。如果我們把場(chǎng)景換成滴滴打車的話,其實(shí)也有很多共通的部分。

現(xiàn)在我們就來(lái)簡(jiǎn)單的分析一下滴滴打車的架構(gòu)可能是怎么設(shè)計(jì)的吧

我們先看看一個(gè)打車的場(chǎng)景,都會(huì)經(jīng)過(guò)多少流程吧。

當(dāng)我們需要打車的時(shí)候,我們打開APP,選擇自己想要的車輛類型,然后發(fā)起請(qǐng)求。這時(shí)我們的請(qǐng)求進(jìn)入到應(yīng)用服務(wù)器,應(yīng)用服務(wù)器進(jìn)行處理以后,按照一定的算法,找到最近的空閑的車輛,然后指派車輛,如果沒(méi)有找到合適的車輛,就會(huì)進(jìn)入等待狀態(tài)。當(dāng)找到合適的車輛時(shí),將我們的所在地推送給司機(jī),然后把司機(jī)的相關(guān)數(shù)據(jù)返回給我們的APP。

那么,在這個(gè)過(guò)程中,就會(huì)遇到幾個(gè)問(wèn)題,如果打車的人太多怎么辦?如果同時(shí)存在的車輛非常多,怎么來(lái)找到合適的車?

1.我們先來(lái)解決打車的人多的問(wèn)題

當(dāng)打車的人非常多的時(shí)候,例如:早晚高峰,這時(shí)我們要保證每個(gè)用戶的打車請(qǐng)求都要接收,并且順序的執(zhí)行。這里,我們就需要用到隊(duì)列和緩存,隊(duì)列用來(lái)保證消息的安全和順序執(zhí)行,緩存用來(lái)緩解用戶請(qǐng)求對(duì)于服務(wù)器的壓力并給用戶展示結(jié)果。

當(dāng)用戶向滴滴發(fā)起一個(gè)打車請(qǐng)求的時(shí)候,我們先生成一個(gè)訂單號(hào),然后就把這個(gè)請(qǐng)求丟到隊(duì)列中去并把訂單號(hào)結(jié)果返回給用戶,并從緩存中取出當(dāng)前的等待人數(shù)返回給用戶。

這時(shí),用戶的這個(gè)請(qǐng)求并不會(huì)直接的接觸到數(shù)據(jù)庫(kù),訂單其實(shí)是在隊(duì)列里,可能1-2秒鐘以后才創(chuàng)建的,但是沒(méi)關(guān)系,用戶并不知道,用戶已經(jīng)以為自己早就開始等待了。當(dāng)隊(duì)列執(zhí)行成功后,訂單創(chuàng)建了,一個(gè)算法程序就開始進(jìn)行車輛的匹配。

按照先進(jìn)先出的規(guī)則,一個(gè)一個(gè)的匹配,并且根據(jù)結(jié)果,刷新緩存中的數(shù)據(jù)。而這時(shí),對(duì)于等待的用戶來(lái)說(shuō),只是不停的通過(guò)APP去讀緩存數(shù)據(jù)而已。當(dāng)用戶的訂單被匹配到以后,我們才真正的把用戶需要的司機(jī)數(shù)據(jù)推送給用戶,然后把用戶數(shù)據(jù)推送給司機(jī)。

2.那么怎么來(lái)找到合適的車呢?

要知道,全國(guó)的范圍那么大,車輛那么多,而且很多車輛的實(shí)時(shí)數(shù)據(jù)在不停的刷新,怎么保證系統(tǒng)能夠很快的計(jì)算出哪輛車才是里乘客最近而且可以使用的車輛呢?

如果我們實(shí)時(shí)的去拿全國(guó)的所有車輛經(jīng)緯度來(lái)計(jì)算,估計(jì)滴滴平臺(tái)早就掛了。那么怎么來(lái)設(shè)計(jì)架構(gòu),我們才能夠更快找到合適的車呢?我們可以把地理信息劃分成為很多很多的正方形,例如:2公里*2公里。

然后對(duì)每個(gè)正方形方塊都進(jìn)行命名,例如:10012001。然后,我們每5秒鐘去同步一下車輛的地利信息數(shù)據(jù),更新到對(duì)應(yīng)的方塊數(shù)據(jù)中,并且這些都放在緩存之中。這樣,我們就可以知道哪些方塊中有哪些車輛。

然后,當(dāng)用戶發(fā)起請(qǐng)求的時(shí)候,我們也按照地利信息數(shù)據(jù),把客戶劃分到方塊中,當(dāng)這個(gè)方塊中有車輛的時(shí)候,就分配給用戶。如果車輛很多的時(shí)候,我們?cè)賮?lái)計(jì)算距離或者隨機(jī)分配都可以。無(wú)論怎么分,反正距離都不會(huì)超出方塊。

如果方塊內(nèi)沒(méi)有車輛信息,我們也可以很快的告訴用戶,對(duì)不起,你需要等。

這樣,就減少了實(shí)時(shí)計(jì)算的時(shí)間,系統(tǒng)的響應(yīng)速度提高了,并發(fā)能力自然也就更高了。

當(dāng)然,滴滴這么龐大的系統(tǒng),里面還有很多的分庫(kù)分表的規(guī)則,這都會(huì)和他的業(yè)務(wù)相掛鉤。由于我也沒(méi)有去做過(guò)滴滴的系統(tǒng),所以也只能猜測(cè)。如果要繼續(xù)深入,那東西就太多了,還涉及到很多的線路算法,這里就只有到此為止了。