<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>

            淘寶構建開(kāi)放平臺的技術(shù)歷程(3)

            發(fā)表于:2012-10-25來(lái)源:Csdn作者:放翁點(diǎn)擊數: 標簽:
            但這擔子放下了,那擔子又挑上了,在上面談到去年后臺應用不穩定導致平臺整體不穩定的問(wèn)題在輕量化以后出現的頻率和次數更多了,因為發(fā)布和維護都

              但這擔子放下了,那擔子又挑上了,在上面談到去年后臺應用不穩定導致平臺整體不穩定的問(wèn)題在輕量化以后出現的頻率和次數更多了,因為發(fā)布和維護都落到了后臺部門(mén),此時(shí)對于各個(gè)系統的把控就更弱了,這晚上睡覺(jué)不安穩,KPI中的穩定性指標基本就沒(méi)法定了。唯一能夠徹底解決問(wèn)題的辦法就是http服務(wù)異步化+ 事件驅動(dòng)+虛擬隔離線(xiàn)程池。那年年中的時(shí)候對Jetty7做了一次壓測,發(fā)現Continuations的效果已經(jīng)可以上正式環(huán)境了,于是開(kāi)始在 Jetty7的基礎上做Http服務(wù)異步化+事件驅動(dòng)的封裝,同時(shí)也實(shí)現了一個(gè)虛擬隔離線(xiàn)程池做配合。具體設計細節這里就不多說(shuō)了,參看blog,簡(jiǎn)單描述原理就是:1.將前端容器線(xiàn)程和業(yè)務(wù)處理隔離。(類(lèi)似NIO和BIO的設計差異)2.業(yè)務(wù)處理如果依賴(lài)于外部系統則采用事件驅動(dòng)的方式來(lái)減少線(xiàn)程等待,同時(shí)提高線(xiàn)程占用資源的利用率。(這點(diǎn)上來(lái)說(shuō)理想和現實(shí)還是有很多細節差異的,在實(shí)現的時(shí)候必須根據依賴(lài)系統消耗時(shí)間占總時(shí)間的比例看是否需要事件驅動(dòng),事件驅動(dòng)帶來(lái)的切換消耗是比較大的)3.通過(guò)一個(gè)大的線(xiàn)程池虛擬設置不同業(yè)務(wù)可消耗的最大資源數,來(lái)充分的共享資源在異常情況下限制業(yè)務(wù)占用過(guò)多資源(任務(wù)處理開(kāi)始排隊而非無(wú)度的占用資源)。這個(gè)組件上線(xiàn)以后,沒(méi)過(guò)幾天就發(fā)生了一個(gè)典型的案例,一個(gè)業(yè)務(wù)2點(diǎn)開(kāi)始響應時(shí)間從10ms上升到了40ms,然后繼續上升到200ms,當時(shí)給這個(gè)業(yè)務(wù)模擬設置最大的線(xiàn)程資源數是20個(gè),就發(fā)現那時(shí)候由于RT時(shí)間提升,線(xiàn)程資源釋放的慢,20個(gè)慢慢的被消耗到頂了,此時(shí)這個(gè)業(yè)務(wù)的隊列開(kāi)始從0到100到200到…(當然防止內存過(guò)多占用,會(huì )丟棄超過(guò)隊列長(cháng)度的業(yè)務(wù)處理),而其他業(yè)務(wù)還是正常的使用著(zhù)資源,平臺平穩,到了4點(diǎn)多,業(yè)務(wù)方收到告警修復以后,RT時(shí)間下降到了10ms,隊列中的請求數量開(kāi)始減少,最后隊列清空,線(xiàn)程資源占用下降到正常水平。從此以后震子同學(xué)開(kāi)心的和我說(shuō):開(kāi)放平臺穩定性的KPI可以隨便大膽的寫(xiě)幾個(gè)9了。(技術(shù)敢做敢想,才能高枕無(wú)憂(yōu))

              11年:市場(chǎng)化。這一年到年底,平臺開(kāi)放淘寶服務(wù)758個(gè),每天調用量19億,這一年SNS熱潮消退,游戲逐漸淡出,賣(mài)家市場(chǎng)依舊生意火爆(很多TP的年收益讓人咂舌),營(yíng)銷(xiāo)工具嶄露頭角成為開(kāi)發(fā)者新寵,淘寶客成為了開(kāi)放新寵(這一年返利網(wǎng)和團購一樣火,只是前者收錢(qián),后者燒錢(qián))。

              就在開(kāi)放平臺開(kāi)發(fā)者前景一片大好的時(shí)候,出現了一個(gè)讓開(kāi)放轉變和收縮的導火索,一家做營(yíng)銷(xiāo)工具的公司“團購寶”,每天凌晨都會(huì )通過(guò)接口同步客戶(hù)設置的一些優(yōu)惠商品信息到淘寶網(wǎng),結果那天凌晨,微博上突然很多人說(shuō)某些店都是一塊錢(qián)的便宜貨,要知道這種事情在微博盛行的時(shí)代,傳播速度之快,影響之大,當即很多賣(mài)家商品都被1塊錢(qián)拍下。最后發(fā)現是線(xiàn)下的商品價(jià)格不知道怎么全被修改成1塊錢(qián),然后凌晨一同步,就導致出現了上面的一幕。從那時(shí)候開(kāi)始,開(kāi)放平臺的 KPI中增加了一個(gè)重中之重:安全,包括后面的很多技術(shù)產(chǎn)品都是圍繞安全展開(kāi)。此時(shí)第一個(gè)被波及提升能力的系統就是流式分析集群,20分鐘一輪的數據分析要求壓縮到3分鐘,同時(shí)數據量已經(jīng)從8億每天增長(cháng)到了19億每天,化了2個(gè)月時(shí)間斷斷續續的優(yōu)化集群結構設計和單機處理能力,里面經(jīng)歷的內容有一天我翻 Hadoop的優(yōu)化過(guò)程時(shí)看到了相似的場(chǎng)景,具體就不在這里贅述,詳細內容依然去挖blog。簡(jiǎn)單來(lái)說(shuō):1.充分利用多核能力用計算換內存。2.磁盤(pán)換內存,用并行設計來(lái)保證整體業(yè)務(wù)時(shí)間消耗不變甚至減少。3. Slave shuffle來(lái)減少Mater的合并壓力。4.數據壓縮減少數據傳輸消耗和內存占用。…

              另一方面,由于10年對于jetty7的充分理解和封裝,此時(shí)看到了又一個(gè)新技術(shù)的契機,10年的時(shí)候去美國參加Javaone,當時(shí)看到有老外用 Jetty7的特性來(lái)實(shí)現Comet功能,Comet原先主要用于CS結構的應用搬到互聯(lián)網(wǎng)上,因為不能用TCP的長(cháng)連接,所以不得不用Http的長(cháng)連接來(lái)替代原來(lái)的模式,同時(shí)國外開(kāi)放平臺也關(guān)注很多新型的API設計,其中就有Twitter的Streaming api,這種通過(guò)http長(cháng)連接方式推送消息到外部isv的模式引起了我們的注意。因此我們決定將Jetty7上的封裝近一步升級,支持Comet長(cháng)連接方式,后端通過(guò)事件驅動(dòng)的模式主動(dòng)推送內部消息給外部,避免外部輪詢(xún)業(yè)務(wù)接口。這個(gè)設計的最重要點(diǎn)就是如何用最有效最少的線(xiàn)程來(lái)守護多個(gè)長(cháng)連接,支持到后端事件驅動(dòng)的數據下行,如果給每一個(gè)長(cháng)連接支持一個(gè)數據推送守護線(xiàn)程,自然即時(shí)性最高,但代價(jià)就是眾多空置連接的守護線(xiàn)程消耗,預知細節挖blog。這種模式剛出來(lái)的時(shí)候,從上到下都是質(zhì)疑聲,覺(jué)得太不符合常規做法了,常規做法就是pull,認為開(kāi)發(fā)和無(wú)法接受,認為穩定性一定不靠譜。經(jīng)過(guò)2011年的雙十一,當天幾個(gè)“嘗鮮”的開(kāi)發(fā)者一臺PC就支持幾百萬(wàn)的訂單高速處理,就讓很多人明白了,技術(shù)要敢想,代碼要敢寫(xiě),細節要敢專(zhuān),沒(méi)什么不可能。也就從這以后,多樣化服務(wù)TQL,Schedule API,ATS從開(kāi)放平臺的土壤上都長(cháng)了出來(lái),為更多的場(chǎng)景,更多的終端,提供了各種解決方案和創(chuàng )新實(shí)現。

              12年:垂直化。這一年到現在,平臺開(kāi)放淘寶服務(wù)900多個(gè),每天調用量25億,這一年淘寶客由于公司方向轉變熱潮消退,無(wú)線(xiàn)乘勢而起,新業(yè)務(wù)(機彩票,酒店,理財等),P4P,數據類(lèi)服務(wù)都開(kāi)始運營(yíng)API,開(kāi)放平臺開(kāi)發(fā)者的客戶(hù)群體也從C店賣(mài)家增加到了B的品牌商,渠道商等。

              這是一個(gè)業(yè)務(wù)多變的一年,這也是淘寶內部對開(kāi)放平臺認可的新階段。第一個(gè)階段是放任不管,開(kāi)放平臺部門(mén)自己要開(kāi)什么,封裝什么。第二階段是開(kāi)放什么業(yè)務(wù)方負責支持開(kāi)放,但開(kāi)放后的結果概不了解,也無(wú)所謂了解。第三階段就是業(yè)務(wù)主動(dòng)要開(kāi)放,開(kāi)放后開(kāi)始運營(yíng)服務(wù),培養isv市場(chǎng),帶動(dòng)業(yè)務(wù)的正向發(fā)展。

              這一年由于業(yè)務(wù)量的增長(cháng)以及分析需求到用戶(hù)緯度,因此在11年底啟動(dòng)了流式分析集群重構升級的項目,將新的分析集群項目命名為beatles,希望他能夠象甲殼蟲(chóng)一樣,小蟲(chóng)吃樹(shù)葉,再多都吃的下。11年底到12年初,用了近2個(gè)半月的時(shí)間做了一次完整的重構,將那么多年的補丁經(jīng)驗和老代碼重新設計和實(shí)現,并且將Mater根據業(yè)務(wù)可垂直切分,最終解決Master歸并壓力的問(wèn)題,當然期間的技術(shù)優(yōu)化點(diǎn)也不少,因為我們的目標從3分鐘壓縮到了1分鐘,而我們的數據量翻番,統計緯度細化到了用戶(hù)緯度。(意味著(zhù)結果也會(huì )很大,不靠文件做中轉如何來(lái)實(shí)現需要更多的分拆和協(xié)同設計)

              這一年起了兩個(gè)比較創(chuàng )新的項目:JS SDK和無(wú)線(xiàn)SDK(IOS,安卓),這兩個(gè)SDK的出現一定程度上由業(yè)務(wù)和安全兩方面決定。首先11年年底啟動(dòng)了社區電子商務(wù)化的項目,也就是現在所說(shuō)的輕電商(XTao)項目,將更多的網(wǎng)站和淘寶銜接起來(lái),此時(shí)網(wǎng)站間的融合就要求更輕便和簡(jiǎn)易,最成功的案例就是Facebook,于是年初的時(shí)候,拿這 FB的JS SDK一陣看,就開(kāi)始動(dòng)手寫(xiě)了,期間很高興拉了UED同學(xué)入伙,這才使得這個(gè)JS SDK變的更加靠譜,更加專(zhuān)業(yè)。(前端這活誰(shuí)都可以玩,但要玩好最終還是要對那一系列苦逼的瀏覽器兼容有所深入理解,現在想想自己當時(shí)還是有點(diǎn)無(wú)知者無(wú)謂的)。同時(shí)有了JS SDK,買(mǎi)家類(lèi)的服務(wù)安全性有所保證,因為原先的REST調用在授權以后是無(wú)法知道是否是用戶(hù)發(fā)起的還是服務(wù)器發(fā)起的,而JS SDK一定程度上還要校驗Cookie的有效性,可以部分的保證用戶(hù)的在場(chǎng)知情。而下半年的無(wú)線(xiàn)SDK,就是間或的苦讀1個(gè)月的各種文檔,然后就開(kāi)始動(dòng)手玩了,由于對Java語(yǔ)言,動(dòng)態(tài)語(yǔ)言,腳本語(yǔ)言都有比較多的使用,因此Obj-c上手并不是那么困難,同時(shí)沒(méi)有涉及到過(guò)多的MVC的內容,做SDK基礎層的東西還是比較得心應手,就這樣IOS的無(wú)線(xiàn)SDK版本就出來(lái)了,此時(shí)在開(kāi)放平臺的技術(shù)團隊內部正在執行一個(gè)叫做Hack project的活動(dòng),其中一個(gè)自主項目就是安卓的SDK,因此一個(gè)月后,安卓的SDK順利的誕生了。這兩個(gè)無(wú)線(xiàn)SDK所擔負的職責就是把控無(wú)線(xiàn)安全問(wèn)題,不僅淘寶,業(yè)界其實(shí)很多公司都還沒(méi)理解無(wú)線(xiàn)開(kāi)放的風(fēng)險到底有多大,OAuth2基本就無(wú)法保證無(wú)線(xiàn)的用戶(hù)安全,因此如何在SDK和服務(wù)端融入更高級別的安全設計,成為了無(wú)線(xiàn)SDK誕生的第一個(gè)重要需求。

            原文轉自:http://kjueaiud.com

            ...
            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>