1. 程式人生 > >PAAS平臺構建7×24小時高可用應用的方案設計

PAAS平臺構建7×24小時高可用應用的方案設計

現在很多企業都在搭建自己的私有PAAS平臺,當然也有很多大型網際網路公司搭建共有PAAS平臺(例如SAE/BAE/JAE(jae.jd.com))。那麼使用PAAS平臺來部署SAAS應用有哪些好處呢?除了大家都知道方便部署管理,節約資源和成本,今天我主要給大家介紹另一個好處就是讓部署在PAAS平臺上的應用很容易做到7×24小時不伺服器執行(哪怕需要重新部署和更新應用),這個對於一般的企業和普通開發者來說是很難辦到的。當然如果要在PAAS平臺做到其實也不是那麼簡單的,需要很強的技術力量。下面就主要介紹一下在PAAS平臺怎樣實現讓部署在PAAS平臺上的應用達到7×24小時執行的方案。

在介紹方案設計之前需要強調一下,這個前提是PAAS平臺本身是7×24小時高可靠的。

本方案設計主要涉及下面幾方面的改進:

(1)應用執行排程模組:能夠將應用的多個例項排程到不同的伺服器和機架上進行執行;

(2)應用執行狀態的監控模組:對應用的執行狀況進行監控;

(3)優雅重啟應用模組:能夠在應用重新部署和升級時不停服務;

一,首先我們來看看排程模組

排程模組應該是PAAS平臺(不管是私有還是共有的)標配,只是不同的PAAS平臺有自己特色的排程方法和策略,例如根據伺服器資源使用來排程(這個裡面有涉及到各種資源的排程,例如根據CPU或者記憶體等),或者根據部署的應用個數來排程。當然好的排程策略絕對不只使用一種評判標準來作為排程的策略,肯定是結合各種情況考慮。因為今天主要介紹的是應用的高可靠性,所以主要介紹怎樣通過排程演算法保證應用的高可靠性。假如應用為了提高自己的服務能力和可靠性運行了3個例項,那麼怎麼的排程演算法是最佳的(僅僅針對高可靠性這一點來說的)?我們都知道設計一個高可靠性系統都會考慮到伺服器出問題和網路(交換機)出問題,所以排程模組為了保證這個應用的高可靠性應該需要保證這三個例項應用不在同一個伺服器上執行,同時保證三個例項不應該在同一個機架下執行,當然如果有條件的PAAS平臺可以考慮跨資料中心排程(不過應該沒有幾個PAAS平臺能夠做到跨資料中心部署PAAS平臺上的應用)。

要做到上面說的排程結果,排程模組應該能夠知道所有部署應用的伺服器的部署情況,或者至少能夠通過某種方法查詢到。我相信所有的PAAS都應該有資源管理模組(或者叫做PAAS平臺的伺服器監控模組)能夠提供這些資訊。除了知道伺服器的部署情況,排程模組應該還需要能夠知道或者查詢到某一個應用例項執行在哪一臺伺服器上,因為只有這樣排程模組才能夠保證不會把後面的例項排程到同一個伺服器上。例如應用啟動三個例項,已經啟動2個例項了,還需要啟動第三個例項,那麼排程模組啟動第三個例項之前需要知道其他連個例項執行的伺服器和機架,這樣才能保證把第三個例項排程到其他機架上去執行。同樣如果應用執行的三個例項,突然某個時候其中一個例項掛掉了,那麼需要把第三個例項重新執行起來,還是需要使用排程模組來完成不同伺服器和不同機架的排程。至於排程模組怎麼知道掛掉了一個例項,這個不是排程模組關心的事情,下面介紹的應用執行狀態監控模組會很好的解決這個問題。

二,應用執行狀態的監控模組

打造7×24小時高可用的應用,如果連應用執行的狀態都不知道,還怎麼談做到7×24小時的執行。說的簡單一點,應用執行狀態的監控模組就是實時的監控應用各個例項的執行狀態(存活還是掛掉了),然後根據監控的結果進行後續處理。監控模組需要達到的結果很簡單:就是應用的執行狀態和使用者期望的執行狀態是否一致。例如使用者期望這個應用是執行的,但是此時執行狀態卻是掛掉的,肯定是不合理的,又例如使用者期望此時不想對外提供服務了,希望應用是停止執行的,但是如果應用還是在執行也是不合理的,再例如使用者期望應用目前應該是需要執行三個例項的,但是隻有兩個例項執行,也是沒有滿足使用者需求的。監控模組就是發現這些和使用者期望不一致的情況,並處理。

那麼怎樣做?下面我就結合開源PAAS平臺cloudfoundry的解決方案來介紹應用執行狀況的監控模組的方案設計,cloudfoundry目前為止已經將原來的ruby版單程序單點監控模組改造成了go版高可靠多程序的監控模組。預知詳情請到官方網站查詢相關資料,今天主要結合最新版本的監控模組來介紹怎麼設計監控模組:

