如何實現(xiàn)一個支持海量大并發(fā)的服務?
一、前言
提到“海量大并發(fā)”,一般人首先想到的也許是春運期間的“12306”,或者曾經(jīng)風光無二的“天貓雙十一”。尤其是12306,據(jù)說其在春運期間的QPS(Queries-per-second 每秒查詢率)達到100萬。
然而,無論“12306”或是“天貓雙十一”的并發(fā)有多高,其都注定無法超越另一個網(wǎng)絡服務的并發(fā)量,它們再大的并發(fā)都只能算這個服務所承受并發(fā)的一部分,甚至可能還是比較小的那部分,這個服務就是:DNS。
DNS為全球所有的互聯(lián)網(wǎng)(Internet)用戶提供域名解析服務,這些用戶除了自然人,甚至包括大量自動運行的程序。DNS服務對互聯(lián)網(wǎng)而言,如同空氣一樣重要,又如同空氣一樣無形。它是如此穩(wěn)定而透明,就像不存在一樣,實際卻承受著幾乎全世界最大的并發(fā)壓力,而且是一年365天,時時刻刻都承受著。
而無論是“12306”還是“天貓雙十一”,它們所承受的并發(fā)再大,終究是要通過請求域名的方式來進行,所以它們的壓力只會是DNS系統(tǒng)所承受壓力的一部分。所以,如果你想研究“海量大并發(fā)”,不用看那些“解密12306”的文章,踏踏實實把DNS的原理搞透徹,這"海量大并發(fā)"的絕世武功基本就是你的了。
二、關于DNS
那DNS是怎么做的呢?
要支持如此巨量的并發(fā),可以肯定的是,僅僅依靠軟件是不夠的,還需要相配套的硬件支持。所以首先需要足夠數(shù)量的服務器,并將其廣泛架設在用戶群體之中,這里的第一批服務器就是“頂級域名服務器”。
頂級域名服務器是一個集群,整體而言就像一個“內(nèi)閣”,這個內(nèi)閣會服務于一位皇帝,而這位皇帝就是“根域名服務器”。嚴格按照DNS系統(tǒng)來說,其實不止一位“皇帝”,即根域名服務器其實也遠不止一臺,這里為了簡化模型就假定只有一個。
每臺頂級域名服務器就是“內(nèi)閣大臣”,它們共同分擔皇帝的壓力。但內(nèi)閣是直接輔佐皇帝的,并不直接承擔業(yè)務壓力,所以在頂級域名服務器之下,又有一個集群,那就是“權(quán)威域名服務器”。
權(quán)威域名服務器就像設置在各個行省的“總督”,每個總督直接負責自己的一片區(qū)域,接受該區(qū)域的用戶進行域名注冊,并對這些域名提供解析服務。但即便是這些權(quán)威域名服務器,除了接受域名注冊請求外,一般也不直接對普通用戶提供域名解析服務,而是交由“本地域名服務器”來做。
圖片
可是用戶的域名注冊信息都在“權(quán)威域名服務器”中,他找“本地域名服務器”做解析服務,后者怎么知道對應IP呢?
在開始時它當然不知道,所以本地域名服務器會直接上奏“DNS皇帝”這個情況,即直接請求根域名服務器。
以abc.com域名為例,根域名服務器收到某個本地域名服務器的解析服務請求后,它可以通過abc.com這個地址的頂級域名com得知負責此域名的頂級域名服務器,于是就會將域名解析請求轉(zhuǎn)給它。
頂級域名服務器通過abc.com這個地址的abc查詢,得知這個二級域名當初是交給哪個權(quán)威域名服務器管理后,就將解析請求交給那個權(quán)威域名服務器。于是這個權(quán)威域名服務器再查看普通用戶在它這里的注冊信息,于是找到abc.com對應的IP,將其返回給頂級域名服務器。
接下來頂級域名服務器將結(jié)果繼續(xù)返回給根域名服務器,根域名服務器再返回給本地域名服務器,本地域名服務器最終將結(jié)果IP返回給用戶主機。
圖片
在這種方式中,本地域名服務器只用和根域名服務器打交道,叫“遞歸查詢”,但它不是唯一的查詢方式。
還有一種方式是,根域名服務器在得知負責abc.com這個域名的頂級域名服務器的IP后,會直接返回給本地域名服務器,讓本地域名服務器自己去請求頂級域名服務器,而不是代為請求。后面請求權(quán)威域名服務器也是同理,這種方式就叫“迭代查詢”。
圖片
本地域名服務器在獲知用戶abc.com這個域名的IP后,一方面它會將結(jié)果返回給用戶主機,另一方則會將此結(jié)果緩存,這樣下次有用戶再請求這個域名時,它就可以直接返回結(jié)果了。
這里必須著重強調(diào)下緩存,它是整個分布式架構(gòu)中的重要組成部分,是分擔系統(tǒng)壓力的重要機制。
通過這樣一個分布式的分層架構(gòu),海量的域名解析請求就被分攤到至少4層主機中了,再配合本地域名服務器的緩存,整個DNS系統(tǒng)中每臺服務器的實際壓力都會減少很多。于是看起來很恐怖的并發(fā)量,在眾多服務器以及緩存的共同支撐之下,就顯得不是那么困難了。
三、總結(jié)
DNS的域名解析服務可以如此處理,其他各種類型的服務亦是如此,區(qū)別只是并發(fā)請求的內(nèi)容,但應對并發(fā)本身的手段是可以相互參考的。


































