如何基于阿里云搭建适合初创企业的轻量级架构?
----基于阿里云搭建的適合初創(chuàng)企業(yè)的輕量級架構(gòu)
前言
在項(xiàng)目的初期往往存在很多變數(shù),業(yè)務(wù)邏輯時(shí)刻在變,而且還要保證快速及時(shí),所以,一個(gè)靈活多變、快速部署、持續(xù)集成并可以適應(yīng)多種情況的架構(gòu)便顯得尤為重要。本文主要介紹基于阿里云搭建適合項(xiàng)目初期的后端架構(gòu),至于細(xì)節(jié)操作不作描述,比如nginx配置優(yōu)化、linux內(nèi)核優(yōu)化、防火墻配置、ansible的使用等。
項(xiàng)目背景
項(xiàng)目的組成: 兩個(gè)IOS客戶端,一個(gè)微信端,一個(gè)管理系統(tǒng),智能硬件。
項(xiàng)目初期的運(yùn)維架構(gòu)
總體架構(gòu)
項(xiàng)目后端架構(gòu)使用阿里云服務(wù)搭建,其中RDS為主從集群,并配備災(zāi)備實(shí)例。ECS可根據(jù)業(yè)務(wù)量動態(tài)彈性伸縮,其余服務(wù)均采用單實(shí)例的方式遠(yuǎn)程調(diào)用。
VPC
搭建VPC的原因有以下幾點(diǎn):
舉個(gè)例子:同樣一臺ECS,在同為百兆帶寬的情況下,每月的費(fèi)用如下圖:
?
?
當(dāng)然,能這樣的做的原因也是因?yàn)樵谶@個(gè)架構(gòu)中,ECS僅處理業(yè)務(wù)邏輯,幾乎不存儲文件資源。大部分靜態(tài)資源,如視頻圖片等,都是存儲在OSS上。如果存放靜態(tài)資源,比如下視頻或圖片什么的,流量一多那就很虧了。
業(yè)務(wù)數(shù)據(jù)層
- RDS
項(xiàng)目一開始,RDS選購的是共享型單實(shí)例的,隨著業(yè)務(wù)量的提升,可以多區(qū)域部署只讀實(shí)例。另外,保險(xiǎn)起見,主實(shí)例可以配有一個(gè)災(zāi)備實(shí)例,防止意外發(fā)生。
- Redis
阿里云的這個(gè)Redis,一開始我用的時(shí)候比較早,那個(gè)時(shí)候還不支持主從的,只能單實(shí)例,所以主要用它做數(shù)據(jù)緩存,響應(yīng)速度非常快。而且,因?yàn)槭欠胖迷趦?nèi)網(wǎng)的且只能內(nèi)網(wǎng)訪問,所以安全性也很高。
目前阿里云redis已經(jīng)可以支持主從集群,使用它實(shí)現(xiàn)一些業(yè)務(wù)場景也是個(gè)很不錯(cuò)的選擇。比如有序集合可以用來做數(shù)據(jù)權(quán)重分析后的數(shù)據(jù)排序,哈希表可以用來存儲具有簡單映射關(guān)系的字典表,還有消息隊(duì)列,消息訂閱等等其它場景都可以使用redis實(shí)現(xiàn),并進(jìn)行持久化存儲。
- MongoDB
結(jié)構(gòu)型數(shù)據(jù),主要存儲檔案式的數(shù)據(jù),比如每個(gè)用戶的操作行為,以檔案式記錄并進(jìn)行統(tǒng)計(jì)分析,方便下一階段的項(xiàng)目做個(gè)性化服務(wù)。另外一些關(guān)聯(lián)復(fù)雜的數(shù)據(jù),也可以用MongoDb存儲,可以提高訪問速度。還有,一些對軟件應(yīng)用版本比較敏感的數(shù)據(jù)也可以存在MongoDB中,比如a版本拿到A數(shù)據(jù),b版本拿到B數(shù)據(jù),而這個(gè)AB數(shù)據(jù)都是由很多關(guān)聯(lián)關(guān)系復(fù)雜的數(shù)據(jù)所組成,如果把這些數(shù)據(jù)根據(jù)版本號存儲在不同的MongoDB檔案中,需要時(shí),直接根據(jù)版本號拿就可以了,這樣就避免了很多的mysql查詢。
靜態(tài)資源
- OSS + CDN
OSS存儲靜態(tài)資源,CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))可以加速靜態(tài)資源的下載速度。至于資源鏈接地址,客戶端可以通過接口訪問從后端業(yè)務(wù)數(shù)據(jù)庫中拿到。
服務(wù)器安全
- 運(yùn)維層面
- 業(yè)務(wù)層面
針對接口訪問的安全性,主要做了以下工作
服務(wù)器集群
- 主ECS
通過這臺ECS,可以管理其它從屬的ECS,并查看狀態(tài)。安裝的主要工具為ansible。
如果不需要用這臺ECS來做負(fù)載均衡的話,可以配置白名單連接,只允許管理員ip才能訪問。
- 從屬ECS
這類ECS服務(wù)器只存放邏輯代碼,所以當(dāng)需求量增加時(shí),只需增加此類服務(wù)器的個(gè)數(shù)即可。而且,在增加個(gè)數(shù)時(shí),可以使用之前制作好的鏡像,創(chuàng)建多臺相同環(huán)境的ECS服務(wù)器。每臺ECS的web環(huán)境為nginx1.10和php7,微服務(wù)容器環(huán)境用的docker。
- 負(fù)載均衡
負(fù)載均衡可以采用兩種方式
1.購買阿里云的負(fù)載均衡實(shí)例(注意要買帶公網(wǎng)ip的)。由該負(fù)載均衡實(shí)例接收請求后,會分發(fā)到內(nèi)部服務(wù)器。2.在某臺具有外網(wǎng)ip的ECS上使用nginx部署負(fù)載均衡服務(wù)。個(gè)人更傾向第一種,畢竟管理起來比較方便,節(jié)省人力。使用到的第三方服務(wù)
- Coding
后端代碼的自動部署是通過Coding的webhook實(shí)現(xiàn)的,具體操作可以去看這篇博客《利用Coding的webhook自動部署項(xiàng)目》。使用其它代碼托管平臺也有基于git的webhook功能,操作方式大致相同。
實(shí)現(xiàn)的場景:代碼的自動部署與持續(xù)集成。 當(dāng)我提交代碼到開發(fā)分支上時(shí),測試服務(wù)器上會自動更新開發(fā)分支上的代碼。 當(dāng)我把開發(fā)代碼合并到主分支上時(shí),正式服務(wù)器會自動拉取master分支上的代碼,可謂是方便快捷。 jenkins 之類的工具雖然也嘗試過,但是感覺部署起來很不方便,不夠定制化,而且還消耗了一部分服務(wù)器資源。- 容聯(lián)·云通訊
主要用來實(shí)現(xiàn)短信通知、驗(yàn)證碼等功能 - 融云IM
主要用來實(shí)現(xiàn)ios客戶端之間的即時(shí)通訊以及客戶端的應(yīng)用消息推送。
后端邏輯層架構(gòu)
項(xiàng)目起初的接口是基于phalapi框架開發(fā),之后逐步過渡到基于laravel5.3開發(fā),感覺還是不夠靈活,與項(xiàng)目屬性有些不符,后來又轉(zhuǎn)到thinkphp5框架,但在使用中發(fā)現(xiàn)了一些問題,雖然提交了pr,但是響應(yīng)速度無法達(dá)到公司項(xiàng)目的迭代速度,于是就重寫的框架核心,并開發(fā)了一個(gè)支持多應(yīng)用后端場景的后端開源項(xiàng)目。框架核心保留大部分thinkphp5優(yōu)秀特性的同時(shí),又加入一些thinkphp5本身沒有的元素,且修改了很多代碼問題。
github:?https://github.com/AxiosCros/tpr-cms
項(xiàng)目主要集成了以下服務(wù)workman : 實(shí)現(xiàn)長連接場景gearman : 實(shí)現(xiàn)異步處理,及CGI到CLI模式切換rabbitMq :實(shí)現(xiàn)消息隊(duì)列場景,解耦生產(chǎn)者與消費(fèi)者還有其它服務(wù)的SDK重制版,如aliyun-sdk,Umeng、RongIM等以及一些項(xiàng)目中常用的工具如何根據(jù)業(yè)務(wù)量提高性能
- http請求的并發(fā)性能可以通過增加ECS實(shí)現(xiàn),針對部分耗時(shí)較長且無須即時(shí)回調(diào)的請求,可以用gearman異步處理。
- 數(shù)據(jù)庫的并發(fā)連接數(shù)可以通過增加配置來提高,也可以通過創(chuàng)建只讀實(shí)例進(jìn)行讀寫分離,提高數(shù)據(jù)處理能力。再往后,可能需要搭建hadoop管理數(shù)據(jù)庫集群,不過等用上hadoop的時(shí)候,應(yīng)該已經(jīng)不是項(xiàng)目初期了,至少數(shù)據(jù)量得是TB級的了。
- 其它還可以采用優(yōu)化nginx配置,優(yōu)化linux內(nèi)核,采用高速固態(tài)硬盤等等的手段。
總結(jié)評價(jià)
這套架構(gòu)基本上可以完全滿足項(xiàng)目初期的業(yè)務(wù)需要,而且所有的云服務(wù)費(fèi)用總和也非常少(相比于自建服務(wù)器機(jī)房)。隨著業(yè)務(wù)量的提升,可以逐步升級配置或者平行擴(kuò)展以應(yīng)對需求,可以在短時(shí)間內(nèi)臨時(shí)性的提高并發(fā)處理能力。總結(jié)起來就是省錢、省時(shí)、省力氣。
?
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的如何基于阿里云搭建适合初创企业的轻量级架构?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全面升级 | 阿里云中间件推出3款新品和
- 下一篇: 同样做前端,为何差距越来越大?