APP項(xiàng)目開發(fā)怎樣實(shí)現(xiàn)架構(gòu)的單機(jī)部署?(二)
APP項(xiàng)目開發(fā)架構(gòu)單機(jī)部署方法,本文接上一篇未完部分繼續(xù)與各位分享:
1.為什么要加入負(fù)載均衡HLB?
一般來說,只有在訪問量達(dá)到一定的程度時,才需要使用負(fù)載均衡把請求分發(fā)到集群中的服務(wù)器,減輕單臺服務(wù)器的壓力。深圳APP開發(fā)公司認(rèn)為這是因?yàn)閁Cloud的負(fù)載均衡ULB是免費(fèi)的,在這個階段提前使用負(fù)載均衡ULB,把外網(wǎng)的請求轉(zhuǎn)發(fā)到云服務(wù)器,云服務(wù)器就不需要直接暴露在外網(wǎng),增加整個架構(gòu)的安全性,同時也不會增加額外的資金支出。
開發(fā)人員需要連接云服務(wù)器的ssh服務(wù),只需要在負(fù)載均衡ULB中把ssh端口的請求轉(zhuǎn)發(fā)到云服務(wù)器的ssh端口,就能通過ssh操作云服務(wù)。
2.為什么一開始就使用Redis?
因?yàn)镽edis既能用作緩存,又能充當(dāng)隊(duì)列服務(wù),使用同樣的軟件減輕運(yùn)維的負(fù)擔(dān)。同時其并發(fā)性能高,能在長時間內(nèi)應(yīng)對業(yè)務(wù)壓力,非常適于初期的項(xiàng)目。在這個業(yè)務(wù)時期,Redis具有下面的作用。
(1)驗(yàn)證用戶信息
在需要用戶登錄的App中,為了保持應(yīng)用服務(wù)器的無狀態(tài),在需要驗(yàn)證用戶信息的場景,每次App請求附帶用戶的信息來驗(yàn)證用戶的狀態(tài),由于每次App的請求都要驗(yàn)證信息,這種訪問頻次非常高的用戶信息行為應(yīng)該在Redis中進(jìn)行,如圖10-12所示。
(2)充當(dāng)消息隊(duì)列
這個階段架構(gòu)的要求是極簡化設(shè)計(jì),但極簡化設(shè)計(jì)不能犧牲用戶體驗(yàn),在App中,有個常見的響應(yīng)時間比較長的功能需求:發(fā)送驗(yàn)證碼用戶注冊的時候.App為了獲取用戶真實(shí)的社交關(guān)系,需要獲取用戶的手機(jī)號和手機(jī)通信錄信息,獲取手機(jī)號時為了驗(yàn)證手機(jī)號的真?zhèn)?。要通過手機(jī)驗(yàn)證碼驗(yàn)證手機(jī)號,但由于發(fā)送手機(jī)驗(yàn)證碼只能通過第三方的短信發(fā)送平臺發(fā)送,因此發(fā)送驗(yàn)證碼功能有可能響應(yīng)時間比較長。
為了使發(fā)送手機(jī)驗(yàn)證碼這個功能不影響API接口的響應(yīng)時間,通常的做法是把發(fā)送驗(yàn)證碼的功能放在消息隊(duì)列中處理,在這里Redis充當(dāng)消息隊(duì)列的角色,如圖10-13所示。
3.架構(gòu)中不包含文件服務(wù)
文件服務(wù)作為App后臺中使用得非常頻繁的服務(wù),在服務(wù)器中搭建文件服務(wù)有下面系列運(yùn)維和開發(fā)成本。
·當(dāng)容量不足時,要及時給文件系統(tǒng)擴(kuò)容。
·圖片的縮略、剪裁、水印等常見功能都需要研發(fā)。
·為了保證文件服務(wù)的高可用,最少需要兩臺文件服務(wù)器做互備。
·為了獲得更快的文件上傳和下載速度,需要更大的帶寬,但帶寬的成本非常高(視頻網(wǎng)站的財(cái)務(wù)報(bào)表顯示,帶寬的支出占總收入的30%以上).為了提升用戶體驗(yàn)投入這么多的資金不劃算。開發(fā)人員在架構(gòu)App后臺、涉及文件服務(wù)的時候,都應(yīng)該考慮以上的問題。
APP開發(fā)公司同推崇的架構(gòu)原則是,“盡量使用成熟可靠的云服務(wù)和開源軟件,自身只專注于業(yè)務(wù)邏輯”,使用文件云存儲服務(wù)后以上的問題都能解決。文件云存儲服務(wù)有如下的優(yōu)點(diǎn)。
·全網(wǎng)加速,根據(jù)使用場景選擇最優(yōu)的加速線路。
·云端數(shù)據(jù)處理,圖片縮略、剪裁、水印等常見操作都能通過相應(yīng)的API實(shí)現(xiàn),無須再重復(fù)造輪子。
·安全存儲,多機(jī)房互相備份,保證數(shù)據(jù)安全性。
·存儲無上限、支持高并發(fā)訪問。
·按下載量計(jì)費(fèi)的付費(fèi)模式更加靈活,節(jié)省更多的流動資金。
因此博納網(wǎng)絡(luò)認(rèn)為應(yīng)該把搭建文件服務(wù)器這塊從架構(gòu)中移除,直接使用文件云存儲服務(wù),讓研發(fā)人員投入更多的精力在業(yè)務(wù)上。
在這個階段追求的是快速搭建后臺架構(gòu),在圖10-12的架構(gòu)中,如果團(tuán)隊(duì)的開發(fā)語言是以PHP為主,那么相應(yīng)的架構(gòu)可以是Ngiux+PHP+Redis+MySQL這個經(jīng)典的組合。大量的初學(xué)者不知道怎樣在服務(wù)器上快速安裝并配置這個環(huán)境,根據(jù)APP開發(fā)公司工程師的觀察,大部分的做法是從網(wǎng)絡(luò)上搜索這些軟件對應(yīng)的安裝敦程(大多數(shù)是教編譯安裝的方法),一步步對照著教程安裝相應(yīng)的軟件,如果中選出現(xiàn)了和教程中不符合的現(xiàn)象,又是長時間的搜索,效率非常低。APP開發(fā)公司博納網(wǎng)絡(luò)以CentOS系統(tǒng)為例,列舉四種快速安裝Nginx+PHP+Redis+MySQLi的方法。
(1)使用yum i nstall命令,很快就能把Nginx+PHP+Redis+MySQL環(huán)境安裝完。但這種方法不推薦,因?yàn)檫@種方法安裝的軟件無法配置具體的編譯參數(shù),太多不可控的因素。
(2)在使用云服務(wù)器提供的鏡像市場中選擇鏡像安裝。
在UCloud中,當(dāng)創(chuàng)建一臺云主機(jī)的時候,可以從鏡像市場中選擇一個配置好基礎(chǔ)環(huán)境的鏡像創(chuàng)建服務(wù)器,如圖l0-14所示。
這種方式也是不推薦的,理由和(1)一樣,安裝的軟件無法配置具體的編譯參數(shù),太多不可控的因素。
(3)使用一鍵安裝包
網(wǎng)絡(luò)上有很多一鍵安裝包,只要輸入相應(yīng)的軟件版本和安裝路徑后,能很方便地安裝相應(yīng)的軟件,例如lnmp一鍵安裝包(http://www.lnmp.org)和ezhttp一鍵安裝包(https://github.com/centos-bz/ezhttp)。如果安裝某個軟件需要修改其編譯參數(shù),則查找安裝腳本對應(yīng)的部分修改就行。
這個階段的項(xiàng)目,一般都是由開發(fā)人員來當(dāng)運(yùn)維人員,這類鍵安裝包就是幫開發(fā)者處理了常見軟件的安裝、配置和優(yōu)化工作,搭建了大體框架,開發(fā)者如果有特殊的需求則在其基礎(chǔ)上修改就行了,減少了運(yùn)維上的負(fù)擔(dān),使用起來非常方便。
需要注意的是一鍵安裝包為了通用性,會在系統(tǒng)中安裝很多軟件,但未必所有軟件都是開發(fā)者所需要的,因此為了保證安全性,APP開發(fā)者在安裝腳本執(zhí)行完畢后還要關(guān)閉所有不需要的服務(wù),在防火墻中嚴(yán)格控制允許訪問的端口。
Docker是用于統(tǒng)開發(fā)和部署的輕量級Linux容器,讓開發(fā)者打包其應(yīng)用及相關(guān)的依賴包到個可移植的容器中,再發(fā)布到生產(chǎn)環(huán)境通過Docker能保證開發(fā)者機(jī)器和生產(chǎn)服務(wù)器上的軟件環(huán)境是一致的。
新浪微博等IT公司也在培養(yǎng)開發(fā)人員用Docker部署環(huán)境,這種部署方式是未來的方向,雖然在觀階段存在較高的學(xué)習(xí)成本。在這階段,隨著業(yè)務(wù)的發(fā)展,云服務(wù)器的性能慢慢不能應(yīng)對增長的訪問量,這時就有兩種升級選擇。
·硬件升級( scale up)
·獨(dú)立部署、集群或分布式(scale out)
在這個階段,APP開發(fā)公司認(rèn)為應(yīng)該是優(yōu)先選擇硬件升級(scale up)的方案,通過升級相應(yīng)硬件(CPU、內(nèi)存、帶寬等)來解決性能問題
優(yōu)先使用硬件升級(scale up)有下面幾點(diǎn)原因。
·云服務(wù)器升級硬件非常方便,在控制臺選擇相應(yīng)的配置、付款、重啟云服務(wù)器,5分鐘不用就完成升級。
·如果選擇獨(dú)立部署、集群或分布式(scale out).需要額外的運(yùn)維成本。這是個野蠻生長的時期,產(chǎn)品處于不斷摸索的階段,開發(fā)人員應(yīng)該把精力專注于業(yè)務(wù)和打磨產(chǎn)品上,盡量保持極簡化架構(gòu),不應(yīng)該花費(fèi)太多的精力在運(yùn)維。
由于每個App的業(yè)務(wù)不樣,可能某些App后臺把硬件配置升級到極限電沒法應(yīng)付訪問量上的壓力,這時就要根據(jù)具體的業(yè)務(wù)情況選擇獨(dú)立部署、集群或分布式(scale o ut)這些架構(gòu)升級的方案。而這些方案中,獨(dú)立部署是成本最低的,集群或分布式的成本較高,優(yōu)先考慮低成本的升級方案。
這個階段的總結(jié)如下
·優(yōu)先考慮使用云服務(wù)和熟悉的開源軟件,降低人力和時間成本
·重視迭代速度,避免過度設(shè)計(jì),務(wù)必先讓后臺能用。
·優(yōu)先考慮硬件升級(scale up)。好了,APP開發(fā)公司本文關(guān)“APP項(xiàng)目開發(fā)怎樣實(shí)現(xiàn)架構(gòu)的單機(jī)部署?”全文分享完畢,希望能給您APP規(guī)劃設(shè)計(jì)工作有所幫助,謝謝關(guān)注,博納網(wǎng)絡(luò)編輯整理。