如何避免單點失效(上)

2022-09-17 09:54:14 字數 3073 閱讀 6227

當今網際網路發展的非常快,每當重大「節日」時,一些**宕機幾乎成為一種規律,例如雙十一,過年搶火車票等等。

當儲存海量二三維資料的gis web應用發生宕機時,所帶來的後果是十分嚴重的。

先解釋下什麼是單點失效。

舉個簡單例子就是:**就一台伺服器,當這台伺服器掛了,**就沒辦法訪問了。

而避免單點失效的設計原則,簡單說就是整個系統的工作流不會因為乙個單點的失敗而停止整個工作。

通俗講就是:不要把雞蛋放到乙個籃子裡。

那麼我們應該如何來避免單點失效,如何打造乙個高可用(不易宕機),高效能(支援大規模併發),可以伸縮(壓力大時增加服務分攤壓力,壓力小時關閉部分服務,節約資源)的gis web應用呢。

下面我就supermap gis web應用避免單點失效問題,從演化發展歷程角度,談談我個人的理解。

先說多機器集群時代。

早些年,在iserver6r中發現集群功能時,當時覺得這個功能很厲害,可以把大量請求,通過集群父節點,轉到不同集群子節點伺服器上,由各子節點伺服器協同處理,從而大大提高gis web應用的併發量和訪問效率。(如下圖)

處理流程:客戶端發請求給iserver父節點,iserver父節點內部進行**,交給其他機器iserver子節點來處理,對外只表現為乙個url。

通俗講就是:當任務來的時候,父親把任務交給兒子來處理。

那麼問題來了,如果其中乙個子節點出問題怎麼辦?

放心,集群服務的冗餘設計原理與 gis

應用的冗餘設計相同,可以避免集群服務引起的單點失效。例如上圖,集群系統配備了3個集群服務同時對外提供 gis

服務,當其中乙個集群服務子節點1故障失效時,客戶端將對集群服務進行錯誤識別,並將 gis 訪問請求直接轉由集群服務子節點2,3來處理。

通俗講就是:哪個子節點出問題了,就不會派發任務給他。(有點像不聽話就不給你糖吃,哈哈)

一台伺服器就跑乙個iserver是不是有點「奢侈」啊,能不能跑多個iserver呢?答案肯定是可以的,只是單機集群配置略微有點複雜,站在運維人員角度來看,有點煩,畢竟當我要進行系統維護時,我還給把服務乙個個停止,很麻煩。

那麼有沒有一鍵化操作呢?

有,下面我們將進入單機多程序時代。

上面提到,單機集群維護略微複雜,如果是資料庫資料還好,但是如果是檔案型的資料,還要拷貝多份進行發布。

iserver 8c增加了乙個新功能,支援單機多程序。這個功能可以充分利用機器資源,提公升iserver效能及併發響應的能力,相比原來的單機集群,操作量是大大的減少,能做到一鍵化啟動,一鍵化關閉。

例如,只有一台gis伺服器,如下圖:

請允許我先解釋幾個名詞:

master是 iserver 的主程序,負責啟動、協調、管理當前系統中的所有節點即 worker。

可以理解為領導

worker是由 master 啟動和管理的多個 iserver 程序,乙個 worker 對應乙個埠的 iserver 程序,可以支援服務發布、gis 請求處理,以及參與分布式切圖。

可以理解為員工

daemon是 iserver 的監控程序,負責監控、啟動 master 節點,避免 master 節點失效。

可以理解為助理

通俗講就是:當任務來的時候,領導分配給下面的員工來處理

如果咱們在結合iserver810多例項新特性,既發布資料時,選擇多例項選項。

則會將該資料發布到各個worker中,通過檢視伺服器負載情況,讓gis web應用實現可伸縮。既:當訪問量大時,增加worker程序數,當訪問量小時,減少worker程序數

當然,worker配置也十分簡單,直接在iserver管理介面,勾選啟動多程序模式,填寫需要啟動的worker數量,儲存即可。

如下圖:

如果在配合前面提到的多機集群,更能大大提高併發訪問量(如下圖)。

如上圖所示,在原來的iserver子節點伺服器上,開啟iserver子節點的多程序服務。

高併發,可伸縮解決了,那麼如何保證gis web應用高可用呢?

其實很簡單,搭建負載均衡器就能解決,如下圖:

例如,利用nginx搭建乙個負載均衡器,就算下面的某台伺服器宕機,或者某個節點損壞,gis web應用也不會失效,還能繼續執行,是不是很棒!!!

除了負載均衡器,還有沒有其他方案可以保證服務的高可用呢?

讓我們進入iclient加速時代吧。

(請看下篇如何避免單點失效(下)

如何避免單點失效(上)

當今網際網路發展的非常快,每當重大 節日 時,一些 宕機幾乎成為一種規律,例如雙十一,過年搶火車票等等。當儲存海量二三維資料的gis web應用發生宕機時,所帶來的後果是十分嚴重的。先解釋下什麼是單點失效。舉個簡單例子就是 就一台伺服器,當這台伺服器掛了,就沒辦法訪問了。而避免單點失效的設計原則,簡...

如何避免索引失效

全值匹配 最佳左字首法則 如果索引了多列,要遵守最左字首法則。指得時查詢從索引的最左前列開始並且不跳過索引中的列 不在索引列上左任何操作 計算 函式 自動or手動 型別轉換 因為在索引列上做操作會導致索引失效而轉向全表掃瞄 儲存引擎不能使用索引中範圍條件右邊的列 盡量使用覆蓋索引 只訪問索引的查詢 ...

避免索引失效

1.全值匹配,對索引中所有列都指定具體值。2.最左字首法則,如果索引有多列,要遵循最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。否者不走索引。3.範圍查詢右邊的列,不走索引,應為mysql底層範圍查詢之後結構就斷了,就無法使用後面得索引了。4.不要在索引列上進行運算操作,索引將...