紅包是春節(jié)習(xí)俗,原本是討個(gè)吉利的意圖。在互聯(lián)網(wǎng)技術(shù)高度發(fā)展的今天,用手機(jī)搶紅包已經(jīng)成為一種文化、一種生活方式;據(jù)支付寶統(tǒng)計(jì)的數(shù)據(jù)顯示,2016年2月7日除夕夜,支付寶共四輪“咻一咻”互動(dòng)平臺(tái)的總參與次數(shù)達(dá)到了3245億次;在21點(diǎn)09分,用戶的參與熱情達(dá)到了頂峰,“咻一咻”峰值一度達(dá)到210億次/分鐘。 業(yè)務(wù)需求催生技術(shù)升級(jí),隨著紅包業(yè)務(wù)的大眾化、普遍化,我們對(duì)高可用、可擴(kuò)展、按需提供服務(wù)的技術(shù)架構(gòu)要求越來(lái)越高。下面介紹一種基于阿里云容器服務(wù)及相關(guān)云產(chǎn)品組成的高可用搶紅包系統(tǒng)框架; 系統(tǒng)架構(gòu): 下圖給出了基于阿里云相關(guān)產(chǎn)品實(shí)現(xiàn)的搶紅包系統(tǒng)架構(gòu),所涉及的產(chǎn)品包括阿里云容器服務(wù),MNS,RDS,SLB,SLS等。 用戶端:模擬用戶搶紅包軟件(如支付寶),能發(fā)送用戶的的搶紅包請(qǐng)求,并攜帶身份ID等信息;根據(jù)服務(wù)端的響應(yīng),把中獎(jiǎng)信息反饋給用戶; 請(qǐng)求處理邏輯:用戶發(fā)送搶紅包信息到“請(qǐng)求處理邏輯集群”,這部分有SLB、ECS集群,ECS集群通過阿里云容器服務(wù)實(shí)現(xiàn)容器化。可以接收用戶請(qǐng)紅包請(qǐng)求,并調(diào)用接口進(jìn)行身份驗(yàn)證、MNS獲取消息(搶紅包)等;通過MNS反饋消息判斷是否中獎(jiǎng),并反饋給用戶; 身份驗(yàn)證模塊:用戶驗(yàn)證搶紅包用戶的身份,可以根據(jù)業(yè)務(wù)實(shí)現(xiàn)不同的限制;例如約定同一個(gè)用戶ID在一定時(shí)間內(nèi)只能搶一次、或者隨機(jī)放棄1/2的用戶請(qǐng)求; 紅包管理監(jiān)控:顯示當(dāng)前MNS中有效紅包數(shù);進(jìn)行紅包發(fā)放操作,可以設(shè)定總紅包數(shù),多批次發(fā)放,以及發(fā)放時(shí)間間隔等;可以基于SLS日志服務(wù)進(jìn)行紅包數(shù)據(jù)統(tǒng)計(jì); MNS服務(wù):模擬紅包隊(duì)列,請(qǐng)求處理模塊通過從MNS搶消息來(lái)模擬搶紅包,搶到消息的請(qǐng)求即為搶到紅包;同時(shí)通過往MNS中發(fā)送消息模擬賽紅包; SLS服務(wù):日志存儲(chǔ)服務(wù),會(huì)把搶紅包過程中產(chǎn)生的狀態(tài)日志(中獎(jiǎng)、未中獎(jiǎng)、驗(yàn)證錯(cuò)誤等)進(jìn)行統(tǒng)計(jì)、并持久化; RDS服務(wù):存儲(chǔ)用戶相關(guān)信息,驗(yàn)證搶紅包用戶的身份;持久化紅包發(fā)放信息,包含抽中紅包用戶的ID,時(shí)間,紅包ID等; SLB服務(wù):對(duì)用戶請(qǐng)求進(jìn)行負(fù)載均衡; 其中MNS、SLS、RDS、SLB都通過阿里云提供的云服務(wù)實(shí)現(xiàn),其余組件均通過簡(jiǎn)單的代碼實(shí)現(xiàn),并通過容器服務(wù)進(jìn)行微服務(wù)化; 下圖以容器服務(wù)為中心描述了系統(tǒng)之間的調(diào)用: 實(shí)現(xiàn)細(xì)節(jié): 系統(tǒng)通過4個(gè)微服務(wù)相互配合,并引用RDS、MNS、SLS等提供的服務(wù)能力;下面是通過容器服務(wù)部署的編排文件內(nèi)容: webpage: image: registry.cn-hangzhou./junbao/redpacket_webpage:v5 restart: always labels: aliyun.routing.port_80: http://test/webpage aliyun.logs: /var/log aliyun.probe.url: http://container/index.jsp aliyun.scale: '3' aliyun.auto_scaling.max_cpu: '70' aliyun.auto_scaling.min_cpu: '40' aliyun.auto_scaling.step: '1'redpacket: image: registry.cn-hangzhou./junbao/redpacket_redpacket:v12 restart: always environment: DB_HOST: 'rm-bp1y1o7ga6hsm257o.mysql.rds.' DB_PORT: '3306' DB_NAME: 'redpacket_account_check' DB_USER: 'docker' DB_PASSWD: '***' ACCOUNT_CHECK_IP: 'account.local' MNS_URL: 'http://1171330362041663.mns.cn-hangzhou.' ACCESS_KEY_ID: 'hDfTgHQ5xKn45q8a' ACCESS_KEY_SECRET: '*******' external_links: - 'account.local' labels: aliyun.routing.port_80: http://test/redpacket aliyun.logs: /var/log aliyun.probe.url: http://container/redpacket/test aliyun.scale: '2' aliyun.log_store_redpacket: /var/log/redpacket_access.log aliyun.log.timestamp: 'false' aliyun.auto_scaling.max_cpu: '70' aliyun.auto_scaling.min_cpu: '40' aliyun.auto_scaling.step: '1'account: image: registry.cn-hangzhou./junbao/redpacket_account:v12 restart: always environment: DB_HOST: 'rm-bp1y1o7ga6hsm257o.mysql.rds.' DB_PORT: '3306' DB_NAME: 'redpacket_account_check' DB_USER: 'docker' DB_PASSWD: '***' labels: aliyun.routing.port_80: account.local aliyun.logs: /var/log aliyun.probe.url: http://container/test aliyun.scale: '2' aliyun.auto_scaling.max_cpu: '70' aliyun.auto_scaling.min_cpu: '40' aliyun.auto_scaling.step: '1'monitor: image: registry.cn-hangzhou./junbao/redpacket_monitor:v18 restart: always environment: DB_HOST: 'rm-bp1y1o7ga6hsm257o.mysql.rds.' DB_PORT: '3306' DB_NAME: 'redpacket_account_check' DB_USER: 'docker' DB_PASSWD: '***' MNS_URL: 'http://1171330362041663.mns.cn-hangzhou.' ACCESS_KEY_ID: 'hDfTgHQ5xKn45q8a' ACCESS_KEY_SECRET: '****' labels: aliyun.routing.port_80: http://test/monitor aliyun.logs: /var/log aliyun.scale: '1' 根據(jù)上面編排模板內(nèi)容介紹阿里云容器服務(wù)特點(diǎn): 可伸縮性: 可通過對(duì)CPU、內(nèi)存的使用限制定義容器服務(wù)的伸縮功能; aliyun.auto_scaling.max_cpu: '70'aliyun.auto_scaling.min_cpu: '40'aliyun.auto_scaling.step: '1' 上面配置表示容器內(nèi)CPU使用率超過70%時(shí)會(huì)自動(dòng)擴(kuò)展一個(gè)容器,且容器內(nèi)CPU使用率低于40%時(shí)會(huì)自動(dòng)縮減一個(gè)容器;詳見: https://help.aliyun.com/document_detail/26017.html?spm=5176.doc26018.6.601.fo3Esr 簡(jiǎn)單路由服務(wù): 在編排模板中添加 routing 標(biāo)簽,定義相應(yīng)的域名或者域名前綴??梢詫?shí)現(xiàn)簡(jiǎn)單的 7 層協(xié)議負(fù)載均衡; aliyun.routing.port_80: http://test/monitor 上面配置表示可以通過以下域名訪問服務(wù),其中test為域名的前綴,monitor為URL的path部分; http://test.c61d9ad24beea4d93a4f574202f443a44.cn-beijing./monitor 集群內(nèi)服務(wù)發(fā)現(xiàn)與負(fù)載均衡: 具體的系統(tǒng)中,有一些服務(wù)是不愿對(duì)外開放的,例如本系統(tǒng)的賬號(hào)驗(yàn)證服務(wù);阿里云容器服務(wù)引入了集群內(nèi)負(fù)載均衡功能,您只需要使用以 .local 結(jié)尾的域名,并在依賴的服務(wù)的 external_links 中增加這個(gè)域名,依賴的服務(wù)便可以通過 .local 的域名訪問到依賴的服務(wù),并且能夠配合健康檢查做到自動(dòng)的服務(wù)發(fā)現(xiàn)。 aliyun.routing.port_80: account.localexternal_links: - 'account.local' 詳見: https://help.aliyun.com/document_detail/35358.html?spm=5176.doc25984.6.654.cqipVM 日志服務(wù): 阿里云日志服務(wù)(Log Service,簡(jiǎn)稱SLS)是針對(duì)日志場(chǎng)景的平臺(tái)化服務(wù)。適用于日志中轉(zhuǎn)、監(jiān)控、性能診斷、日志分析、審計(jì)等場(chǎng)景。容器服務(wù)提供了集成日志服務(wù)的能力,可以方便地將應(yīng)用日志發(fā)送到日志服務(wù)里。 aliyun.log_store_redpacket: /var/log/redpacket_access.log 上述定義會(huì)將容器內(nèi)/var/log/redpacket_access.log文件內(nèi)的內(nèi)容輸入到相應(yīng)的日志服務(wù)中;詳見: https://help.aliyun.com/document_detail/26036.html?spm=5176.doc35358.6.633.Gy4q50 系統(tǒng)示例 1 搶紅包系統(tǒng)第一步首先要把紅包塞進(jìn)“口袋”,可以通過管理模塊進(jìn)行相關(guān)操作; 訪問管理監(jiān)控服務(wù)頁(yè)面提示的訪問端點(diǎn),然后點(diǎn)擊發(fā)放紅包頁(yè)面; 可以在頁(yè)面中輸入紅包相關(guān)信息,紅包總數(shù)、發(fā)放次數(shù)、時(shí)間間隔等; 上圖中表示:分3次發(fā)放10個(gè)紅包,每次的發(fā)放間隔是2秒;點(diǎn)擊“發(fā)放紅包”效果如下: 2 第二步:塞完紅包后,即可進(jìn)行搶紅包活動(dòng); 通過Webpage頁(yè)面提示的訪問端點(diǎn),可以登錄搶紅包主頁(yè)面; 搶紅包頁(yè)面可以配置一些用戶相關(guān)的信息用于紅包發(fā)放時(shí)的證據(jù);本示例中僅使用一個(gè)識(shí)別碼,憑識(shí)別碼信息領(lǐng)獎(jiǎng);點(diǎn)擊搶紅包即可完成操作; 3 作為搶紅包的組織者除了把紅包分發(fā)給用戶,仍然期望對(duì)當(dāng)前紅包狀態(tài),以及所有紅包的分布有所了解; 可以訪問監(jiān)控模塊的數(shù)據(jù)分析頁(yè)面查看相關(guān)數(shù)據(jù),監(jiān)控模塊通過SLS提供的數(shù)據(jù)接口獲取日志信息,并進(jìn)行數(shù)據(jù)統(tǒng)計(jì);這里的監(jiān)控模塊只是簡(jiǎn)單的demo,實(shí)際應(yīng)用中日質(zhì)量會(huì)非常大,可以通過實(shí)時(shí)日志分析工具進(jìn)行統(tǒng)計(jì); 本示例只是一個(gè)搶紅包應(yīng)用的簡(jiǎn)單demo,離真正線上應(yīng)用尚有距離;但其中所用到的相關(guān)技術(shù):如容器服務(wù)的彈性伸縮、負(fù)載均衡,日志服務(wù)的數(shù)據(jù)分析,消息服務(wù)高并發(fā)處理等都是搶紅包應(yīng)用所需的; 參考: 阿里云容器服務(wù): https://help.aliyun.com/product/25972.html?spm=5176.product26090.6.4.AzxFaW SLS: https://help.aliyun.com/product/28958.html?spm=5176.doc25974.6.15.VMW9if SLB: https://help.aliyun.com/product/27537.html?spm=5176.product28958.6.56.bN5R4b MNS: https://help.aliyun.com/product/27412.html?spm=5176.product27537.6.42.iWBZCZ RDS: https://help.aliyun.com/product/26090.html?spm=5176.product27412.6.47.sRItSf 更多文章,請(qǐng)查看:https://yq.aliyun.com/cloud |
|