1. 程式人生 > >單點系統架構的可用性與效能優化

單點系統架構的可用性與效能優化

一、需求緣起

明明架構要求高可用,為何系統中還會存在單點?

回答:單點master的設計,會大大簡化系統設計,何況有時候避免不了單點

在哪些場景中會存在單點?先來看一下一個典型網際網路高可用架構。


典型網際網路高可用架構:

(1)客戶端層,這一層是瀏覽器或者APP,第一步先訪問DNS-server,由域名拿到nginx的外網IP

(2)負載均衡層,nginx是整個服務端的入口,負責反向代理與負載均衡工作

(3)站點層,web-server層,典型的是tomcat或者apache

(4)服務層,service層,典型的是dubbo或者thrift等提供RPC呼叫的後端服務

(5)資料層

,包含cache和db,典型的是主從複製讀寫分離的db架構

在這個網際網路架構中,站點層、服務層、資料庫的從庫都可以通過冗餘的方式來保證高可用,但至少

(1)nginx層是一個潛在的單點

(2)資料庫寫庫master也是一個潛在的單點

再舉一個GFS(Google File System)架構的例子。


GFS的系統架構裡主要有這麼幾種角色:

(1)client,就是發起檔案讀寫的呼叫端

(2)master,這是一個單點服務,它有全域性事業,掌握檔案元資訊

(3)chunk-server,實際儲存檔案額伺服器

這個系統裡,master也是一個單點的服務,Map-reduce系統裡也有類似的全域性協調的master單點角色。

系統架構設計中,像nginx,db-master,gfs-master這樣的單點服務,會存在什麼問題,有什麼方案來優化呢,這是本文要討論的問題。

二、單點架構存在的問題

單點系統一般來說存在兩個很大的問題:

(1)非高可用:既然是單點,master一旦發生故障,服務就會受到影響

(2)效能瓶頸:既然是單點,不具備良好的擴充套件性,服務效能總有一個上限,這個單點的效能上限往往就是整個系統的效能上限

接下來,就看看有什麼優化手段可以優化上面提到的兩個問題

三、shadow-master解決單點高可用問題

shadow-master是一種很常見的解決單點高可用問題的技術方案。

“影子master”,顧名思義,服務正常時,它只是單點master的一個影子,在master出現故障時,shadow-master會自動變成master,繼續提供服務。

shadow-master它能夠解決高可用的問題,並且故障的轉移是自動的,不需要人工介入,但不足是它使服務資源的利用率降為了50%,業內經常使用keepalived+vip的方式實現這類單點的高可用


以GFS的master為例,master正常時:

(1)client會連線正常的master,shadow-master不對外提供服務

(2)master與shadow-master之間有一種存活探測機制

(3)master與shadow-master有相同的虛IP(virtual-IP)


當發現master異常時:

shadow-master會自動頂上成為master,虛IP機制可以保證這個過程對呼叫方是透明的

除了GFS與MapReduce系統中的主控master,nginx亦可用類似的方式保證高可用,資料庫的主庫master(主庫)亦可用類似的方式來保證高可用,只是細節上有些地方要注意:


傳統的一主多從,讀寫分離的db架構,只能保證讀庫的高可用,是無法保證寫庫的高可用的,要想保證寫庫的高可用,也可以使用上述的shadow-master機制:


(1)兩個主庫設定相互同步的雙主模式

(2)平時只有一個主庫提供服務,言下之意,shadow-master不會往master同步資料

(3)異常時,虛IP漂移到另一個主庫,shadow-master變成主庫繼續提供服務

需要說明的是,由於資料庫的特殊性,資料同步需要時延,如果資料還沒有同步完成,流量就切到了shadow-master,可能引起小部分資料的不一致。

四、減少與單點的互動,是存在單點的系統優化的核心方向

既然知道單點存在效能上限,單點的效能(例如GFS中的master)有可能成為系統的瓶頸,那麼,減少與單點的互動,便成了存在單點的系統優化的核心方向。

怎麼來減少與單點的互動,這裡提兩種常見的方法。

批量寫

批量寫是一種常見的提升單點效能的方式。

例如一個利用資料庫寫單點生成做“ID生成器”的例子:


(1)業務方需要ID

(2)利用資料庫寫單點的auto increament id來生成和返回ID

這是一個很常見的例子,很多公司也就是這麼生成ID的,它利用了資料庫寫單點的特性,方便快捷,無額外開發成本,是一個非常帥氣的方案。

潛在的問題是:生成ID的併發上限,取決於單點資料庫的寫效能上限。

如何提升效能呢?批量寫


(1)中間加一個服務,每次從資料庫拿出100個id

(2)業務方需要ID

(3)服務直接返回100個id中的1個,100個分配完,再訪問資料庫

這樣一來,每分配100個才會寫資料庫一次,分配id的效能可以認為提升了100倍。

客戶端快取

