精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Tumblr 架構設計

開發 架構
最近的新聞中我們得知雅虎11億美元收購了Tumblr: Yahoo bought Tumblr for $1.1 billion. 你也許會發現Instagram也被Facebook重金收購的介紹. 這是一個巧合嗎?這就由你來判斷吧

最近的新聞中我們得知雅虎11億美元收購了Tumblr: Yahoo bought Tumblr for $1.1 billion. 你也許會發現Instagram也被Facebook重金收購的介紹. 這是一個巧合嗎?這就由你來判斷吧。

為什么雅虎會收購Tumblr? 這場交易中的商業價值我可能無法判斷,但是如果你對Tumblr的技術方面有所了解,你一定會為Tumblr豎起大拇指. 為什么這么說呢,請接著讀... Tumblr每月頁面瀏覽量超過150億次,已經成為火爆的博客社區。用戶也許喜歡它的簡約、漂亮,并且它對用戶體驗強烈的關注,或是友好而忙碌的溝通方式,總之,它深得人們的喜愛。

每月超過30%的增長當然不可能沒有挑戰,其中可靠性問題尤為艱巨。每天5億次瀏覽量,峰值每秒4萬次請求,每天3TB新的數據存儲,并運行于超過1000臺服務器上,所有這些幫助Tumblr實現巨大的經營規模。

創業公司邁向成功,都要邁過危險的迅速發展期這道門檻。尋找人才,不斷改造基礎架構,維護舊的架構,同時要面對逐月大增的流量,而且曾經只有4位工程師。這意味著必須艱難地選擇應該做什么,不該做什么。這就是Tumblr的狀況。好在現在已經有20位工程師了,可以有精力解決問題,并開發一些有意思的解決方案。

Tumblr最開始是非常典型的LAMP應用。目前正在向分布式服務模型演進,該模型基于ScalaHBaseRedisKafkaFinagle,此外還有一個有趣的基于Cell的架構,用于支持Dashboard .現在的重點被放在了解決他們PHP程序中的短期問題,找出問題,并正確的使用服務化去解決他們. Tumblr目前的最大問題是如何改造為一個大規模網站。系統架構正在從LAMP演進為最先進的技術組合,同時團隊也要從小的創業型發展為全副武裝、隨時待命的正規開發團隊,不斷創造出新的功能和基礎設施。下面就是Blake對Tumblr系統架構情況的介紹。

Tumblr網址:  http://www.tumblr.com/

統計

  • 每天 5 億頁面瀏覽量
  • 每月超過 150億 頁面瀏覽量
  • 約 20 名工程師
  • 峰值每秒大約 4 萬請求
  • 每天有超過 1TB 的數據進入 Hadoop 集群
  • 每天有幾個 TB 的數據進入 MySQL/HBase/Redis/Memcache
  • 每月增長 30%
  • 產品環境有大約 1000 個硬件節點
  • 平均每個工程師每月處理10億頁面訪問
  • 每天大約 50GB 的文章,關注者列表更新大約每天 2.7TB
  • Dashboard 每秒百萬次寫,每秒 5w 讀

軟件

  • OS X 用于開發,產品環境用 Linux (CentOS, Scientific)
  • Apache
  • PHP, Scala, Ruby
  • Redis, HBase, MySQL
  • Varnish, HA-Proxy, nginx,
  • Memcache, Gearman, Kafka, Kestrel, Finagle
  • Thrift, HTTP
  • Func - 一個安全的、腳本化的遠程控制框架和 API
  • Git, Capistrano, Puppet, Jenkins

硬件

  • 500 臺 Web 服務器
  • 200 數據庫服務器 (大多數是備用池)
  1. 47 個池
  2. 30 個分區
  • 30 臺 memcache 服務器
  • 22 臺 redis 服務器
  • 15 臺 varnish 服務器
  • 25 個 haproxy 節點
  • 8 個 nginx
  • 14 個作業隊列服務器 (kestrel + gearman)

構架

  • 與其他社交網站不同的是,Tumblr有其獨特的使用模式。
    1. 每天有超過5千萬篇文章更新,平均每篇文章的跟帖又數以百計。用戶一般只有數百個粉絲。這與其他社會化網站里少數用戶有幾百萬粉絲非常不同,使得Tumblr的擴展性極具挑戰性。
    2. 按用戶使用時間衡量,Tumblr已經是排名第二的社會化網站。內容的吸引力很強,有很多圖片和視頻,文章往往不短,一般也不會太長,但允許寫得很長。文章內容往往比較深入,用戶會花費更長的時間來閱讀。
    3. 用戶與其他用戶建立聯系后,可能會在Dashboard上往回翻幾百頁逐篇閱讀,這與其他網站基本上只是部分信息流不同。
    4. 用戶的數量龐大,用戶的平均到達范圍更廣,用戶較頻繁的發帖,這些都意味著有巨量的更新需要處理。
  • Tumblr目前運行在一個托管數據中心中,已在考慮地域上的分布式構架。
  1. Tumblr平臺由兩個組件構成:公共Tumblelogs和Dashboard
    1. 公共Tumblelogs與博客類似,并非動態,易于緩存
    2. Dashboard是類似于Twitter的時間軸,用戶由此可以看到自己關注的所有用戶的實時更新。
      1. 與博客的擴展性不同,緩存作用不大,因為每次請求都不同,尤其是活躍的關注者。
      2. 而且需要實時而且一致,文章每天僅更新50GB,跟帖每天更新2.7TB,所有的多媒體數據都存儲在S3上面。
    3. 大多數用戶以Tumblr作為內容瀏覽工具,每天瀏覽超過5億個頁面,70%的瀏覽來自Dashboard。
    4. Dashboard的可用性已經不錯,但Tumblelog一直不夠好,因為基礎設施是老的,而且很難遷移。由于人手不足,一時半會兒還顧不上。

