在本站前面的章節(jié)中,按照App后臺架構(gòu)所需知識的層次,分別介紹了下面3部分的內(nèi)容。
·App后臺架構(gòu)中所用的技術(shù)講解。
·App后臺架構(gòu)中常用軟件的運維知識
·4類App后臺架構(gòu)剖析。
在本文中將會融合前面3部分的知識,結(jié)合深圳APP開發(fā)公司工程師參與過的App項目的后臺架構(gòu)經(jīng)驗,講述架構(gòu)的核心要素、架構(gòu)選型的特點,以及App后
臺架構(gòu)的演進。
1.APP架構(gòu)的核心要素
本文談?wù)摰氖羌軜?gòu)需要先弄明白:什么是架構(gòu)?
百科中關(guān)于軟件的定義如下:
軟件架構(gòu)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個方面的設(shè)計,把軟件架構(gòu)的定義對應(yīng)“App后臺架構(gòu)”,APP開發(fā)工程師程序員的定義是:由App后臺各個組件的功能描述、相互關(guān)系構(gòu)成的整體系統(tǒng)在App后臺的架構(gòu)中除了考慮App后臺的功能需求外,還需要考量下面5個核心的要素,如圖10-1所示
App后臺架構(gòu)的5個核心要素如下
高性能
高可用
可伸縮
可擴展
·安全性
APP開發(fā)公司下面逐一講述App后臺架構(gòu)的5個核心要素。
APP開發(fā)后臺架構(gòu)升級核心要素之一“高性能”
高性能是App后臺的個重要指標,除非其App是獨無二、不可或缺的,否則任何個用戶都無法忍受個響應(yīng)速度極隉的App,特別是移動互聯(lián)網(wǎng)這個講求快速響應(yīng)的環(huán)境。當App性能表現(xiàn)不理想、體驗差時,用戶就自然而然地放棄使用這個App,甚至會投入到競爭對手的懷抱。
性能問題也是驅(qū)動架構(gòu)發(fā)展的最直接力量,因為性能問題是最容易被用戶感知的,當打開個App的界面后,以前在1秒之內(nèi)就能從App后臺獲取數(shù)據(jù)并展示數(shù)據(jù)完畢了,但用戶量增大后,打開同樣的界面需要幾秒甚至幾十秒,那么開發(fā)者就要考慮改進架構(gòu)。從App發(fā)出請求到App后臺返回響應(yīng)結(jié)果,這過程如圖10-2所示
APP開發(fā)后臺架構(gòu)升級示意圖10-2App發(fā)出請求到App后臺返回響應(yīng)站果的過程
在App發(fā)出請求到App后臺返回響應(yīng)結(jié)果時,按照圖10-2中的展示,每層可以有下面的措施以提高系統(tǒng)的性能。
1.App層
(1)圖片、音頻、視頻等靜態(tài)資源,第一次下載后可以緩存在手機的SD卡,這樣就不用每次顯示圖片部需要下載。
(2)對于Feed、通知等內(nèi)容,使用增量更新的技術(shù).減少服務(wù)器的負擔和使用的流量。關(guān)于增量更新的詳細講解可查看本站“前面數(shù)據(jù)增量更新策略”一文。
(3)根據(jù)App當前的網(wǎng)絡(luò)環(huán)境下載不同的圖片數(shù)據(jù)。例如,使用查看原圖的功能,如果是在Wi-Fi環(huán)境下就下載原圖,如果是3G等移動網(wǎng)絡(luò)下就下載分辨率比原圖低但也清晰可見的縮略圖。
2.網(wǎng)絡(luò)傳輸層
(1)使用CDN技術(shù),讓用戶在最近的機房下載圖片、音頻、視頻等靜態(tài)資源,減少網(wǎng)絡(luò)傳輸?shù)臅r間,使用戶獲得更快的下載速度。
(2)在應(yīng)用服務(wù)器部署反向代理服務(wù)器、緩存熱點文件,使請求在到達應(yīng)用服務(wù)器前返回靜態(tài)資源,減輕應(yīng)用服務(wù)器的負擔,減少請求的時間。
3.應(yīng)用服務(wù)層
(1)在代碼層面,改進算法,使用多線程和優(yōu)化程序內(nèi)存等優(yōu)化方法。
(2)在語言層面,考慮使用Golang、Erlang等更適用于高并發(fā)場景的語言。
(3)通過異步操作把用戶的請求發(fā)送到消息隊列等待任務(wù)程序處理.減少請求的等待時間。
(4)將多臺應(yīng)用服務(wù)器組成個集群,使用負載均衡軟件把請求按定的規(guī)則分發(fā)到每個應(yīng)用服務(wù)器上,提高系統(tǒng)整體的處理能力。
(5)使用分布式緩存軟件緩存用戶的熱點請求數(shù)據(jù),加快服務(wù)器的響應(yīng)時間,減輕數(shù)據(jù)庫的負擔。
4.文件服務(wù)層
(1)使用MogileFS、TFS (Taobao F ileSvstem)、FastDFS等軟件架設(shè)個分布式文件系統(tǒng),提供整體的文件處理能力。
(2)使用七牛、又拍、UCloud的對象存儲(UFile)等第三方文件云存儲服務(wù),把文件存放在云服務(wù)器上,從而在架構(gòu)上去掉文件服務(wù)器,APP開發(fā)工程師推薦這種做法。
5.緩存層
可使用Redis、Memcached或者云服務(wù)器的云緩存服務(wù),這些基于內(nèi)存的緩存服務(wù)已經(jīng)提供了足夠而的性能。
6.數(shù)據(jù)庫層
(1)數(shù)據(jù)庫前加層或多層緩存,擋住大部分的熱點請求,使大部分的請求不穿透到數(shù)據(jù)庫,減輕數(shù)據(jù)的壓力。
(2)對于MySQL數(shù)據(jù)庫,可以使用讀寫分離、分表、分庫等成熟的技術(shù);對于NoSQL類型的產(chǎn)品,例如MongoDB.可以使用其原生的副本集、分片等機制,提升其性能。
(3)使用Facebook開源的FlashCache技術(shù),把傳統(tǒng)硬盤上的熱數(shù)據(jù)緩存在SSD硬盤上,冷門數(shù)據(jù)保存在傳統(tǒng)硬盤上,利用SSD優(yōu)秀的讀性能增加。好了,APP開發(fā)公司本文關(guān)于項目運行后期后臺架構(gòu)升級方面的經(jīng)驗與方法就分享到這里,謝謝關(guān)注,博納網(wǎng)絡(luò)會在后面的文章中繼續(xù)與各位分享關(guān)于后臺架構(gòu)升級的其他方面。