客戶端快取也是一種降低與單點互動次數,提升系統整體效能的方法。

還是以GFS檔案系統為例:


(1)GFS的呼叫客戶端client要訪問shenjian.txt,先查詢本地快取,miss了

(2)client訪問master問說檔案在哪裡,master告訴client在chunk3上

(3)client把shenjian.txt存放在chunk3上記錄到本地的快取,然後進行檔案的讀寫操作

(4)未來client要訪問檔案,從本地快取中查詢到對應的記錄,就不用再請求master了,可以直接訪問chunk-server。如果檔案發生了轉移,chunk3返回client說“檔案不在我這兒了”,client再訪問master,詢問檔案所在的伺服器。

根據經驗,這類快取的命中非常非常高,可能在99.9%以上(因為檔案的自動遷移是小概率事件),這樣與master的互動次數就降低了1000倍。

五、水平擴充套件是提升單點系統性能的好方案

無論怎麼批量寫,客戶端快取,單點畢竟是單機,還是有效能上限的。

想方設法水平擴充套件,消除系統單點,理論上才能夠無限的提升系統系統。

以nginx為例,如何來進行水平擴充套件呢?


第一步的DNS解析,只能返回一個nginx外網IP麼?答案顯然是否定的,“DNS輪詢”技術支援DNS-server返回不同的nginx外網IP,這樣就能實現nginx負載均衡層的水平擴充套件。


DNS-server部分,一個域名可以配置多個IP,每次DNS解析請求,輪詢返回不同的IP,就能實現nginx的水平擴充套件,擴充負載均衡層的整體效能。

資料庫單點寫庫也是同樣的道理,在資料量很大的情況下,可以通過水平拆分,來提升寫入效能。

遺憾的是,並不是所有的業務場景都可以水平拆分,例如秒殺業務,商品的條數可能不多,資料庫的資料量不大,就不能通過水平拆分來提升秒殺系統的整體寫效能(總不能一個庫100條記錄吧?)。

六、總結

今天的話題就討論到這裡,內容很多,佔用大家寶貴的時間深表內疚,估計大部分都記不住,至少記住這幾個點吧:

(1)單點系統存在的問題:可用性問題,效能瓶頸問題

(2)shadow-master是一種常見的解決單點系統可用性問題的方案

(3)減少與單點的互動,是存在單點的系統優化的核心方向,常見方法有批量寫,客戶端快取

原文連結:

(4)水平擴充套件也是提升單點系統性能的好方案

相關推薦

系統架構可用效能優化

一、需求緣起 明明架構要求高可用,為何系統中還會存在單點? 回答:單點master的設計,會大大簡化系統設計,何況有時候避免不了單點 在哪些場景中會存在單點?先來看一下一個典型網際網路高可用架構。 典型網際網路高可用架構: (1)客戶端層,這一層是瀏覽器或者A

系統架構優化

一、需求緣起 明明架構要求高可用,為何系統中還會存在單點? 回答:單點master的設計,會大大簡化系統設計,何況有時候避免不了單點 在哪些場景中會存在單點?先來看一下一個典型網際網路高可用架構。 典型網際網路高可用架構: (1)客戶端層,這一層是瀏覽器或

頁面系統的一些優化

clas 系統 數據 com 問題 請求 加載 今天 登錄 1:初次進入系統的新用戶 首次進入該系統的用戶,沒有任何的文件緩存。進入系統後加載index.html 會將所有的文件(圖片、js、css)下載下來 耗時在3.3s左右。之後進入系統 只會額外加載一些頁面的圖

《河北省重大技術需求征集系統可用及可修改性戰術分析

宕機 自身 均衡 異構 客戶 架構 系統 代碼 和數 從可用性戰術分析來看:應用層主要處理網站應用的業務邏輯,顯著特點是應用的無狀態性。對於應用服務器集群,實現這種服務器可用狀態實時監測、自動轉移失敗任務的機制是負載平衡。負載平衡主要是用在業務量和數據量較高的情況下,當單臺

rabbitmq及集群搭建 簡單使用

rabbitmq簡單搭建與使用 配置文件管路未添加 單點搭建rabbitmq 安裝epel源yum install -y epel-release.noarchyum clean all && yum makecache fast && yum repolist ena

Kubernetes系統架構演進過程背後驅動的原因

1、背景   各種平臺都會遇到一個不可迴避的問題,即平臺應該包含什麼和不包含什麼,Kubernetes也一樣。Kubernetes作為一個部署和管理容器的平臺,Kubernetes不能也不應該試圖解決使用者的所有問題。Kubernetes必須提供一些基本功能,使用者可以在這些基本功

CAS5.3登入服務端搭建整合springboot

什麼是單點登入 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 SSO是概念,實現SSO需要用到CAS框架 使用cas框架實現單點登陸 有多個不同伺服器的

ERP之軟體系統架構- C/SB/S區別簡介TEL:13083567937