老的Tumblr構架

  • Tumblr最開始是托管在Rackspace上的,每個自定義域名的博客都有一個A記錄。當2007年Rackspace無法滿足其發展速度不得不遷移時,大量的用戶都需要同時遷移。所以他們不得不將自定義域名保留在Rackspace,然后再使用HAProxy和Varnish路由到新的數據中心。類似這樣的遺留問題很多。
  • 開始的架構演進是典型的LAMP路線
    1. 最初用PHP開發,幾乎所有程序員都用PHP
    2. 最初是三臺服務器:一臺Web,一臺數據庫,一臺PHP
    3. 為了擴展,開始使用memcache,然后引入前端cache,然后在cache前再加HAProxy,然后是非常奏效的MySQL sharding
    4. 采用“在單臺服務器上榨出一切”的方式。過去一年已經用C開發了兩個后端服務:ID generatorStaircar(用Redis進行Dashboard通知)
  • Dashboard采用了“擴散-收集”方式。當用戶訪問Dashboard時將顯示事件,來自所關注的用戶的事件是通過拉然后顯示的。這樣支撐了6個月。由于數據是按時間排序的,因此sharding模式不太管用。 

新的構架

  • 由于招人和開發速度等原因,改為以JVM為中心。
  • 目標是將一切從PHP應用改為服務,使應用變成請求鑒別、呈現等諸多服務之上的薄層。
  • 選擇了Scala 和 Finagle
    1. 在團隊內部有很多人具備Ruby和PHP經驗,所以Scala很有吸引力。
    2. Finagle是選擇Scala的重要因素之一。這個來自Twitter的庫可以解決大多數分布式問題,比如分布式跟蹤、服務發現、服務注冊等。
    3. 轉到JVM上之后,Finagle提供了團隊所需的所有基本功能(Thrift, ZooKeeper等),無需再開發許多網絡代碼,另外,團隊成員認識該項目的一些開發者。
    4. Foursquare和Twitter都在用Finagle,Meetup也在用Scala。
    5. 應用接口與Thrift類似,性能極佳。
    6. 團隊本來很喜歡Netty,但不想用Java,Scala是不錯的選擇。
    7. 選擇Finagle是因為它很酷,還認識幾個開發者。
    8. 之所以沒有選擇Node.js,是因為以JVM為基礎更容易擴展。Node的發展為時尚短,缺乏標準、最佳實踐以及大量久經測試的代碼。而用Scala的話,可以使用所有Java代碼。雖然其中并沒有多少可擴展的東西,也無法解決5毫秒響應時間、49秒HA、4萬每秒請求甚至有時每秒40萬次請求的問題。但是,Java的生態鏈要大得多,有很多資源可以利用。
  • 內部服務從C/libevent為基礎正在轉向Scala/Finagle為基礎。
  • 開始采用新的NoSQL存儲方案如HBase和Redis。但大量數據仍然存儲在大量分區的MySQL架構中,并沒有用HBase代替MySQL。
  • HBase主要支持短地址生產程序(數以十億計)還有歷史數據和分析,非常結實。此外,HBase也用于高寫入需求場景,比如Dashboard刷新時一秒上百萬的寫入。之所以還沒有替換HBase,是因為不能冒業務上風險,目前還是依靠人來負責更保險,先在一些小的、不那么關鍵的項目中應用,以獲得經驗。
  • MySQL和時間序列數據sharding(分片)的問題在于,總有一個分片太熱。另外,由于要在slave上插入并發,也會遇到讀復制延遲問題。
  • 此外,還開發了一個公用服務框架:
    1. 花了很多時間解決分布式系統管理這個運維問題。
    2. 為服務開發了一種Rails scaffolding,內部用模板來啟動服務。
    3. 所有服務從運維的角度來看都是一樣的,所有服務檢查統計數據、監控、啟動和停止的方式都一樣。
    4. 工具方面,構建過程圍繞SBT(一個Scala構建工具),使用插件和輔助程序管理常見操作,包括在Git里打標簽,發布到代碼庫等等。大多數程序員都不用再操心構建系統的細節了。
  • 40臺服務器采用HAProxy進行負載均衡,Varnish進行緩存.
  • 200臺數據庫服務器中,很多是為了提高可用性而設,使用的是常規硬件,但MTBF(平均故障間隔時間)極低。故障時,備用充足。
  • 500臺服務器運行Apache和其他PHP程序。
  • 6個為了支持PHP應用的后端服務,并有一個小組專門開發后端服務。新服務的發布需要兩到三周,包括Dashboard通知、Dashboard二級索引、短地址生成、處理透明分片的memcache代理。
  • 其中在MySQL分片上耗時很多。雖然在紐約本地非常熱,但并沒有使用MongoDB,他們認為MySQL的可擴展性足夠了。
  • Gearman用于會長期運行無需人工干預的工作。
  • 可用性是以達到范圍(reach)衡量的。用戶能夠訪問自定義域或者Dashboard嗎?也會用錯誤率。
  • 歷史上總是解決那些最高優先級的問題,而現在會對故障模式系統地分析和解決,目的是從用戶和應用的角度來定成功指標。
  • 最開始Finagle是用于Actor模型的,但是后來放棄了。對于運行后無需人工干預的工作,使用任務隊列。而且Twitter的util工具庫中有Future實現,服務都是用Future(Scala中的無參數函數,在與函數關聯的并行操作沒有完成時,會阻塞調用方)實現的。當需要線程池的時候,就將Future傳入Future池。一切都提交到Future池進行異步執行。
  • Scala提倡無共享狀態。由于已經在Twitter生產環境中經過測試,Finagle這方面應該是沒有問題的。使用Scala和Finagle中的結構需要避免可變狀態,不使用長期運行的狀態機。狀態從數據庫中拉出、使用再寫回數據庫。這樣做的好處是,開發人員不需要操心線程和鎖。
  • 22臺Redis服務器,每臺的都有8-32個實例,因此線上同時使用了100多個Redis實例。
    1. Redis主要用于Dashboard通知的后端存儲。
    2. 所謂通知就是指某個用戶like了某篇文章這樣的事件。通知會在用戶的Dashboard中顯示,告訴他其他用戶對其內容做了哪些操作。
    3. 高寫入率使MySQL無法應對。
    4. 通知轉瞬即逝,所以即使遺漏也不會有嚴重問題,因此Redis是這一場景的合適選擇。
    5. 這也給了開發團隊了解Redis的機會。
    6. 使用中完全沒有發現Redis有任何問題,社區也非常棒。
    7. 開發了一個基于Scala Futures的Redis接口,該功能現在已經并入了Cell架構。
    8. 短地址生成程序使用Redis作為一級Cache,HBase作為永久存儲。
    9. Dashboard的二級索引是以Redis為基礎開發的。
    10. Redis還用作Gearman的持久存儲層,使用Finagle開發的memcache代理。
    11. 正在緩慢地從memcache轉向Redis。希望最終只用一個cache服務。性能上Redis與memcache相當。

