很多web開發者都不會接觸到高併發的專案,但是不代表高併發技術棧理論知識就不需要了解。就像歐洲沒有網際網路公司(沒人比我更瞭解歐洲網際網路環境了),但依舊有程式設計師。中國自有國情在此,你做的任何一個web應用都有可能成為高併發專案。
提到高併發就離不開負載均衡,負載可以理解為一個服務承受流量的工作狀態,沒有流量的時候是空載,有了點流量服務就執行起來,當流量超過了這個機器的上限,服務就是滿載狀態。面對一個流量打滿了的服務,要麼等,要麼崩潰,要麼等它崩潰。但機器是死的,我們程式設計師是活的,解決辦法除了關機(別笑,我是認真的),還有就是讓流量均勻地打到其他機器上去。
老祖宗有智慧,早就說過,狡兔有三窟,僅得免其死耳。一隻兔子要有三個洞藏身,才能免除被獵人獵殺的危險。服務也是一樣,如果僅有一臺,那麼被高併發這個獵人給幹掉也無可厚非。所以有多臺機器就能抗住更多的流量,抵禦更多的風險,均衡講的就是這麼一個意思。
上面我用類比的方式大白話的語境講述了,系統高可用,系統擴充套件性和負載均衡能力。如果一個系統的某些裝置被鋼鐵俠發射的導彈炸掉了,被萬磁王給吸走了,也不會影響到原來正常的服務,那麼這就是高可用。redis的哨兵就是高可用,redis cluster也是高可用。高可用的原理就像葫蘆娃一樣,
系統擴充套件性講的是提高頻寬,增加資料庫等等,都對服務是透明的,而且沒有負作用。系統擴充套件性這方面我看很多框架都給我們處理好了,不需要太操心,都是配置一通就可以了。(像我就沒有好的擴充套件性,如果誰給我五百萬,我能高興的當場去世)。
一個服務由多個物理機器提供,每個機器執行的服務是相同的。我們採用某個策略讓流量負載到不同的機器上去,每個機器都保持一個比較合理的負載。一個高併發的專案,必然有虛擬伺服器,故障隔離和失敗切換機制。虛擬伺服器是對客戶端透明的,似乎只有一個伺服器在提供服務。故障隔離是系統可以自動把失效了的機器從工作崗位請下去,不再提供服務。失敗切換是針對負載均衡器的一種使用機制,在有兩個負載均衡器的時候,一個被鋼鐵俠給炸傷了,另一個就趕緊接替其工作。
要實現上面我講的這些功能,就需要一個大名鼎鼎的軟體,keepalived。keepalived是一個用c語言編寫的路由軟體,它是依賴於LVS(Linux Virtual Server)的。當你第一次使用keepalive的使用不要像我一樣,去百度如何下載LVS。(鋼鐵俠看到這裡就提問,所以要去google一下怎麼下載LVS嗎?)嗯,是的,多用google少用百度。LVS由於太棒了,已經包含在linux核心當中了。
講到這裡,就明確了使用keepalived的兩個特性。第一伺服器必須是linux系統,第二高併發專案適合。keepalived的使用給我的感覺就和配置nginx差不多,而且keepalived很多時候也真的是和nginx一起打配合使用。概念明確了,使用場景明確了,那麼怎麼安裝配置使用一下keepalived練練手呢?
接下來我會把如何下載keepalived和配置使用寫成文章發表出來,只要我還活著,大家都有得學。
(本文有什麼錯誤或者歧義請指出,謝謝)
本作品採用《CC 協議》,轉載必須註明作者和本文連結