一、什麼是C/S和B/S 要想對“C/S”和“B/S”技術發展變化有所瞭解,首先必須搞清楚三個問題。 第一、什麼是C/S結構。 C/S(Client/Server)結構,即大家熟知的客戶機和伺服器結構。它是軟體系統 體系結構,通過它可以充分利用兩端硬體環境的優勢

5月13日】Open Talk 美聯集團技術專場——新型時尚電商平臺系統構建效能優化 – 運維派

本次又拍雲Open Talk 攜手美麗聯合集團的三位技術大咖,一起探討《新型時尚電商平臺系統構建與效能優化》,內容分享涉及品牌電商大促穩定性、資料庫雲平臺建設、影象演算法技術等內容,現場乾貨分享、觀點碰撞,獻上思想交流的饕餮大餐。 又拍雲 Open Talk 是由又拍雲發起的系列主題分享沙龍,從2

登入SSO:概述示例

本系列將由淺入深的,帶大家掌握最新單點登入SSO方案選型,以及架構開發實戰。系列將結合示例、原始碼以及演示視訊,讓大家能夠直觀、深入學習。 文末附5個滿足不同單點登入場景的gif動畫演示。本系列後繼文章會深入它們的實現方式以及適用場景,大家也可以先觀看揣摩其實現。 單點登入即Single

薦書丨大型網站技術架構演進效能優化

點選上方“程式人生”,選擇“置頂公眾號”第一時間關注程式猿(媛)身邊的故事大型網站技術選型思路大

ERP之軟體系統架構- C/SB/S區別簡介

一、什麼是C/S和B/S 要想對“C/S”和“B/S”技術發展變化有所瞭解,首先必須搞清楚三個問題。 第一、什麼是C/S結構。 C/S(Client/Server)結構,即大家熟知的客戶機和伺服器結構。它是軟體系統 體系結構,通過它可以充分利用兩端硬體環境的優勢,將任務合理分配到Client端和Server端

首席架構師修煉之道-系統架構設計原理核心技術-張勇-專題視訊課程

首席架構師修煉之道-系統架構設計原理與核心技術—112人已學習 課程介紹        系統架構是解決系統設計和演變過程中由於業務功能和資料體量的提升而出現的各種問題的方法論和實踐,關注於系統構成結構化元素、介面及其相互協作,並提供指導性架構風格,從而實現從原型到發現和改進問

微服務系統架構的優點不足

摘要:本文來自Nginx官方部落格,是微服務系列文章的第一篇,主要探討了傳統的單體式應用的不足,以及微服務架構的優勢與挑戰。正如作者所說,微服務架構更適合用於構建複雜的應用,儘管它也有自己的不足。   這篇文章作者是Chris Richardson,他是早期基於J

SQL Server 的“高可用“災難恢復” 之二 故障轉移群集

SQL Server使用最廣的高可用性技術叫做故障轉移群集(SQLServer Failover Cluster)。這是一項基於Windows故障轉移群集的一種技術。SQLServer故障轉移群集技術集成了微軟技術一貫簡單易用的特點,在部署和管理上都非常容易,同時又能提供

.Net 登入(SSO)的原理實現------登入是什麼鬼

.Net 單點登入(SSO)的原理與實現——單點登入是什麼鬼 一、什麼是單點登入   在一些公司中,可能需要按照公司業務將系統拆分,例如騰訊的產品有騰訊視訊、QQ郵箱、QQ空間等;百度有百度貼吧,百度知道;阿里有淘寶、天貓….我們常常是登入了淘寶就可以直接進

Delphi - 手把手教你基於D7+Access常用管理系統架構的設計實現 (更新中)

前言   從事軟體開發工作好多年了,學的越深入越覺得自己無知,所以還是要對知識保持敬畏之心,活到老,學到老! 健身和程式碼一樣都不能少,身體是革命的本錢,特別是我們這種高危工種,所以小夥伴們運動起來!有沒有健身擼鐵,體脂現在是多少呀?明年(2019/03/22)徐州的馬拉松有沒有報名呀!?   扯的有點遠了,

【Java併發基礎】安全性、活躍效能問題

前言 Java的多執行緒是一把雙刃劍,使用好它可以使我們的程式更高效,但是出現併發問題時,我們的程式將會變得非常糟糕。併發程式設計中需要注意三方面的問題,分別是安全性、活躍性和效能問題。 安全性問題 我們經常說這個方法是執行緒安全的、這個類是執行緒安全的,那麼到底該怎麼理解執行緒安全呢? 要給執行緒安全性定一

Java 架構師+高併發+效能優化+Spring boot大型分散式專案實戰

視訊課程內容包含: 高階 Java 架構師包含:Spring boot、Spring cloud、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Spring、MongoDB、ZeroMQ、Git、Nosql、Jvm、Mecached、Netty、Nio、Mina、效能調優、高