#p#

內部通訊管道(Firehose)

  • 內部的應用需要活躍的信息流通道。這些信息包括用戶創建/刪除的信息,liking/unliking 的提示,等等。挑戰在于這些數據要實時的分布式處理。我們希望能夠檢測內部運行狀況,應用的生態系統能夠可靠的生長,同時還需要建設分布式系統的控制中心。
  • 以前,這些信息是基于 Scribe (Facebook 開源的分布式日志系統。)/Hadoop 的分布式系統。服務會先記錄在 Scribe 中,并持續的長尾形式寫入,然后將數據輸送給應用。這種模式可以立即停止伸縮,尤其在峰值時每秒要創建數以千計的信息。不要指望人們會細水長流式的發布文 件和 grep。
  • 內部的 firehose 就像裝載著信息的大巴,各種服務和應用通過 Thrift 與消防管線溝通。(一個可伸縮的跨語言的服務開發框架。)
  • LinkedIn 的 Kafka 用于存儲信息。內部人員通過 HTTP 鏈接 firehose。經常面對巨大的數據沖擊,采用 MySQL 顯然不是一個好主意,分區實施越來越普遍。
  • firehose 的模型是非常靈活的,而不像 Twitter 的 firehose 那樣數據被假定是丟失的。
    1. firehose 的信息流可以及時的回放。他保留一周內的數據,可以調出這期間任何時間點的數據。
    2. 支持多個客戶端連接,而且不會看到重復的數據。每個客戶端有一個 ID。Kafka 支持客戶群,每個群中的客戶都用同一個 ID,他們不會讀取重復的數據。可以創建多個客戶端使用同一個 ID,而且不會看到重復的數據。這將保證數據的獨立性和并行處理。Kafka 使用 ZooKeeper (Apache 推出的開源分布式應用程序協調服務。)定期檢查用戶閱讀了多少。

