国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

58到家入駐微信錢包的技術(shù)優(yōu)化

2018-09-06 17:56 更新

一、需求緣起

大伙打開(kāi)微信錢包,會(huì)發(fā)現(xiàn)58到家入駐了微信錢包的一級(jí)入口(如下圖),這個(gè)入口流量極大,微信要求被接入的H5必須能抗住n萬(wàn)的qps(58到家的系統(tǒng)是偏交易的系統(tǒng),雖然一天100w訂單其實(shí)也沒(méi)多少請(qǐng)求),這是之前的業(yè)務(wù)系統(tǒng)沒(méi)有遇到過(guò)的,要抗住這個(gè)n萬(wàn)的qps的優(yōu)化思路是怎么樣的呢?

58到家入駐微信錢包
這里做一個(gè)思路分享,希望能對(duì)業(yè)界同仁有啟示作用。

二、業(yè)務(wù)分析

在微信錢包里,點(diǎn)擊進(jìn)入58到家,會(huì)發(fā)現(xiàn)其實(shí)是一個(gè)類別落地頁(yè),根據(jù)不同城市開(kāi)通的服務(wù)類別,展示不同類別的入口(如下圖)。

不同城市開(kāi)通的服務(wù)類別
很容易想到,整個(gè)架構(gòu)與流程是這樣滴:
微信端架構(gòu)流程1

架構(gòu)分層:

(1)微信錢包端,嵌有到家H5頁(yè)面

(2)web-server層,生成H5頁(yè)面

(3)service層,提供“城市開(kāi)通了哪些核心服務(wù)”的接口

(4)數(shù)據(jù)庫(kù)層,存儲(chǔ)了“城市開(kāi)通了哪些核心服務(wù)”的數(shù)據(jù)

核心流程:

步驟一:微信端通過(guò)native的GPS定位或者微信的js-sdk獲取用戶當(dāng)前所在城市,并往web-server發(fā)送http請(qǐng)求

步驟二:web-server收到http請(qǐng)求,調(diào)用service層,獲取當(dāng)前城市開(kāi)通了哪些核心服務(wù)的數(shù)據(jù),以瓶裝返回html

步驟三:service收到RPC請(qǐng)求,調(diào)用mysql,獲取真正的數(shù)據(jù)

步驟四:mysql返回service,service返回web-server,web-server拼裝html,返回微信錢包


潛在的問(wèn)題

每秒鐘n萬(wàn)的qps數(shù)據(jù)庫(kù)扛不住


三、優(yōu)化分析

看到這里,很多讀者就笑了,這個(gè)場(chǎng)景加個(gè)緩存不就搞定了么,好吧,是可以,但本文的重點(diǎn)并不是加一個(gè)緩存,還有其他的梗等著你。


場(chǎng)景分析:這個(gè)“城市開(kāi)通了哪些核心服務(wù)”是一個(gè)幾乎只讀的場(chǎng)景,因?yàn)槌鞘幸_(kāi)通新的服務(wù)是很低頻的,所以一大早就想到了cache的優(yōu)化(cache要注意高可用),優(yōu)化后的架構(gòu)分層如下:
微信端架構(gòu)流程2

cache存儲(chǔ)城市開(kāi)通的核心服務(wù)列表,key value建立的是一個(gè)city-id到list<service-id>的映射關(guān)系。

幾乎100%的請(qǐng)求會(huì)命中緩存。


潛在的問(wèn)題服務(wù)與緩存之間的帶寬會(huì)不會(huì)成為瓶頸呢?

因?yàn)閹缀跏侵蛔x的請(qǐng)求,很容易想到將分布式緩存優(yōu)化為服務(wù)內(nèi)存緩存,優(yōu)化后的架構(gòu)分層如下:

微信端架構(gòu)流程3
每一個(gè)服務(wù)內(nèi)部都有一個(gè)map,存儲(chǔ)city-id到list<service-id>的映射關(guān)系,而不用通過(guò)cache來(lái)讀取數(shù)據(jù)。

還能不能進(jìn)一步優(yōu)化,例如進(jìn)一步降低網(wǎng)絡(luò)交互呢?

是可以的,服務(wù)層可以做數(shù)據(jù)的緩存map<cityid, list<sid>>,web-server層可以進(jìn)一步做頁(yè)面緩存優(yōu)化,架構(gòu)圖如下:

web-server層頁(yè)面緩存優(yōu)化
每一個(gè)站點(diǎn)層,直接做頁(yè)面緩存,上游傳入一個(gè)city-id,就直接將提前拼裝好的頁(yè)面返回,得到很高的性能。

有甚者,通過(guò)nginx/varnish/squid針對(duì)性的做一些“頁(yè)面靜態(tài)化的優(yōu)化”,直接每個(gè)city有一個(gè)對(duì)應(yīng)的html,能極大的提高吞吐量: 
web-server層頁(yè)面靜態(tài)化

四、頁(yè)面靜態(tài)化的適用場(chǎng)景

在做站點(diǎn)架構(gòu)的過(guò)程中,“動(dòng)靜分離”是一項(xiàng)很常見(jiàn)的優(yōu)化手段:

(1)對(duì)于不變的首頁(yè)、js、jpg、css,可以用專門的file-server來(lái)針對(duì)性優(yōu)化(cdn/nginx/varnish/squid)提供高速訪問(wèn)

(2)對(duì)于動(dòng)態(tài)的頁(yè)面,有專門的tomcat/apache/iis/lighttpd集群來(lái)提供動(dòng)態(tài)站點(diǎn)生成

一般來(lái)說(shuō)動(dòng)態(tài)站點(diǎn)時(shí)延會(huì)大大高于靜態(tài)站點(diǎn),應(yīng)為每次生成動(dòng)態(tài)站點(diǎn)需要訪問(wèn)服務(wù)(多次網(wǎng)絡(luò)傳輸)、訪問(wèn)數(shù)據(jù)庫(kù)(可能有很慢的磁盤(pán)io),并且還有大量的計(jì)算邏輯,而靜態(tài)文件則可以直接返回。


“頁(yè)面靜態(tài)化”是一種將原本需要?jiǎng)討B(tài)生成的站點(diǎn)提前生成靜態(tài)站點(diǎn)的優(yōu)化技術(shù),什么樣的業(yè)務(wù)場(chǎng)景可以進(jìn)行“頁(yè)面靜態(tài)化”優(yōu)化呢?

解答:總數(shù)據(jù)量不大,生成靜態(tài)頁(yè)面數(shù)量不多的業(yè)務(wù),非常適合于“頁(yè)面靜態(tài)化”優(yōu)化


例如:到家開(kāi)通的城市只有幾百個(gè),那只需提前生成幾百個(gè)城市的“靜態(tài)化頁(yè)面”即可

又例如:一些二手車業(yè)務(wù),整個(gè)公司可能只有幾萬(wàn)量二手車庫(kù)存,也可以提前生成這幾萬(wàn)量二手車的靜態(tài)頁(yè)面

再例如:像58同城這樣的信息模式業(yè)務(wù),又幾十億的帖子量,就不太適合于靜態(tài)化


五、總結(jié)

“頁(yè)面靜態(tài)化”是一種將原本需要?jiǎng)討B(tài)生成的站點(diǎn)提前生成靜態(tài)站點(diǎn)的優(yōu)化技術(shù),總數(shù)據(jù)量不大,生成靜態(tài)頁(yè)面數(shù)量不多的業(yè)務(wù),非常適合于“頁(yè)面靜態(tài)化”優(yōu)化。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)