最新版本的cloudfoundry的應用執行狀態監控模組又劃分為很多的子模組,每一個子模組都可以執行一個主程序和多個備程序進行高可靠部署(這些程序可以部署在不同的伺服器和機架上,只要網路能夠通)。

首先需要獲取每一個應用的使用者期望狀態,那麼我們就需要單獨一個模組來獲取這些使用者的期望狀況,並且把這些狀態儲存在某一個地方(共享儲存,cloudfoundry使用的etcd)以便其他模組使用。當然使用者期望的狀態通常存放在資料庫當中,這個使用者期望狀態的獲取模組可以通過直接讀取資料庫或者通過其他服務模組得到。這個模組對應cloudfoundry的hm9000中的fetch_desired模組。

使用者期望的執行狀態有了,那麼就還需要應用真實的執行狀態,那麼這個狀態怎麼來獲取了,這個模組就叫做應用真實狀態獲取模組,同樣將獲取的資料存放到共享儲存上。有兩種方案可以獲取,一種是主動去獲取所有應用的執行狀態,通常就是去訪問應用提供的一個服務,第二種方案就是所有應用定時上報心跳,如果沒有即使上報就認為應用執行狀態有問題了。cloudfoundry採用的第二種方案,不過它不是應用自己上報,而是管理一臺伺服器上所有應用的元件(dea)統一上報這臺伺服器所有應用的心跳。這個模組對應cloudfoundry的hm9000中的listen模組。

使用者期望的狀態和應用真實狀態都有了,那麼我們就可以開始分析了,到底哪些應用的執行狀態和使用者期望的執行狀態不一致了。然後將分析的結果同樣存放在共享儲存上,後面其他模組會使用這個分析結果的資料。這個模組對應cloudfoundry的hm9000中的analyze模組。

我們都知道了哪些應用的狀態和使用者期望的狀態不一致,那麼我們就可以把這些不一致的應用讓他們一直,這就需要一個模組專門來給排程模組傳送排程命令。例如使用者期望應用是執行的,但是真實的狀態是這個應用掛掉了,那麼這個模組就可以傳送一個排程命令讓排程模組把這個應用啟動起來。同樣如果使用者期望停止,如果應用是執行的那麼就傳送排程命令讓這個應用停止掉。還有執行例項少了就在多排程一個起來,執行例項多了就停止掉多餘的例項。這個模組對應cloudfoundry的hm9000中的send模組。

通過上面的4個模組基本上完成了應用執行狀態監控模組,並且維護了應用執行狀態不一致的應用。當然cloudfoundry的hm9000還提供了其他工具模組,感興趣可以自己去深入研究。

三,最後一個模組就是優雅重啟模組

為什麼需要這一個模組呢?因為任何一個應用都不可能不更新,除非廢掉的應用。那麼更新這個應用的時間可大可小,那麼由於更新期間導致應用不可用時間也服務估計。當然更加達不到題目所說的打造7×24小時的高可用應用了。

其實這個模組是最簡單的,但是達到的效果也是最明顯的,不過也正是PAAS平臺的特性才容易完成。因為PAAS平臺的應用更新和執行是兩個分離的任務,我們完全可以一邊更新應用一邊繼續讓應用提供服務,並且在新更新應用沒有完全能夠提供服務以前一直讓老服務繼續提供服務,完全不影響應用對外提供的服務。

這個模組實現還需要通過排程模組來完成,在應用更新期間,我們一直讓以前執行的例項繼續執行,一直到更新的應用已經正常運行了,才停止掉老的執行例項。這些啟動或者停止動作都交給排程模組完成,這個模組主要就是控制邏輯就可以了。

上面介紹的模組有一個缺點就是在新應用啟動成功並對外提供服務以後去停止老例項的時候,使用者可能感受到不一致的服務狀態。因為在老例項還沒有完全停止掉以前可能還有請求達到例項,但是又可能偶爾到新例項,因為新老例項可能同時存在一個很小的時間段,不過這對大部分應用應該是可以忽略的。

如果你完全不能忍受這短暫的不一致狀態,那麼還可以在路由那一塊做,保證使用者請求到達要麼全部到老例項要麼全部到新例項,具體做法就是新例項和老例項的路由地址不會同時存在路由程式的路由表裡面。

第四,總結

通過上面的三種模組的設計基本上能夠打造7×24小時的應用了,雖然方案設計完成了,但是真正的實施了還會遇到很多意料不到的情況,要正在打造7×24小時的應用執行環境還需要很多其他方面的考慮,比如說每一個模組執行的穩定性,如果應用執行狀態監控模組都掛掉了還怎麼啟動掛掉的應用。所以好的方案還需要好的實踐,通過實踐調整方案。

相關推薦

PAAS平臺構建7×24小時可用應用方案設計

現在很多企業都在搭建自己的私有PAAS平臺,當然也有很多大型網際網路公司搭建共有PAAS平臺(例如SAE/BAE/JAE(jae.jd.com))。那麼使用PAAS平臺來部署SAAS應用有哪些好處呢?除了大家都知道方便部署管理,節約資源和成本,今天我主要給大家介紹另一個好處就

SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(七)可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註冊中心。 在其

SpringCloud微服務雲架構構建B2B2C電子商務平臺之- (七)可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註冊中心。 在

關於SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(七)可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註

關於SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(十)可用的服務註冊中心

一、準備工作Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other. In fact, this is the

SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(十)可用的服務註冊中心

一、準備工作 Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other. In fact, this i

亞馬遜AWS在線系列講座——基於AWS雲平臺可用應用設計

data 可用 mod -m 討論 數據 目標 popu 實例 設計高可用的應用是架構師的一個重要目標。可是基於雲計算平臺設計高可用應用與基於傳統平臺的設計有很多不同。雲計算在給架構師帶來了很多新的設計挑戰的時候,也給帶來了很多新的設計理念和可用的服務。怎樣在設計應用的

CentOS 7下搭建可用集群

default pacemaker local 時間同步 use 告訴 -c ddr 目標 一 、安裝集群軟件 必須軟件pcs,pacemaker,corosync,fence-agents-all,如果需要配置相關服務,也要安裝對應的軟件。 二、配置防火墻1、禁止防火墻和

紅帽5、紅帽6、紅帽7 可用解決方案的組合程序

resource lin 底層 方式 crm 一個 message 守護 ha集群 紅帽6:corosync 版本1 + pacemaker + pcs或crmsh corosync 版本1 + cman + pacemaker 紅帽7:corosync + pac

構建MHA實現MySQL可用集群架構

MySQL數據庫實現故障自動轉移一、MHA簡介 MHA(Master HighAvailability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟件。在

Hadoop-2.7.3 HA可用搭建

0.zookeeper叢集的搭 略,自行百度 1.hadoop2.7.3下載 http://hadoop.apache.org/releases.html 2.tar 解壓,mv到 /data,並將資料夾改為hadoop(也可以不改,

阿里大牛手把手教你構建一個高效能、可用的大型分散式網站

大型分散式網站架構技術 大型網站的特點 大型網站一般有如下特點: 1.使用者多,分佈廣泛 2.大流量,高併發 3.海量資料,服

CentOS 7下搭建可用叢集

本文以兩臺機器實現雙集熱備高可用叢集,主機名node1的IP為192.168.122.168 ,主機名node2的IP為192.168.122.169 。 一、安裝叢集軟體 必須軟體pcs,pacemaker,corosync,fence-agents-all,如果需要配置相關服務,也要安裝對

CentOS7+Hadoop2.7.2(HA可用+Federation聯邦)+Hive1.2.1+Spark2.1.0 完全分散式叢集安裝

本文件主要記錄了Hadoop+Hive+Spark叢集安裝過程,並且對NameNode與ResourceManager進行了HA高可用配置,以及對NameNode的橫向擴充套件(Federation聯邦) 1VM網路配置 將子網IP設定為192.168.1.0: 將閘道器設定

hadoop 2.7.2 + zookeeper 可用叢集部署

一.環境說明 虛擬機器:vmware 11 作業系統:Ubuntu 16.04 Hadoop版本:2.7.2 Zookeeper版本:3.4.9 二.節點部署說明 三.Hosts增加配置 sudo gedit /etc/hosts wxzz-pc、wxzz-pc0、

Centos 7 MYSQL-MMM可用

bec lean mon 上網 lease 直接 cache 復制 pass Centos 7 MYSQL-MMM高可用 操作環境: 虛擬機:5臺雙網卡 第一塊內網,第二塊外網(虛擬機一定要能上網)192.168.80.100 主數據庫1192.168.80.1

hadoop2.7.5搭建可用叢集

<!-- 指定副本數 --><property><name>dfs.replication</name><value>2</value></property><!-- 配置namenode和datanode的工作目錄-資

手把手教你構建一個高效能、可用的大型分散式網站

本文是學習大型分散式網站架構的技術總結,對構建一個高效能、高可用、可伸縮及可擴充套件的分散式網站進行了概要性描述,並給出一個架構參考。 文中一部分為讀書筆記,一部分是個人經驗總結,對大型分散式網站架構有較好的參考價值。 大型分散式網站架構技術 大型網站的特點 大型

CTP 7*24小時期貨自動交易程式

執行程式:免責宣告:本程式需要在Win 64位作業系統下執行。程式的設定均採用了文字檔案,便於修改。雖提供了靈活性,但修改時應當確保修改的正確性。請通讀全檔案後再行使用。程式執行依賴於準確的計算機時間,請做如下設定:在桌面右下角的時間上單擊右鍵,選擇“調整日期/時間”。在彈出

如何實現7*24小時靈活釋出?阿里技術團隊這麼做

阿里妹導讀:研發效能分為兩塊,一是用技術的更新來提升效率;二是提高整個技術生態中的協同效率,激發技術活力。阿里巴巴技術團