从0开始搭建坚不可摧的Web系统主流架构
從0開始搭建堅不可摧的Web系統(tǒng)主流架構(gòu)
轉(zhuǎn)自:http://mp.weixin.qq.com/s/HKqgdR0qM3FhdGWcWnlpug
主題簡介:
1、網(wǎng)站系統(tǒng)架構(gòu)當(dāng)前現(xiàn)狀
2、Web系統(tǒng)主流架構(gòu)解析
3、互聯(lián)網(wǎng)技術(shù)團(tuán)隊初期組建經(jīng)驗分享
本文主要結(jié)合我之前在海爾電商平臺和現(xiàn)在公司的一些實際架構(gòu)經(jīng)驗,綜合實際情況和個人的理解,跟大家分享一下搭建Web系統(tǒng)的一些常用的技術(shù)架構(gòu)和應(yīng)用技巧。
首先要跟大家探討一個問題,就是當(dāng)前傳統(tǒng)IT企業(yè)或是傳統(tǒng)企業(yè)的IT系統(tǒng)目前的系統(tǒng)架構(gòu)是怎樣的呢?
就我所經(jīng)歷的NEC軟件、海爾集團(tuán)、青島航空等某種程度上都屬于傳統(tǒng)企業(yè)。我本人也是最近三年在海爾搞電商平臺的時候,才更多地接觸互聯(lián)網(wǎng)的思維和技術(shù)架構(gòu)。
我在青島航空的這一年多時間里以及與青島其他IT同行討論時,發(fā)現(xiàn)了一個現(xiàn)象:就是目前很多傳統(tǒng)企業(yè)的技術(shù)架構(gòu)跟互聯(lián)網(wǎng)企業(yè)的技術(shù)架構(gòu)越來越相似了,或是傳統(tǒng)企業(yè)越來越傾向于互聯(lián)網(wǎng)的主流技術(shù)架構(gòu)和服務(wù)器部署等方式。
雖然傳統(tǒng)企業(yè)可能沒有互聯(lián)網(wǎng)企業(yè)的大流量、數(shù)據(jù)量,高并發(fā)(互聯(lián)網(wǎng)企業(yè)真正大流量高并發(fā)的也就那么幾家),但是兩者在技術(shù)架構(gòu)上的很多方面、方向都是一致的,個人感覺這是一個比較好的現(xiàn)象。傳統(tǒng)企業(yè)借鑒互聯(lián)網(wǎng)企業(yè)的一些優(yōu)秀的技術(shù)架構(gòu)和部署方式,可以更好地保障自身的業(yè)務(wù)系統(tǒng),提高系統(tǒng)的使用效率等。成熟的開源技術(shù)架構(gòu)也可以為企業(yè)節(jié)省很多IT成本。
青島航空有自己的官網(wǎng),偶爾搞個搶票,促銷或是暑運(yùn)春運(yùn),有時候會受到一些網(wǎng)絡(luò)的惡意攻擊。這時雖然流量會陡增,但是在目前的技術(shù)架構(gòu)上完全可以抵擋住。
本文將分析目前主流的一些Web技術(shù)架構(gòu),可能更適合中小互聯(lián)網(wǎng)公司或是一些中大型的傳統(tǒng)企業(yè),技術(shù)好壞關(guān)鍵看與實際情況集合得怎樣,希望大家能夠有所收獲,能夠在各自領(lǐng)域架構(gòu)系統(tǒng)的時候,能有所幫助。
架構(gòu)總圖
接下來進(jìn)入正題,首先看這張總圖:
所有的訪問請求(企業(yè)內(nèi)部訪問可能除外)都是要經(jīng)過企業(yè)級的防火墻設(shè)備。不管是企業(yè)自身的機(jī)房還是托管的IDC機(jī)房,一般最外層都是由防火墻把關(guān)所有訪問請求。對于一些惡意的木馬植入等,防火墻會抵擋住大部分。作為Web架構(gòu),最外層一定要選好防火墻,而且防火墻的架構(gòu)最低一般會選擇不同型號的兩臺。
防火墻之后會接入IPS(入侵防御系統(tǒng)),WAF(Web應(yīng)用防護(hù)系統(tǒng))。這一塊區(qū)域主要對網(wǎng)絡(luò)安全,系統(tǒng)安全做檢測和防護(hù)的,可以采用商業(yè)設(shè)備(推薦),資金不足的企業(yè)也可以采用開源設(shè)備,這里推薦一款開源產(chǎn)品OSSIM,有興趣的同學(xué)可以了解一下。
經(jīng)過網(wǎng)絡(luò)安全防護(hù)之后,接下來是我們的硬負(fù)載設(shè)備(該層可有可無),一般硬負(fù)載均衡設(shè)備主要有F5,A10,相對比較貴,企業(yè)可以根據(jù)情況選擇。
硬負(fù)載接下來一般會有一層軟負(fù)載(當(dāng)然軟負(fù)載和硬負(fù)載可以只留一種也可以都有)。軟負(fù)載層一般也會部署反向代理服務(wù)器,用作反向代理,也起到了防護(hù)安全的作用。
一般在網(wǎng)絡(luò)規(guī)劃上,該層位于DMZ區(qū)域,該層之下的服務(wù)器位于內(nèi)網(wǎng)。這塊隔離了外部請求和內(nèi)網(wǎng)的直接交互,安全上有所提高。一般該層的技術(shù)選擇有Nginx,Apache,Haproxy,LVS等。大部分應(yīng)該是一Nginx居多,既可以做負(fù)載均衡,也可以做反向代理,并且相對而言高并發(fā)效率更好。
關(guān)于這幾者的區(qū)別,網(wǎng)上也有很多,有興趣的同學(xué)可以多多比較。其中說明一點的是LVS是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生,其他三種是工作在7層之上,如果不適用硬負(fù)載設(shè)備的話,建議使用LVS作為流量轉(zhuǎn)發(fā)的負(fù)載設(shè)備,然后再是Nginx或是Haproxy。Apache在一些傳統(tǒng)企業(yè)存在或是使用得比較多,也比較穩(wěn)定。
一般在負(fù)載均衡后面是掛載的各種各樣的應(yīng)用服務(wù)器。在部署應(yīng)用服務(wù)器的時候一般會將靜態(tài)資源(JS,CSS,圖片,文件)等單獨(dú)一臺服務(wù)器部署,以減輕應(yīng)用服務(wù)器的帶寬和IO,提高訪問效率。將這些靜態(tài)資源部署在靜態(tài)資源服務(wù)器、文件服務(wù)器、圖片服務(wù)器等。一般地如果我們有CDN,會將這些靜態(tài)資源放在CDN上以提高網(wǎng)絡(luò)加載速度。常見的文件服務(wù)器和圖片服務(wù)器的技術(shù)架構(gòu)有FastDFS,MogileFS,GraphicsMagick等。
但是中小企業(yè)建議直接購買云服務(wù)。一是可以減少運(yùn)維成本,二是可以提高訪問的速度,一般云服務(wù)都搭配CDN。自己搭建文件或圖片服務(wù)器的運(yùn)維成本還是比較高,對技術(shù)要求也比較深入。這里大家在架構(gòu)的時候需要仔細(xì)考慮好。
應(yīng)用服務(wù)器一般是tomcat,IIS,resin等。一般有一個應(yīng)用視情況會有多臺服務(wù)器(最少2臺),應(yīng)用之間要解耦,應(yīng)用之間的依賴盡量采用接口交互(盡量避免數(shù)據(jù)庫方面dblink等方式)。各位在做應(yīng)用系統(tǒng)解耦的時候可以參考現(xiàn)在比較流行的服務(wù)化,微服務(wù)等技術(shù)架構(gòu)如dubbox等,但是需要對開發(fā)有一定的了解。雖然我們的團(tuán)隊經(jīng)歷過和正在做dubbox的服務(wù)化,但是本人參與不是很多,所以也希望能夠向大家多學(xué)習(xí)。
增加消息隊列服務(wù)器有以下幾點好處:
-
由于消息隊列服務(wù)器的速度遠(yuǎn)高于數(shù)據(jù)庫,能夠快速處理并返回數(shù)據(jù);
-
消息隊列服務(wù)器具有更好的擴(kuò)展性;
-
在高并發(fā)的情況下,延遲寫入數(shù)據(jù)庫,可以有效降低數(shù)據(jù)庫的壓力。
消息隊列經(jīng)常用在高并發(fā)應(yīng)用(如搶購),不同系統(tǒng)模塊間高速數(shù)據(jù)交互等。常用的消息隊列技術(shù)有ActiveMQ,RabbitMQ等,這些技術(shù)本身就有很好的集群或是主備機(jī)制,并且有監(jiān)控的頁面,非常方便快速擴(kuò)展和使用。監(jiān)控在使用的時候,一般需要腳本(CURL獲取監(jiān)控頁面的值和監(jiān)控頁面的http staus)或其他方式監(jiān)控,實現(xiàn)故障自動告警。
數(shù)據(jù)緩存服務(wù)器,常有的部署有Memcached,Redis等,目前應(yīng)該是以Redis居多吧。另外應(yīng)用應(yīng)用服務(wù)器集群的session問題也常常用到Redis。Redis自身的哨兵模式,集群Cluster(3.0以上版本支持)可以避免單點故障,方便橫向和縱向擴(kuò)展,緩存熱點數(shù)據(jù)提高訪問效率,在高并發(fā)環(huán)境也是經(jīng)常用到的技術(shù)。
這里要注意一下,并不是所有的Web架構(gòu)都需要消息隊列或是數(shù)據(jù)庫緩存,視情況而定,根據(jù)系統(tǒng)的并發(fā)量和訪問量評估。合適自己的才是最好的。
應(yīng)用跟數(shù)據(jù)庫之間一般要盡量避免應(yīng)用直接連接數(shù)據(jù)庫,采用數(shù)據(jù)庫連接池的方式。數(shù)據(jù)庫連接池技術(shù)帶來的優(yōu)勢有資源復(fù)用、更快的相應(yīng)速度、統(tǒng)一的連接管理、避免連接泄露等好處。常用的有c3p0,dbcp,druid等,這里強(qiáng)烈推薦Druid。
數(shù)據(jù)庫連接池后面就是數(shù)據(jù)庫了。數(shù)據(jù)庫種類也比較多,常用的有Oracle,MySQL等。當(dāng)然了,一個系統(tǒng)使用一套數(shù)據(jù)庫,盡量避免多套應(yīng)用系統(tǒng)使用同一個數(shù)據(jù)庫。
由于數(shù)據(jù)庫的重要性,需要考慮到數(shù)據(jù)庫方案。包括實現(xiàn)數(shù)據(jù)庫的高可用、負(fù)載均衡等,有些電商平臺還需要實現(xiàn)讀寫分離,數(shù)據(jù)庫的橫向縱向拆分等,以實現(xiàn)復(fù)雜的數(shù)據(jù)庫應(yīng)用。
Oracle的常用架構(gòu)有RAC,DG(dataguard),而Oracle的成本比較高,所以很多中小企業(yè)會選擇MySQL。MySQL也有不同的分支和技術(shù)方案,如官方版本的MariaDB,PerconaDB等。常用的高可用架構(gòu)有復(fù)制,Cluster,不同分支都有支持,這里我推薦大家使用MariaDB10.0以上的版本,效率相對較高。
MySQL的中間件也比較多,用來支持負(fù)載均衡,讀寫分離,分庫分表等。如OneProxy,MyCAT等都是非常優(yōu)秀的MySQL數(shù)據(jù)庫中間件,建議大家有時間多研究,架構(gòu)出穩(wěn)定可靠的數(shù)據(jù)庫集群。
數(shù)據(jù)庫的備份和恢復(fù)這里就不單獨(dú)說了,在下面的災(zāi)備方案中統(tǒng)一說明。
一般企業(yè)會有專業(yè)的存儲設(shè)備。存儲設(shè)備的raid選擇、主備架構(gòu)方案等都需要提前架構(gòu)以及跟存儲廠商溝通討論。作為最關(guān)鍵的設(shè)備之一,一定要避免單點故障,否則將導(dǎo)致整個IT系統(tǒng)宕機(jī)。
以上是關(guān)于常見的Web系統(tǒng)架構(gòu)的一個概述,以及常用的一些技術(shù)方案的說明,有不足之處,請大家多多指教,相互學(xué)習(xí)。
災(zāi)備方案
接下來跟大家介紹關(guān)于備份相關(guān)的問題。不管傳統(tǒng)企業(yè)還是互聯(lián)網(wǎng),備份一定是一個及其關(guān)鍵重要的工作。沒有備份,就意味著系統(tǒng)沒有最基本的保障。
常見的災(zāi)備方案一般是同城熱備,異地災(zāi)備的方式,即兩地三中心的方式。同城的網(wǎng)絡(luò)延遲一般可以做到比較小,所以在用實時熱備的方式是可行的。將應(yīng)用服務(wù)器、數(shù)據(jù)庫等通過實時同步的方式,數(shù)據(jù)傳輸?shù)酵瞧渌麢C(jī)房,實現(xiàn)跨機(jī)房的熱備。
異地采用延遲備份的方式。將本地機(jī)房的備份集通過網(wǎng)絡(luò)傳輸傳送一份到異地機(jī)房實現(xiàn)異地災(zāi)備。其中異地災(zāi)備是有數(shù)據(jù)延遲的,一般一天。
不管是應(yīng)用服務(wù)器,還是數(shù)據(jù)備份的方式都有很多種,因時間限制就不一一跟大家分享了。這里要著重注意的是備份集的測試方案,一定要與災(zāi)備方案一起,并根據(jù)測試方案嚴(yán)格定時執(zhí)行,確保備份集的準(zhǔn)確性。
其他方面
作為一套完整的IT技術(shù)架構(gòu)方案,其實還有很多方面需要考慮,例如監(jiān)控方案。我們常用的監(jiān)控方案有l(wèi)epus監(jiān)控數(shù)據(jù)庫、Zabbix、腳本三者結(jié)合的方式。通過郵件,阿里大于短信等方式發(fā)送報警,日志服務(wù)器用于采集和分析日志,如ELK等。還有一般企業(yè)會有數(shù)據(jù)平臺用于分析自己數(shù)據(jù),這里可以參考我的另一篇文章《數(shù)據(jù)即金錢,中小企業(yè)如何搭建數(shù)據(jù)平臺分得一杯羹?》
另外一般企業(yè)為了節(jié)省成本會考慮虛擬化,將服務(wù)器等硬件資源虛擬化,提高利用率節(jié)省企業(yè)的成本,進(jìn)而為企業(yè)的私有云搭建奠定基礎(chǔ)。以后希望有機(jī)會跟大家一起交流虛擬化+私有云的技術(shù)方案,這也是我們現(xiàn)在正在著手進(jìn)行的,很有實踐參考意義。
關(guān)于互聯(lián)網(wǎng)創(chuàng)業(yè)初期技術(shù)團(tuán)隊
上面這些是關(guān)于技術(shù)方面的架構(gòu),接下來的時間簡單分享一下關(guān)于技術(shù)團(tuán)隊初創(chuàng)期間的一些經(jīng)驗教訓(xùn)和想法,歡迎拍磚。
主要以下幾點:
-
以核心業(yè)務(wù)為中心,初期技術(shù)團(tuán)隊不斷滿足業(yè)務(wù)需求。避免盲目擴(kuò)張團(tuán)隊規(guī)模和采用過于超強(qiáng)的技術(shù)架構(gòu),技術(shù)架構(gòu)要匹配業(yè)務(wù)發(fā)展的需求和規(guī)模。
-
建議初期以外包為主,但是核心業(yè)務(wù)和技術(shù)架構(gòu)必須以自己團(tuán)隊的人為主且不能動搖。要有外包項目結(jié)束后能迅速接手的能力。
-
團(tuán)隊要小而精,扁平化管理,少管理崗,多技術(shù)崗,團(tuán)隊要有共同的目標(biāo)和發(fā)展愿景。
傳統(tǒng)企業(yè)轉(zhuǎn)型互聯(lián)網(wǎng)尤其要注意,縱使財大氣粗,也要精打細(xì)算。就個人而言,經(jīng)歷過IT團(tuán)隊短短一年左右的時間從13人到200多號人,業(yè)務(wù)規(guī)劃卻遲遲沒有突破的情況,最終大批裁員,拼命掙扎的一種狀態(tài)。
友情提醒一下各位,當(dāng)注意到團(tuán)隊成員工作并不飽和,但同一崗位還有招聘計劃時,一定要考慮一下是該招聘還是該減員。
縱觀一批批倒下的初創(chuàng)公司,失敗的經(jīng)驗教訓(xùn)很值得我們深入研究和學(xué)習(xí)。
Q1:如果公司對于it不打算花太多成本,請問如果僅對于企業(yè)內(nèi)部使用erp管理系統(tǒng)的架構(gòu) 哪些節(jié)點可以省掉,哪些又是必須的呢?
A1:如果是打算上ERP的話,建議直接購買國內(nèi)的ERP系統(tǒng),一般價格相對便宜,功能比較齊全適合國人使用。我本人并沒有部署過成型的商業(yè)ERP系統(tǒng),所以對于商業(yè)ERP系統(tǒng)這一塊不是特別理解。就我們青島航空而言呢,是購買的oracle的ERP系統(tǒng),但是呢,只是購買了財務(wù)模塊,ERP和數(shù)據(jù)庫都是部署在一臺機(jī)器上,跟其他業(yè)務(wù)系統(tǒng)如官網(wǎng)等是分開隔離的。另外購買商業(yè)ERP系統(tǒng)的時候,供應(yīng)商在實施的時候,一定要讓最好熱備(或是冷備)和數(shù)據(jù)庫相關(guān)的備份,避免單點故障導(dǎo)致整個公司的ERP系統(tǒng)難以運(yùn)作影響正常經(jīng)營。
總結(jié)
以上是生活随笔為你收集整理的从0开始搭建坚不可摧的Web系统主流架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “烟江澹秋色”上一句是什么
- 下一篇: IntelliJ IDEA 教程