<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
    @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://www.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 〇、背景

           幾年前由于發(fā)起尋親項(xiàng)目的關(guān)系,和B網(wǎng)站開展了合作。B網(wǎng)站是國內(nèi)最大的尋親網(wǎng)站,幾年來通過該網(wǎng)站和家人團(tuán)聚的案例已經(jīng)達(dá)到1397例。B論壇是網(wǎng)站中最活躍的板塊。當(dāng)時(shí)論壇遇到一些不穩(wěn)定的情況,因?yàn)锽論壇是用Discuz!搭建的,而Discuz!當(dāng)時(shí)剛好被騰訊收購,要獲得專業(yè)支持相對容易,我們開始把B論壇遷移到騰訊云上面,由Discuz!的志愿者協(xié)助維護(hù)直到去年底離職,把論壇的管理權(quán)限交給我。

    一、論壇出問題了

          我不對于php和linux都不熟,交接后看到論壇工作還算正常,也很長一段時(shí)間沒有去關(guān)注,直到前幾天,網(wǎng)站管理員突然發(fā)來了這個(gè):




    這是什么鬼?臣妾不懂啊……只好硬著頭皮登上服務(wù)器去看看。



    還好,大概可以猜到出什么事了:數(shù)據(jù)盤不夠用了。那應(yīng)該很好解決吧?擴(kuò)數(shù)據(jù)盤?

    二、COS

    用騰訊云服務(wù)器而不是自己買服務(wù)器的一個(gè)好處就是,很多資源可以按需用,按需擴(kuò),包括硬盤。不過有個(gè)限制就是,買服務(wù)器的時(shí)候系統(tǒng)盤和數(shù)據(jù)盤都必須要買“云硬盤”而不能用本地盤。買云硬盤還有個(gè)附加的好處是可以申請開通硬盤快照功能,遷移復(fù)制服務(wù)器唰唰的。

    但是云硬盤的性能跟本地硬盤是有差距的,處于性能考慮,志愿者選擇了性能更好的本地硬盤,這樣就導(dǎo)致硬盤滿了以后沒有辦法擴(kuò)了。幾年來,尋親的網(wǎng)友們每天上傳大量的高清圖片線索,終于在世紀(jì)寒流這幾天把硬盤擠爆了。



    不過擴(kuò)硬盤本來也不是最佳選擇,比擴(kuò)硬盤更好的選擇是:不用硬盤!

    騰訊云為這種UGC文件提供的解決方案是
    COS(Cloud Object Service ,當(dāng)前版本是COS3.0。COS 大概的意思就是,你有一大堆文件(比如網(wǎng)站用戶上傳的照片),只知道量很大,不知道有多少,不但需要找個(gè)地方存著,還隨時(shí)有可能需要在某個(gè)網(wǎng)頁上引用它。那么平臺(tái)提供一個(gè)服務(wù)器讓你把文件放上去,并提供web訪問和API上傳和管理接口,你就不用把文件傳到自己服務(wù)器了。

    個(gè)人認(rèn)為使用COS的好處是:
    1 能夠提供幾乎無限量的文件存儲(chǔ)空間,按存儲(chǔ)量和訪問量收費(fèi)
    2 很大的免費(fèi)額度:50G的免費(fèi)空間,每計(jì)費(fèi)周期內(nèi)10G的回源流量,每計(jì)費(fèi)周期內(nèi)100萬次的免費(fèi)訪問次數(shù)(實(shí)際上COS通常在CDN后面提供服務(wù),因此實(shí)際上每個(gè)計(jì)費(fèi)周期可以提供10G和100萬次回源服務(wù),配合恰當(dāng)?shù)腃DN緩存策略,已經(jīng)可以滿足很大的訪問量)。
    因此用cos不但從此不用糾結(jié)容量爆倉的問題,也不用為沒有使用到的容量預(yù)先買單花冤枉錢,而且還不用自己的服務(wù)器的硬盤和網(wǎng)卡來扛這些流量,服務(wù)器的帶寬和硬盤I/O壓力也立刻就下來了。

    COS的使用也很簡單:
    1 建個(gè)倉庫(bucket),以后附件就往這個(gè)倉庫里面?zhèn)髁恕?br />

    2 修改上傳附件頁面,使用騰訊云提供的API把文件上傳到COS……開玩笑了,作為懶人,當(dāng)然是提工單申請開通COS的FTP權(quán)限啦



    大概兩個(gè)鐘頭后收到消息說ftp開通了。

    3 用論壇創(chuàng)始人身份登錄discuz,打開遠(yuǎn)程附件


    遠(yuǎn)程訪問url可以域名解析到COS源上,不過這樣附件都要走IDC流量,不但貴,也沒有實(shí)現(xiàn)靜態(tài)文件就近訪問的目標(biāo),因此實(shí)際使用的時(shí)候最好在COS服務(wù)的上面加一層CDN:
     



    現(xiàn)在用戶新上傳的附件都自動(dòng)到cos里面了。然后我們來對付舊的附件吧。這時(shí)我們要用到回源功能了。先準(zhǔn)備好一個(gè)回源專用的域名,修改httpd.conf(apache)或者conf.d(nginx)添加一個(gè)新的server,documentroot(或者root)指向服務(wù)器上discuz的附件目錄 data/attachment 并修改域名解析,瀏覽器里面訪問一下確認(rèn)回源域名可以訪問到附件。然后修改cos的回源配置:




    這樣如果有人訪問cos的時(shí)候cos上沒有相應(yīng)的文件,服務(wù)器就會(huì)到老的服務(wù)器上獲取文件并緩存下來。通過瀏覽器訪問附件確認(rèn)回源成功后,登錄數(shù)據(jù)庫 
    update cdb_attachments set remote = '1' 把所有的附件都更新為遠(yuǎn)程的。這樣數(shù)據(jù)就會(huì)隨著用戶的訪問慢慢遷移到cos上了,這個(gè)過程平滑無感知,不過就是不知道遷移到什么時(shí)候成功。

    可是我想釋放硬盤空間出來啊怎么辦?先裝上ftp神器 lftp再說。不得不說,在linux下,lftp實(shí)在是個(gè)神器。打開lftp,open登上COS的ftp服務(wù)器,mirror -RL ..... 老附件通通遷移上COS咯。

    偷懶用ftp而不是修改上傳頁面代碼的一個(gè)代價(jià)是,有的時(shí)候ftp失敗,會(huì)有一些附件仍然被扔在CVM硬盤上??梢远ㄆ?/span>
    update cdb_attachments set remote = '1' 把附件都改成遠(yuǎn)程的,讓cos回源到CVM上。不過就算這樣,冷門的附件仍然可能長時(shí)間沒有辦法同步到cos上。crontab一個(gè)lftp任務(wù)定期把附件同步上COS可以解決問題。不過如果懂一點(diǎn)點(diǎn)開發(fā)的話,寫一點(diǎn)點(diǎn)腳本用inotify自動(dòng)同步一下顯得會(huì)看起來好點(diǎn)兒:







    三、 CDN優(yōu)化:動(dòng)靜分離

          內(nèi)容分發(fā)網(wǎng)絡(luò)(Content Delivery Network)大概的意思就是,我大騰訊在全國成百上千個(gè)機(jī)房里面屯有無數(shù)的服務(wù)器,如果某個(gè)邊遠(yuǎn)地區(qū)的用戶要訪問你放在上海的一份數(shù)據(jù),山長水遠(yuǎn)的跑到上海機(jī)房來拉數(shù)據(jù)肯定快不了,如果我把這份數(shù)據(jù)先放在這個(gè)邊遠(yuǎn)地區(qū)里,離用戶最近的一個(gè)機(jī)房呢?那速度就不一樣了。而且這個(gè)邊遠(yuǎn)地區(qū)的機(jī)房流量還比我大上海三通機(jī)房的流量便宜了一大截。不過有個(gè)前提是服務(wù)器要提前知道用戶將要訪問的數(shù)據(jù),并提前拉取這份數(shù)據(jù)緩存在當(dāng)?shù)?,因此一般只用來服?wù)靜態(tài)的圖片、樣式表、腳本、超文本、flash這些資源。



          B論壇其實(shí)去年就用上了CDN,不過用的是一個(gè)比較冷門的用法:動(dòng)態(tài)加速。這個(gè)用法就是說,先假設(shè)我網(wǎng)站的所有請求都是靜態(tài)的,這樣用戶所有的請求都訪問在當(dāng)?shù)氐姆?wù)器(邊緣服務(wù)器),然后邊緣服務(wù)器檢查一下這個(gè)請求的資源我有沒有緩存啊,沒有的話邊緣服務(wù)器再受累跑去你的服務(wù)器上拉這個(gè)數(shù)據(jù),把數(shù)據(jù)返回給你,并且嘗試緩存這個(gè)數(shù)據(jù)以備下次使用。然后對于不允許緩存的動(dòng)態(tài)請求,只要聲明一個(gè)策略,比如“php文件緩存時(shí)間0秒”這樣,讓邊緣服務(wù)器直接訪問源CVM服務(wù)器就好了。

        這樣做的好處是配置簡單,不需要關(guān)心動(dòng)靜分離,并且不但靜態(tài)的文件都可以被邊緣服務(wù)器緩存,動(dòng)態(tài)的請求也可以獲得cdn網(wǎng)絡(luò)的傳輸加速 。壞處就是“流量double”。也就是說,你不但要給cvm購買外網(wǎng)帶寬,cvm的動(dòng)態(tài)數(shù)據(jù)送到邊緣服務(wù)器以后,你還要再購買一次從邊緣服務(wù)器到用戶那里的cdn帶寬(或者流量)。

        另外一個(gè)附加的“缺點(diǎn)”是,CDN網(wǎng)絡(luò)總是盡可能快的從CVM服務(wù)器拉取全部數(shù)據(jù),再按照訪客用戶網(wǎng)絡(luò)的速度再把數(shù)據(jù)吐出去。這其實(shí)是最佳策略,因?yàn)镃VM的帶寬已經(jīng)買單了,不跑慢也是浪費(fèi),但是帶來的問題就是CVM監(jiān)控上看起來,再多的帶寬都會(huì)被跑滿,好像帶寬永遠(yuǎn)都不夠用。因此前任的管理員購買了非常多的帶寬來試圖滿足永遠(yuǎn)喂不飽的CDN網(wǎng)絡(luò),帶寬成了B論壇最沉重的成本。
        

     
    (15M的帶寬,經(jīng)常性的被CDN跑滿) 


        貿(mào)然的減少帶寬也是不合適的,最好的做法還是做盡量徹底的動(dòng)靜分離,靜態(tài)的部分還是用cos托管源和FTP托管源來喂飽CDN網(wǎng)絡(luò),讓用戶盡可能體驗(yàn)好;動(dòng)態(tài)的部分直接訪問CVM,根據(jù)用戶日常實(shí)際產(chǎn)生的帶寬情況再加上足夠充分的冗余來采購就可以。

        傳統(tǒng)的動(dòng)靜分離手段是最好的:直接修改html、css和js,通過靜態(tài)專用域名訪問靜態(tài)資源。但是這樣做需要很多的開發(fā)工作量,作為懶人,我直接用上了大殺器:rewrite!




        懶得給每個(gè)域名打馬賽克了,也不是什么機(jī)密。這幾條規(guī)則是這樣:
    1 對于普遍圖片超大的png圖片,自動(dòng)轉(zhuǎn)向到優(yōu)圖系統(tǒng)進(jìn)行jpg壓縮。因?yàn)楸O(jiān)控發(fā)現(xiàn)少數(shù)png圖片占了很大的流量比重。
    2 對于用戶上傳到附件,自動(dòng)轉(zhuǎn)向到attachment子目錄(COS源),這樣CVM就不需要承擔(dān)附件文件的存儲(chǔ)了(零星缺失的文件cos回源啟用了回源專用的域名)
    3 對于系統(tǒng)的靜態(tài)文件,自動(dòng)轉(zhuǎn)向到static子目錄(FTP源),不統(tǒng)一使用cos源的原因是,CDN回源到ftp源是免費(fèi)的,但是ftp源只有6G的存儲(chǔ)空間?;卦吹絚os空間幾乎是無限的,但是是有可能收費(fèi)的。
    這樣就把CVM上出了favicon.ico之外的幾乎所有靜態(tài)文件都分離出去了。要注意的是如果盜鏈嚴(yán)重的話,原本nginx上的防盜鏈規(guī)則也要相應(yīng)的設(shè)置到cdn上去。




    動(dòng)靜分離后cdn的整體命中率從瓶頸50%以下一下提升到75%以上,對于cvm的壓力大大減小了??匆幌路钟蛎拿新蕯?shù)據(jù)




    在不對論壇程序做細(xì)致的優(yōu)化的情況下,只是通過策略調(diào)整達(dá)到這樣的命中率,還算比較理想了。

    不過這樣做了以后,CDN的流量費(fèi)用并沒有下降啊。因?yàn)锽論壇的CDN采用了峰值帶寬計(jì)費(fèi)模式,因此觀察了一下cdn監(jiān)控的帶寬數(shù)據(jù),發(fā)現(xiàn)了一個(gè)很有意思的問題:



    CDN的峰值帶寬按天波動(dòng)非常大。細(xì)看到具體的帶寬比較大的一天更明顯:



    這天是央視《感動(dòng)中國2016》B論壇的兩個(gè)發(fā)起人入選帶來的一個(gè)訪問波峰。

    像這樣的帶寬曲線模式,按照帶寬購買CDN是非常浪費(fèi)的。果斷切換到流量包計(jì)費(fèi)模式,CDN費(fèi)用從每月>¥500(每年大約¥6000~¥8000)下降到每年<6T(每年大約2000以內(nèi))

    動(dòng)靜分離后CVM的實(shí)際動(dòng)態(tài)帶寬需求有多少呢?后面上了負(fù)載均衡之后沒有地方可以截屏幾臺(tái)服務(wù)器完整的帶寬總和曲線了,總體是2M帶寬平常跑不滿,但是偶發(fā)集中的訪問會(huì)超,所以兩臺(tái)CVM做負(fù)載均衡,各開了2M的帶寬,保證平常有超過一倍的帶寬冗余。


    四:memcache和云數(shù)據(jù)庫

    B論壇遷移到騰訊云的時(shí)候就使用了云數(shù)據(jù)庫,數(shù)據(jù)量雖然不大,但是數(shù)據(jù)庫訪問量不小,購買的是能支撐2400QPS的50G/2000MB型號(hào)。


     (7天后到期,不需要續(xù)了) 

    但是查看了一下discuz的優(yōu)化選項(xiàng),發(fā)現(xiàn)內(nèi)存緩存優(yōu)化項(xiàng)都沒有打開。在CVM里裝上一個(gè)memcached測試了一下,數(shù)據(jù)庫請求可以有效的降低到100QPS以下。這樣高配云數(shù)據(jù)庫就太浪費(fèi)了,換個(gè)10G/360MB/120QPS的就足夠了。不過性能冗余夠不夠?discuz支持master/slave的,先提個(gè)工單申請一個(gè)免費(fèi)的slave。



    配置slave后觀察了幾天,即使在峰值查詢接近700QPS的情況下數(shù)據(jù)庫也沒有出現(xiàn)訪問瓶頸,騰訊云數(shù)據(jù)庫的性能還是相當(dāng)厚道的,這個(gè)性能冗余是足夠的。




    (某海量網(wǎng)站配置錯(cuò)誤導(dǎo)致出現(xiàn)大量404頁面,順帶給論壇帶來了很大壓力)

    這樣數(shù)據(jù)庫費(fèi)用從¥2240/年陡降到¥210/年了。已經(jīng)省了這么多錢,再買個(gè)C型的memcached好了,每天2元,每年大概700元。
    CVM本機(jī)運(yùn)行一個(gè)memcached雖然性能不錯(cuò),但是始終要和其他本機(jī)服務(wù)競爭各種資源,而且考慮到后面要做負(fù)載均衡,也希望把登錄態(tài)(session)丟到云里面去。


    (memcache很輕松的扛住了情人節(jié)的感動(dòng)中國帶來的訪問量)


    修改了一下discuz的配置文件指向memcached,再修改php.ini把session也指向了memcached,這下CVM就沒有“狀態(tài)”了,可以很容易的替換,或者集成多個(gè)做負(fù)載均衡。

    五:CVM和負(fù)載均衡



    B論壇在騰訊云上一共兩臺(tái)CVM,對外提供服務(wù)的是一臺(tái)配置有點(diǎn)豪華的服務(wù)器:



    這臺(tái)每年費(fèi)用是 ¥16450,當(dāng)然主要的錢都花在買帶寬去喂CDN了



    另一臺(tái)不對外服務(wù),只是有一個(gè)大的硬盤做數(shù)據(jù)備份。


    一年¥1550。

    經(jīng)過上面一系列優(yōu)化以后,原本買的CVM性能就太過冗余了,文件都丟到COS上去了,大硬盤備份也沒有必要了。已經(jīng)遷移到cos的文件剔除后,整個(gè)系統(tǒng)只剩下了4G,全部回遷到系統(tǒng)盤上面,數(shù)據(jù)盤也不需要了:



    因?yàn)閿?shù)據(jù)庫在云上,附件文件也在cos上,本地沒有什么動(dòng)態(tài)的數(shù)據(jù),這樣系統(tǒng)備份也簡單的多了,定期對系統(tǒng)盤做一個(gè)“系統(tǒng)鏡像”就成,除了有一個(gè)問題:做系統(tǒng)鏡像要關(guān)機(jī)。

    墨菲定律告訴我們,永遠(yuǎn)要防著機(jī)器宕機(jī)!前面該清理的清理干凈了,是時(shí)候做雙機(jī)熱備了。先把備份機(jī)的論壇服務(wù)也啟動(dòng)起來,session也指向memcached,然后添加一個(gè)負(fù)載均衡:


    訪問低谷的時(shí)候把主服務(wù)器關(guān)掉,做鏡像,備份機(jī)自動(dòng)扛住了全部訪問量。

    有了鏡像以后換機(jī)型就方便了。新購一臺(tái)服務(wù)器




    因?yàn)槌浞质褂昧嗽茢?shù)據(jù)庫、memcache、cdn、cos等paas服務(wù),又做了動(dòng)靜分離,cpu現(xiàn)在已經(jīng)清閑的很,1核的性能是足夠的。內(nèi)存使用率也很低,內(nèi)存其實(shí)1G也足夠,不過cpu不夠了還可以負(fù)載均衡,內(nèi)存不夠了就只有干瞪眼,所以多加1G冗余。
    ,
    購買的時(shí)候就可以直接指定安裝鏡像,支付每年¥1250的費(fèi)用,10分鐘后,有了一臺(tái)全新的服務(wù)器,配置host驗(yàn)證成功,加入到負(fù)載均衡后端列表里面

    把權(quán)重分幾次從原來的高配服務(wù)器分配到新服務(wù)器上,運(yùn)行指標(biāo)都還好,就是負(fù)載有點(diǎn)兒高,訪問速度可能不是最優(yōu),也許是mysql或者memcache要通過網(wǎng)絡(luò)訪問導(dǎo)致的?



    反正要做雙機(jī)熱備的,再買一臺(tái)一樣的服務(wù)器,加入負(fù)載均衡后臺(tái)分?jǐn)傄话氲脑L問量,觀察了一下cpu利用率和負(fù)載都下來了,雖然偶爾有一些瞬間的毛刺,反問上已經(jīng)感覺不到差別。



    這樣就有了兩臺(tái)一模一樣的服務(wù)器,平常分?jǐn)傇L問壓力,一臺(tái)宕機(jī)的時(shí)候負(fù)載均衡會(huì)自動(dòng)發(fā)現(xiàn)并把訪問全部導(dǎo)向到正常工作的服務(wù)器。未來如果有更大的訪問壓力隨時(shí)可以新購機(jī)器,安裝上鏡像后加入負(fù)載均衡后端。

    正好原來購買的服務(wù)器和數(shù)據(jù)庫這陣子都要過期了,就都不用續(xù)費(fèi)了。

    六、對公益捐贈(zèng)負(fù)責(zé) 

    看看優(yōu)化后比原來節(jié)省了多少:

    CVM: 原來16450+1550=18000 , 優(yōu)化后1250*2=2500



    CDN+COS:原來:¥6000~¥8000,優(yōu)化后約 ¥2000(COS回源流量暫時(shí)還沒收費(fèi),附件遷到cos后也不足50G還不需要存儲(chǔ)費(fèi)用,不過未來有可能產(chǎn)生少量費(fèi)用。)

    mysql+memcache :原來 ¥2240,優(yōu)化后210+700=910

    總體相比原來優(yōu)化大約 ¥22000 /年。

      雖然騰訊云一直對于公益組織免費(fèi)扶持云資源,但是我覺得云資源和公益捐贈(zèng)善款一樣,也要用負(fù)責(zé)的態(tài)度摳門的用好,才是對支持企業(yè)負(fù)責(zé)任的態(tài)度。

    最后,感謝騰訊云對公益事業(yè)的慷慨支持。打完收工。






    posted on 2016-02-19 17:56 emu 閱讀(1207) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品乱码久久久久久自慰| 国产精品hd免费观看| 亚洲色大成网站www永久一区| 国产免费一区二区三区| a毛片免费观看完整| 美女被免费网站在线视频免费 | 中文字幕亚洲男人的天堂网络| 亚洲日韩中文无码久久| 午夜国产羞羞视频免费网站| 91成人免费观看| 免费人成激情视频在线观看冫| 特级毛片A级毛片100免费播放| 亚洲精品无码久久久久久| 亚洲免费人成视频观看| 亚洲视频在线视频| 亚洲国产成人一区二区三区| 精品国产日韩亚洲一区| 亚洲精品99久久久久中文字幕| 国产无遮挡裸体免费视频| 黄页网站免费观看| 亚洲精品视频免费在线观看| 99爱视频99爱在线观看免费| 久久午夜夜伦鲁鲁片无码免费| 好爽好紧好大的免费视频国产 | 亚洲阿v天堂在线| 亚洲一区二区精品视频| 四虎国产精品免费视| 国产真人无遮挡作爱免费视频| 成年女人午夜毛片免费看| 无码国产精品一区二区免费I6| 成年免费大片黄在线观看com| 亚洲成AV人片在WWW| 亚洲成在人线aⅴ免费毛片| 亚洲精华国产精华精华液 | 在线观看免费国产视频| 日本黄色免费观看| mm1313亚洲精品国产| 亚洲人成无码久久电影网站| 国产亚洲美女精品久久久2020| 亚洲乳大丰满中文字幕| 亚洲视频精品在线|