為 Dashboard 收件箱設計的 Cell 架構

  • 現在支持 Dashboard 的功能的分散-集中架構非常受限,這種狀況不會持續很久。
    1. 解決方法是采用基于 Cell 架構的收件箱模型,與 Facebook Messages 非常相似。
    2. 收件箱與分散-集中架構是對立的。每一位用戶的 dashboard 都是由其追隨者的發言和行動組成的,并按照時間順序存儲。
    3. 就因為是收件箱就解決了分散-集中的問題。你可以會問到底在收件箱中放了些什么,讓其如此廉價。這種方式將運行很長時間。
  • 重寫 Dashboard 非常困難。數據已經分布,但是用戶局部升級產生的數據交換的質量還沒有完全搞定。
    1. 數據量是非常驚人的。平均每條消息轉發給上百個不同的用戶,這比 Facebook 面對的困難還要大。大數據+高分布率+多個數據中心。
    2. 每秒鐘上百萬次寫入,5萬次讀取。沒有重復和壓縮的數據增長為2.7TB,每秒百萬次寫入操作來自 24 字節行鍵。
    3. 已經流行的應用按此方法運行。
  • Cell構架
    1. 每個 cell 是獨立的,并保存著一定數量用戶的全部數據。在用戶的 Dashboard 中顯示的所有數據也在這個 cell 中。
    2. 用戶映射到 cell。一個數據中心有很多 cell。
    3. 每個 cell 都有一個 HBase 的集群,服務集群,Redis 的緩存集群。
    4. 用戶歸屬到 cell,所有 cell 的共同為用戶發言提供支持。
    5. 每個 cell 都基于 Finagle(Twitter 推出的異步的遠程過程調用庫),建設在 HBase 上,Thrift 用于開發與 firehose 和各種請求與數據庫的鏈接。
    6. 一個用戶進入 Dashboard,其追隨者歸屬到特定的 cell,這個服務節點通過 HBase 讀取他們的 dashboard 并返回數據。
    7. 后臺將追隨者的 dashboard 歸入當前用戶的 table,并處理請求。
    8. Redis 的緩存層用于 cell 內部處理用戶發言。
  • 請求流:用戶發布消息,消息將被寫入 firehose,所有的 cell 處理這條消息并把發言文本寫入數據庫,cell 查找是否所有發布消息追隨者都在本 cell 內,如果是的話,所有追隨者的收件箱將更新用戶的 ID。
  • cell 構架的優點:
    1. 大規模的請求被并行處理,組件相互隔離不會產生干擾。 cell 是一個并行的單位,因此可以任意調整規格以適應用戶群的增長。
    2. cell 的故障是獨立的。一個 Cell 的故障不會影響其他 cell。
    3. cell 的表現非常好,能夠進行各種升級測試,實施滾動升級,并測試不同版本的軟件。
  • 關鍵的思想是容易遺漏的:所有的發言都是可以復制到所有的 cell。
    1. 每個 cell 中存儲的所有發言的單一副本。 每個 cell 可以完全滿足 Dashboard 呈現請求。應用不用請求所有發言者的 ID,只需要請求那些用戶的 ID。他可以在 dashboard 返回內容。每一個 cell 都可以滿足 Dashboard 的所有需求,而不需要與其他 cell 進行通信。
    2. 用到兩個 HBase table :一個 table 用于存儲每個發言的副本,這個 table 相對較小。在 cell 內,這些數據將與存儲每一個發言者 ID。第二個 table 告訴我們用戶的 dashboard 不需要顯示所有的追隨者。當用戶通過不同的終端訪問一個發言,并不代表閱讀了兩次。收件箱模型可以保證你閱讀到。
    3. 發言并不會直接進入到收件箱,因為那實在太大了。所以,發言者的 ID 將被發送到收件箱,同時發言內容將進入 cell。這個模式有效的減少了存儲需求,只需要返回用戶在收件箱中瀏覽發言的時間。而缺點是每一個 cell 保存所有的發言副本。令人驚奇的是,所有發言比收件箱中的鏡像要小。每天每個 cell 的發言增長 50GB,收件箱每天增長2.7TB。用戶消耗的資源遠遠超過他們制造的。
    4. 用戶的 dashboard 不包含發言的內容,只顯示發言者的 ID,主要的增長來自 ID。
    5. 當追隨者改變時,這種設計方案也是安全的。因為所有的發言都保存在 cell 中了。如果只有追隨者的發言保存在 cell 中,那么當追隨者改變了,將需要一些回填工作。
    6. 另外一種設計方案是采用獨立的發言存儲集群。這種設計的缺點是,如果群集出現故障,它會影響整個網站。因此,使用 cell 的設計以及后復制到所有 cell 的方式,創建了一個非常強大的架構。
  • 一個用戶擁有上百萬的追隨者,這帶來非常大的困難,有選擇的處理用戶的追隨者以及他們的存取模式(見Feeding Frenzy
    1. 不同的用戶采用不同并且恰當的存取模式和分布模型,兩個不同的分布模式包括:一個適合受歡迎的用戶,一個使用大眾。
    2. 依據用戶的類型采用不同的數據處理方式,活躍用戶的發言并不會被真正發布,發言將被有選擇的體現。
    3. 追隨了上百萬用戶的用戶,將像擁有上百萬追隨者的用戶那樣對待。
  • cell 的大小非常難于決定。cell 的大小直接影響網站的成敗。每個 cell 歸于的用戶數量是影響力之一。需要權衡接受怎樣的用戶體驗,以及為之付出多少投資。
  • 從 firehose 中讀取數據將是對網絡最大的考驗。在 cell 內部網絡流量是可管理的。
  • 當更多 cell 被增添到網絡中來,他們可以進入到 cell 組中,并從 firehose 中讀取數據。一個分層的數據復制計劃。這可以幫助遷移到多個數據中心。

在紐約啟動運作

  • 紐約具有獨特的環境,資金和廣告充足。招聘極具挑戰性,因為缺乏創業經驗。
  • 在過去的幾年里,紐約一直致力于推動創業。紐約大學和哥倫比亞大學有一些項目,鼓勵學生到初創企業實習,而不僅僅去華爾街。市長建立了一所學院,側重于技術。

團隊架構

  • 團隊:基礎架構,平臺,SRE,產品,web ops,服務
  • 基礎架構:5層以下,IP 地址和 DNS,硬件配置
  • 平臺:核心應用開發,SQL 分片,服務,Web 運營
  • SRE:在平臺和產品之間,側重于解決可靠性和擴展性的燃眉之急
  • 服務團隊:相對而言更具戰略性
  • Web ops:負責問題檢測、響應和優化

軟件部署

  • 開發了一套 rsync 腳本,可以隨處部署 PHP 應用程序。一旦機器的數量超過 200 臺,系統便開始出現問題,部署花費了很長時間才完成,機器處于部署進程中的各種狀態。
  • 接下來,使用 Capistrano(一個開源工具,可以在多臺服務器上運行腳本)在服務堆棧中構建部署進程(開發、分期、生產)。在幾十臺機器上部署可以正常工作,但當通過 SSH 部署到數百臺服務器時,再次失敗。
  • 現在,所有的機器上運行一個協調軟件。基于 Redhat Func(一個安全的、腳本化的遠程控制框架和接口)功能,一個輕量級的 API 用于向主機發送命令,以構建擴展性。
  • 建立部署是在 Func 的基礎上向主機發送命令,避免了使用 SSH。比如,想在組A上部署軟件,控制主機就可以找出隸屬于組A的節點,并運行部署命令。
  • 通過Capistrano的命令實現部署。它可以可以從git倉庫中拉取代碼。正因為是基于HTTP的,所以非常易于擴展。他們喜歡 Capistrano,因為它支持簡單的基于目錄的版本控制,能夠很好地管理PHP程序。版本更新的時候,每個目錄都包含一個SHA,所以很容易檢查版本的正確性。
     
  • Func API 可用于返回狀態報告,報告哪些機器上有這些軟件版本。
  • 安全重啟任何服務,因為它們會關閉連接,然后重啟。
  • 在激活前的黑暗模式下運行所有功能。

開發

  • 從哲學上,任何人都可以使用自己想要的任意工具。但隨著團隊的發展壯大,這些工具出現了問題。新員工想要更好地融入團隊,快速地解決問題,必須以他們為中心,建立操作的標準化。
  • 過程類似于 Scrum(一種敏捷管理框架),非常敏捷。
  • 每個開發人員都有一臺預配置的開發機器,并按照控制更新。
  • 開發機會出現變化,測試,分期,乃至用于生產。
  • 開發者使用 VIM 和 TextMate。
  • 測試是對 PHP 程序進行代碼審核。
  • 在服務方面,他們已經實現了一個與提交相掛鉤的測試基礎架構,接下來將繼承并內建通知機制。

招聘流程

  • 面試通常避免數學、猜謎、腦筋急轉彎等問題,而著重關注應聘者在工作中實際要做什么。
  • 著重編程技能。
  • 面試不是比較,只是要找對的人。
  • 挑戰在于找到具有可用性、擴展性經驗的人才,以應對 Tumblr 面臨的網絡擁塞。
    1. 例如,對于一個新的ID生成器器,他們需要一個高可用的JVM進程,并且需要在1萬次每分鐘的請求下及最多使用500兆內存的情況下完成1毫秒以下的響應。他們發現串行收集器給這個特定的工作負載帶來最低的延遲。在 JVM優化上花了大量的時間。
  • 在 Tumblr 工程博客(Tumblr Engineering Blog),他們對已過世的 Dennis Ritchie 和 John McCarthy 予以紀念。

經驗及教訓

  • 自動化無處不在
  • MySQL(增加分片)規模,應用程序暫時還不行
  • Redis 總能帶給人驚喜
  • 基于 Scala 語言的應用執行效率是出色的
  • 廢棄項目——當你不確定將如何工作時
  • 不顧用在他們發展經歷中沒經歷過技術挑戰的人,聘用有技術實力的人是因為他們能適合你的團隊以及工作。
  • 選擇正確的軟件集合將會幫助你找到你需要的人
  • 建立團隊的技能
  • 閱讀文檔和博客文章。
  • 多與同行交流,可以接觸一些領域中經驗豐富的人,例如與在 Facebook、Twitter、LinkedIn 的工程師多交流,從他們身上可以學到很多
  • 對技術要循序漸進,在正式投入使用之前他們煞費苦心的學習 HBase 和 Redis。同時在試點項目中使用或將其控制在有限損害范圍之內。

英文原文:The Tumblr Architecture Yahoo Bought For A Cool Billion Dollars

譯文鏈接:http://www.oschina.net/translate/the-tumblr-architecture-yahoo-bought-for-a-cool-billion-doll

 

責任編輯:林師授 來源: OSCHINA編譯
相關推薦

2015-06-02 04:17:44

架構設計審架構設計說明書

2025-04-15 04:00:00

2025-05-09 08:45:13

2023-07-05 08:00:52

MetrAuto系統架構

2012-02-16 18:00:57

Tumblr架構

2015-06-02 04:34:05

架構設計

2009-07-10 09:31:57

MyEclipse U

2017-11-17 07:06:27

互聯網分層架構APP

2021-07-21 16:30:38

iOSAPP架構

2024-08-18 14:09:24

2012-09-19 13:46:37

存儲存儲設計快速表態

2013-09-02 17:46:41

MVC架構設計MVC架構設計

2019-11-25 10:58:19

Tomcat架構Web

2012-06-07 10:45:12

軟件架構設計原則

2009-02-01 10:17:19

Java架構設計設計模式

2023-05-12 08:06:46

Kubernetes多云架構

2021-10-28 06:17:46

架構設計組件

2024-04-17 08:03:45

架構設計Java

2023-04-13 08:23:28

軟件架構設計

2024-09-18 09:04:33

架構模式查詢
點贊
收藏

51CTO技術棧公眾號

国产精品7m视频| 亚洲国产精久久久久久| 97超碰人人爱| 韩国av免费在线观看| 国产亚洲毛片| 一本色道久久88精品综合| 国产乱码一区二区三区四区| 国产三线在线| 日韩av三区| 色天天综合久久久久综合片| 中文字幕日韩精品久久| 亚洲精品一区二区三区不卡| 午夜亚洲影视| 欧美精品在线网站| 精品无码人妻一区二区免费蜜桃| 日韩精品一级毛片在线播放| 亚洲一区在线免费观看| 日韩av在线电影观看| 精品人妻一区二区三区麻豆91 | 北条麻妃一区二区三区| 国产精品电影一区| 日本少妇激情视频| 97精品97| 亚洲人成电影网站色| 巨乳女教师的诱惑| 99热播精品免费| 亚洲777理论| 无码人妻精品一区二区蜜桃百度| 欧美一区二区三区网站| 美女一区二区在线观看| 欧美日本精品一区二区三区| 亚洲中文字幕无码专区| 最近中文字幕免费mv2018在线 | 精品无码一区二区三区蜜臀| 人人网欧美视频| 日韩欧美国产麻豆| 久久6免费视频| www.一区| 日本久久精品电影| 黑人糟蹋人妻hd中文字幕 | 一区二区三区四区精品在线视频| 日本免费高清一区| 色视频在线看| 91香蕉视频污| 国产精品视频福利| 99热在线只有精品| 国产在线精品一区二区三区不卡| 国产精品久久久久不卡| 无码人妻av一区二区三区波多野| 亚洲激情另类| 久久免费国产精品1| jjzz黄色片| 麻豆视频久久| 欧美一卡二卡三卡| 日韩视频免费播放| 黄色羞羞视频在线观看| 一区二区三区国产豹纹内裤在线| 91中文在线观看| 免费在线一级片| 中文字幕一区二区三区久久网站 | 国产成人精品福利一区二区三区| 国产绳艺sm调教室论坛| 国产米奇在线777精品观看| 国产又爽又黄的激情精品视频 | 欧美 日韩 国产 一区二区三区| av伊人久久| 中文字幕视频一区二区在线有码| 91精品久久久久久久久久久久| 国产99久久精品一区二区300| 色激情天天射综合网| 91免费视频网站在线观看| 色戒汤唯在线观看| 亚洲国产精品99久久久久久久久| 成人黄色在线播放| 国产精品玖玖玖| 久久99最新地址| 97视频中文字幕| 天天操天天舔天天干| 久久蜜桃av一区二区天堂| 秋霞久久久久久一区二区| 午夜在线视频播放| 一区二区三区免费| 97国产精东麻豆人妻电影| **在线精品| 欧美久久久久久久久| 极品白嫩的小少妇| 亚洲肉体裸体xxxx137| 最近更新的2019中文字幕| 欧美日韩精品在线观看视频| 亚洲天堂成人| 国产精品久久久久久久久借妻| 一级片视频免费| 成人久久18免费网站麻豆 | 国产精品视频一区国模私拍| 亚洲中文一区二区三区| 成人深夜视频在线观看| 日韩免费三级| 懂色av一区| 欧美午夜寂寞影院| 日韩一级片免费视频| av电影在线观看一区二区三区| 中文字幕一区日韩精品欧美| 日本天堂免费a| 成人av三级| 婷婷国产v国产偷v亚洲高清| 欧美污视频网站| 精品国产乱码久久久久久樱花| 日韩成人免费视频| 顶臀精品视频www| 小嫩嫩精品导航| 北条麻妃高清一区| 91在线高清| 精品久久久久久中文字幕大豆网| 日韩欧美国产片| 啪啪国产精品| 久久99久国产精品黄毛片入口| 无码人妻精品一区二区三区蜜桃91| 激情亚洲综合在线| 欧美一区二区三区四区夜夜大片| 中文字幕有码在线观看| 欧美在线一二三| 这里只有精品在线观看视频| 色综合久久网| 日韩av成人在线观看| 亚洲黄色在线观看视频| ...xxx性欧美| 热久久精品免费视频| 欧美重口另类| 欧美国产日韩xxxxx| 国产又粗又猛又爽又黄视频| 久久久久久9999| 青青青国产在线观看| 久久免费福利| 久久久精品欧美| 欧美男人天堂网| 久久综合久久久久88| www插插插无码视频网站| 精品午夜视频| 久久综合久久88| 一级黄色片在线| 国产精品色在线观看| 国产三级日本三级在线播放| 琪琪久久久久日韩精品| 国内精品久久久久久| 亚洲av永久纯肉无码精品动漫| 中文字幕日本不卡| 天天爽人人爽夜夜爽| 欧美精品一区二区三区中文字幕| 欧美亚洲视频在线看网址| 亚州视频一区二区三区| 精品成人乱色一区二区| 性色av蜜臀av浪潮av老女人| 欧美视频四区| 国产成人精品免费视频大全最热 | 日韩美女中文字幕| 男人久久精品| 国产精品久久久久久久久久久免费看 | 日欧美一区二区| 欧美精品欧美精品| 91看片一区| 日韩中文字幕网| 国产伦精品一区二区三区四区| 综合色天天鬼久久鬼色| 三级黄色片免费看| 久草成人资源| 国产精品久久久久久久电影| 欧美高清视频| 日韩欧美成人午夜| 国产成人自拍视频在线| 美女视频黄 久久| 欧美爱爱视频网站| 91综合久久爱com| 欧美诱惑福利视频| h网站在线免费观看| 欧美精品丝袜中出| 九九热只有精品| 91原创在线视频| 亚洲国产精品三区| 欧美日韩调教| 91免费版黄色| 亚洲天堂资源| 色老头一区二区三区在线观看| 国产熟女精品视频| 欧美日韩国产黄| 日本黄色激情视频| 久久中文字幕一区二区三区| 涩涩日韩在线| 视频一区日韩| 欧美国产乱视频| lutube成人福利在线观看| 日韩亚洲电影在线| 国产激情无码一区二区三区| 国产成人精品三级麻豆| 九色在线视频观看| 91精品天堂福利在线观看| 国精产品99永久一区一区| 秋霞国产精品| 久久久久久久国产精品| 成年女人的天堂在线| 欧美成人一区二区三区| 黄色av一级片| 亚洲综合成人在线| 日本不卡一区视频| 97国产一区二区| 亚洲精品第三页| 亚洲欧美卡通另类91av| 男女啪啪免费观看| 成人女性视频| 精品国产乱码久久久久| 电影一区中文字幕| y97精品国产97久久久久久| 黑人精品一区二区| 91麻豆精品国产91久久久更新时间| 91九色丨porny丨肉丝| 综合av第一页| 舐め犯し波多野结衣在线观看| 成人永久免费视频| 国产精品久久久久久久av福利| 亚洲伊人网站| 给我免费播放片在线观看| 99九九热只有国产精品| 色一情一乱一伦一区二区三区丨| 林ゆな中文字幕一区二区| 亚洲最大的网站| 四虎国产精品免费久久| 国产精品久久久久久久久久新婚| 黄色aa久久| 亚洲天堂免费视频| 日韩一级片免费在线观看| 婷婷国产在线综合| 久久婷婷一区二区| 亚洲欧美视频一区| 精品少妇一区二区三区密爱| 久久久久久久av麻豆果冻| 中文字幕 亚洲一区| 成人综合在线观看| 18禁一区二区三区| 国产成人综合网站| 日韩欧美色视频| 国产一区欧美二区| 日韩va在线观看| 久久99日本精品| 玖玖爱视频在线| 精品写真视频在线观看| 日韩中文字幕a| 精品中文字幕一区二区| 亚洲a级黄色片| 国产一区二区三区精品欧美日韩一区二区三区 | 三区精品视频| 国产精品嫩模av在线| 国产精品草莓在线免费观看| 偷拍自拍在线看| 国产成人精品视频在线| 国产免费不卡| 国产成人精品视| 欧美jizz18| 98精品国产高清在线xxxx天堂| www.中文字幕久久久| 伊人伊成久久人综合网小说| www黄在线观看| 久久精品视频免费播放| 二区三区四区高清视频在线观看| 久久精品亚洲热| 欧美黄色视屏| 91精品国产高清久久久久久久久| 26uuu亚洲电影| 国产精品成人aaaaa网站| 日韩免费大片| 99re资源| 青青一区二区| 亚洲欧美日韩在线综合 | 国产一区二区网站| 日韩欧美成人一区| 天堂av电影在线观看| 国产亚洲精品美女久久久| 免费高清在线观看| 欧美精品成人91久久久久久久| 中文字幕色婷婷在线视频| 国产在线日韩在线| 99精品中文字幕在线不卡 | 加勒比一区二区三区在线| 深夜福利日韩在线看| 91国内在线| 国产91精品久久久久久| 欧美黄页免费| 狠狠色噜噜狠狠色综合久| 欧美偷拍综合| 国产成人在线小视频| 久久三级福利| 四虎国产精品免费| 国产亚洲精品超碰| 国产精品 欧美激情| 日韩欧美在线视频日韩欧美在线视频 | 国产视频亚洲| 中文字幕亚洲影院| 久久婷婷国产综合精品青草| 东方av正在进入| 色噜噜久久综合| 性一交一乱一色一视频麻豆| 亚洲人成电影在线观看天堂色| 超碰在线观看免费版| 欧亚精品在线观看| 香蕉成人app| 亚洲一卡二卡三卡| 国产精品嫩草99av在线| 精品国产乱码久久久久久1区二区| 99视频国产精品| 日韩精品一区二区亚洲av性色| 精品色蜜蜜精品视频在线观看| 波多野结衣一区二区三区在线| 日韩欧美成人一区| 伊人免费在线| 2021久久精品国产99国产精品| 精品伊人久久| 亚洲成人午夜在线| 久久影院亚洲| 国产日韩视频一区| 亚洲色图欧洲色图| 在线免费观看高清视频| 亚洲欧美精品在线| 人人草在线视频| 国产精品10p综合二区| 天天揉久久久久亚洲精品| 日韩一级片播放| wwwwxxxxx欧美| 日韩精品视频免费看| 精品奇米国产一区二区三区| 快射视频在线观看| 成人黄色av网| 波多野结衣一区| 又色又爽又高潮免费视频国产| www.日韩在线| 日韩黄色a级片| 精品成人佐山爱一区二区| 日本在线视频中文有码| 91视频8mav| 欧美 日韩 国产精品免费观看| 欧美国产日韩另类| 国产精品短视频| 91在线公开视频| 久久精品中文字幕电影| 欧美系列精品| 中文字幕在线亚洲三区| 精品在线一区二区三区| 顶级黑人搡bbw搡bbbb搡| 欧美日韩免费视频| 黄页视频在线播放| 亚洲综合精品伊人久久| 欧美日韩久久| 稀缺呦国内精品呦| 亚洲成人免费视频| 天堂av网在线| 国产精品69av| 99久久99久久精品国产片桃花| 国产成年人视频网站| 1区2区3区国产精品| 国产日韩欧美视频在线观看| 欧美成人午夜影院| japanese色系久久精品| 九一国产精品视频| 久久久久九九视频| 在线观看免费观看在线| 久久亚洲电影天堂| 成人性生交大片免费看96| 无码人妻精品一区二区三区在线 | 亚洲成人教育av| 特黄毛片在线观看| 视频在线精品一区| 国内精品视频666| www.av视频在线观看| 亚洲美女性生活视频| 日本亚洲欧洲无免费码在线| 免费观看国产视频在线| 成人精品高清在线| 亚洲欧美日韩激情| 久久久国产精品亚洲一区| 国产suv精品一区| 午夜激情福利在线| 一区二区三区在线视频免费观看| 天天操天天操天天操| 国产精品久久久久久久久久久久久久| 99久久久久国产精品| 怡红院一区二区| 日本乱人伦aⅴ精品| 肉肉视频在线观看| 欧美日韩国产不卡在线看| 狠狠狠色丁香婷婷综合激情| 亚洲精品在线观看av| 在线亚洲国产精品网| 99久久香蕉| www.亚洲高清| 精品久久久视频| 国产在线69| 欧美综合激情| 大白屁股一区二区视频| www.亚洲激情| 高清欧美性猛交xxxx| 欧美1级片网站| 极品粉嫩小仙女高潮喷水久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 |