《和面試官抬槓系列》單機等於沒有高可用麼

2022-08-16 19:24:09 字數 2572 閱讀 1148

高可用,指系統的可用程度。沒有100%的可用性。打個誇張的比方說,你的web服務部署的所有機房都停電了,那麼系統就不能再提供服務。一般我們只需要做到4個9就已經很不錯了,如下圖:

高可用性集群中的節點一般是一主一備,或者一主多備,通過備份提高整個系統可用性。

負載均衡集群一般是多主,每個節點都分擔流量。

單機對應的就是負載均衡下的多台機器。

多台機器可以對服務進來的流量分攤,解決的問題是不讓一台機器不可用,導致web服務終斷或不可用,多台機器經常組成乙個集群,來處理所有的負載。

相關軟體:haproxy,lvs,nginx,這些軟體提供對集群的管理,是集群的大門.

高可用 指整個系統高可用,也指主機的冗餘接管。盡可能採取措施減少系統服務中斷時間,進而提高業務程式持續對外提供服務的能力。

單台負載均衡器位於網路的最前端,它起著分流客戶請求的作用,相當於整個**或系統的入口,如果它出現故障,這個**也會出現故障。所以,這時有一種方案,它能在短時間內將崩潰的負載均衡器接管過去,這也可稱高可用。至於負載均衡器後端的web集群、資料庫集群、因為有負載均衡器的內部機制,即使其中的某一台或兩台發生問題,也不會影響真個系統的使用。

用得較多的負載均衡器硬體有f5 big-ip,軟體有lvs,nginx及ha-proxy。高可用軟體有hearbeat和keepalived。成熟的linux集群架構有lvx+keepalived、nginx+keepalived及drbd+hearbeat。

大多人理解的高可用就是單台機器掛掉了整個服務不會掛掉,所以寫**的時候使用集群的思想去寫**,比如做成無狀態的服務,保證在集群使用的時候無狀態,單機故障不影響服務,從而達到高可用的效果。

很多人接收到的資訊是有了上圖的那種架構,那麼這個系統就變成了乙個高可用的系統了。

一味追求集群架構,脫離了業務場景和團隊配置的實際,進行的架構設計就是過度設計

但實際上,上圖的系統解決的主要是下面的問題。

高可用這種東西不是乙個架構的模式能解決的,乙個高可用的系統是**級別解決的,不是靠幾個開源模組能解決的。

有些人總認為高可用系統有銀彈,在各種論壇,會議上看到各種架構,而且基本上都用到了一些成熟的開源軟體,所以覺得有了這些以後就可以是乙個高可用的系統了,我有zookeeper,那麼服務單機掛了,服務照常跑,但實際上然並卵,zookeeper解決的是外部不可控因素導致的機器掛了,比如機器硬碟壞了,網路斷了,這種因素導致的服務掛了,zookeeper能解決,你**出問題導致機器掛了,zookeeper下掛1000臺機器也解決不了啊,一般情況下還是一掛全掛。

比如乙個分布式的搜尋系統,索引分片了,所以有個集群,有50臺機器,每個分片大概10臺機器,並且機器可以動態增加減少,集群用zookeeper管理,這算高可用系統嗎?這可是乙個標準的搜尋系統的高可用架構,也只能說,在**優秀的前提下,這個系統高可用了,網路問題和機器硬體問題已經比較難搞掛整個集群了。但一旦**有個小bug,或者索引資料生成的時候出現了點問題,一般情況下,集群就全掛了,談何高可用。

高可用沒有銀彈,你在各處看到的,聽到的,學習到的各種高可用架構,他們只會告訴你這個系統架構多麼牛逼,用幾個框框框住某幾個模組,然後告訴你,這個框框裡的服務各種突發情況都能自適應,流量洪峰來了線性加機器就能解決,對你來說卻是然並卵,他們沒有告訴你他們的**有多牛逼,並且只有在這個前提下才高可用的,想純粹靠幾個框框來架構出乙個高可用的系統,那是ppt架構師。

真正的高可用不用糾結架構設計,只需要**的健壯,健壯的**加上主備系統設計,不需要其他的,基本上就是乙個高可用的系統了,銀行的核心資料處理中心加上異地災備就是這樣子的,你敢說他不是高可用的?

所以,寫好**吧,才能高可用,學習架構,更多的只是對提高系統全域性性認識的一種補充,高可用的架構不存在,存在的只有高可用的**。

優秀的**就是一切高可用架構的基石,優秀的**加上合理的架構就是高可用的架構,乙個高可用的架構不是靠開源軟體搭積木來得到的,成熟的開源軟體解決的是把一部分本應該你寫的**變得更優秀。

資金層面,與其做多伺服器的所謂的高可用架構,不如把買多餘的集群伺服器的錢,花在購買讀寫更快的硬碟,更大記憶體和核心的cpu,伺服器頻寬,cdn加速服務,輔以一定的運維工具,即可保證服務的高可用。

**層面,不要出現一些低階的空指標問題,框架使用不當導致記憶體溢位的問題,以及介面響應超時等等問題,**交付前,有針對性的做效能測試(併發,壓力,執行效率測試),優秀的**才是高可用的根本。

架構層面,動靜分離,訊息佇列非同步去消化耗時耗記憶體的任務,redis快取防止請求直接打到db,同時處理好快取穿透,擊穿,雪崩的防禦方案,如果覺得redis單機記憶體不夠大,可以用redis2.0,開啟vm功能,突破物理記憶體的限制,redis還能自己在記憶體保持熱點資料。

運維層面,用supervisor守護php-fpm,mysql等程序,對伺服器和資料庫服務做好cpu,硬碟空間等多個指標的預警,再者,單機的安全防禦方面也相對好做一些。

HashMap怎麼和面試官講清楚?

集合中我們經常使用的就是hashmap,我們知道它的底層實現是hash桶外加鍊錶的方式來進行儲存資料的,但是底層又是如何進行具體實現的,我們可能真的說不清除。現在我們從原始碼層次上進行講解hashmap的原理 get方法的底層實現 先看下原始碼 我們傳入key的引數,底層呼叫的是getnode的方式...

求職者和面試官如何做好電話面試

面試方式有很多種,其中 面試是較為特殊性的,因為雙方不是面對面,而是通過 傳聲的,所以作為求職者和面試官如何做好 面試呢?應聘者應對 面試?1 主動選擇通話時間 接到 的地點可能在任何地方,街道 商場 公共汽車站等等,這些地方聲音嘈雜,不利於溝通,這時,你可以主動要求另約時間再聯絡,如說 對不起,我...

我是面試官系列 關於溝通

題目 設計一套程式,模擬兩個人的交流過程 子題目 1.設計乙個類,主體是人,包含與另乙個交流過程中需要的方法 2.設計一套類,能夠描述兩個人針對乙個task,達成乙個共識 3.如果乙個人很懂溝通,另乙個人不懂溝通,程式的執行結果是什麼 4.如果兩個人都不會溝通,程式的執行結果是什麼 5.如果兩個人都...