日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

如何构建高可用和可伸缩的架构?

發(fā)布時間:2025/3/21 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何构建高可用和可伸缩的架构? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何構建高可用和可伸縮的架構?

發(fā)表于2015-09-22 13:42| 4669次閱讀| 來源CSDN| 5 條評論| 作者蒲婧

CTOCTO俱樂部CTO講堂云存儲七牛架構高可用 width="22" height="16" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-09-22%2F2825769-CTO&type=3&count=&appkey=&title=%E5%A6%82%E4%BD%95%E6%9E%84%E5%BB%BA%E9%AB%98%E5%8F%AF%E7%94%A8%E5%92%8C%E5%8F%AF%E4%BC%B8%E7%BC%A9%E6%9E%B6%E6%9E%84%EF%BC%9F%E6%9C%89%E5%93%AA%E4%BA%9B%E5%85%B3%E9%94%AE%E7%9A%84%E6%8A%80%E6%9C%AF%E8%8A%82%E7%82%B9%E5%92%8C%E9%9A%BE%E7%82%B9%E6%8C%91%E6%88%98%EF%BC%9F%E5%AF%B9%E4%BA%8E%E5%85%AC%E5%8F%B8%E6%9D%A5%E8%AF%B4%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%9C%89%E5%BF%85%E8%A6%81%E8%80%83%E8%99%91%E9%AB%98%E5%8F%AF%E7%94%A8%E5%8F%AF%E4%BC%B8%E7%BC%A9%EF%BC%9F%E6%9C%AC%E6%96%87%E4%B8%BA%E4%B8%83%E7%89%9B%E9%A6%96%E5%B8%AD%E6%9E%B6%E6%9E%84%E5%B8%88%E6%9D%8E%E9%81%93%E5%85%B5%E5%9C%A8CTO%E8%AE%B2%E5%A0%82%E4%B8%AD%E7%9A%84%E7%B2%BE%E5%BD%A9%E5%88%86%E4%BA%AB%E6%95%B4%E7%90%86%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1449926446249" frameborder="0" scrolling="no" allowtransparency="true">摘要:如何構建高可用和可伸縮架構?有哪些關鍵的技術節(jié)點和難點挑戰(zhàn)?對于公司來說,為什么有必要考慮高可用可伸縮?本文為七牛首席架構師李道兵在CTO講堂中的精彩分享整理。

為了幫助IT從業(yè)者職業(yè)之路擁有更多收獲,在諸多C粉的殷切期待下,由CTO俱樂部打造的CTO線上講堂自登場以來獲得大家好評。本期邀請七牛首席架構師李道兵帶來“如何構建高可用和可伸縮的架構??”的主題分享。

歡迎加入CTO講堂微信群與業(yè)界大咖零距離溝通,每周都有技術大咖進群分享,報名拖至文末查看。


主講人:七牛首席架構師李道兵

嘉賓簡介:李道兵(新浪微博 @lidaobing, 個人博客:http://blog.lidaobing.com/),七牛首席架構師,Debian開發(fā)者,ISO-Codes等開源軟件維護者,python-lunardate、apistrano-scm-jenkins作者,原盛大云資深研究員。關注服務安全、架構健壯性(高可用、可測試、可追溯)等領域,參與了多個高壓力項目的結構設計,推崇高可用、可伸縮、低耦合的架構設計。

公司簡介:七牛由國內云存儲領域領軍人物之一許式偉于2011年創(chuàng)立,專注以數據為中心的公有云服務市場,公司核心團隊在海量存儲等領域擁有超過十年的技術積累,核心技術完全自主研發(fā)。七牛是全世界第一個提出用存儲、加速和數據處理這三個詞來描述云存儲服務的公司,為了更好地服務平臺上的用戶,七牛用KODO對象存儲服務、FUSION融合CDN管理平臺、DORA就近計算平臺、PILI直播云服務四大產品重新定義了云存儲,志在成為最開放、最完備的數據服務提供商。從成立至今的4年里,七牛已服務超28萬企業(yè)用戶,其中不乏很多重量級和明星企業(yè)。如新型創(chuàng)業(yè)中的美圖、Camera360、窮游、豌豆莢等,也有傳統(tǒng)企業(yè)中的順豐、PPTV、步步高、OPPO、海康威視、平安科技等。

以下是9月16日CTO講堂現場完整速記:

主持人:今天的嘉賓是七牛云存儲首席架構師李道兵,請您做下自我介紹。

李道兵:hi, 大家好,我是七牛的李道兵,在七牛擔任首席架構師。我07年開始工作,先后在金山、盛大、七牛工作。在金山加入了金山實驗室,主要方向是存儲和爬蟲。加入盛大后先后參與了盛大網盤和盛大云項目。

中間有一年在一個創(chuàng)業(yè)公司(GIGABASE.ORG)工作,之后就加入了七牛。

主持人:那么是在什么情況下您加入了七牛團隊,開始了創(chuàng)業(yè)團隊之旅的呢?

李道兵:2013 年還在GIGABASE 的時候,收到七牛CEO老許的邀請,一起吃了個飯,聊了一下。

聊完之后覺得七牛在做的事情就是我想做的事情,我覺得云的存在不應當只是為了降低采購周期,提高利用率,而應該著眼在如何利用云去給開發(fā)者和運維構建一個更好的平臺,如何去提高開發(fā)者和運維的效率。所以后來就辭去了 GIGABASE 的工作,加入了七牛。

主持人:請介紹一下目前七牛云存儲目前的情況以及技術團隊構成。

李道兵:七牛成立差不多4年了,但作為一家ToB的企業(yè)還算很年輕的,我們現在有200多人,圍繞數據這個核心組織了多個產品,包括存儲、分發(fā)、富媒體處理、大數據、還有通用計算平臺等?,F在前面三個已經正式對外,其余的還在內測當中。

技術團隊的構成:200多人中一半人左右是一線的研發(fā)團隊,跟很多互聯(lián)網公司一樣,我們都是一個超扁平的結構,團隊小的5個人, 大的10來個人,所有的研發(fā)團隊都是平行的,直接匯報給CEO。

主持人:那么請您介紹下云存儲行業(yè)目前的具體情況以及未來發(fā)展前景吧。

李道兵:云存儲這幾年發(fā)展迅速,我覺得主要是幾個方面的原因:

  • a.? 首先是數據自然增長,每年全世界創(chuàng)造的數據都在以一個很大的幅度增長;
  • b.? 其次是帶寬的增長,導致大家對音頻、視頻等富媒體(當然未來還有VR)的需求大規(guī)模增加,當然鏡頭分辨率的提高對需求的增加貢獻也不小;
  • c.? 越來越多的智能設備引入,這些設備會自動地產生大量的數據,現在主動產生的數據(比如拍照)占主流,未來可能被動產生的數據會成為主流(比如你的身體狀況監(jiān)控);
  • d.? 對于中國來講,國家的去 IOE政策,以及推動政府采購云,這些也幫助了云存儲行業(yè)的發(fā)展;
  • e.? 當然最重要的一點是,大家發(fā)現數據的價值越來越大,比如 LinkedIn,240億美金的市值,大部分來自于大家對 LinkedIn 擁有的數據的高估值。在電商等行業(yè),數據價值的案例也越來越多

主持人:可否從案例角度來介紹一下七牛的產品服務應用場景?

李道兵:以一個典型的短視頻應用為例。首先是上傳,一個10s左右的視頻在 1-2MB, 60s 的在 10MB 左右,這個大小的文件從手機直接上傳的成功率不高,那么就需要用到的我們的分片上傳技術以及就近上傳技術,前者可以提高成功率,后者提高上傳速度。

由于硬件原因,不是每個視頻的編碼格式都是一致的,比如音頻就有 mp3/aac 等格式,那么轉成一致的格式,再打上水印就是必要的了,這就需要我們提供的視頻轉碼技術。

每個視頻需要一個封面,封面通常從視頻中抽取,那么用我們提供的抽幀服務加上圖片裁剪服務效果就很好。視頻需要審核,這個也需要通過我們的轉碼服務來提供一個超小視頻用來審核。

最后就是視頻分享后需要分發(fā),這個就可以利用我們提供的融合CDN來達到最佳的覆蓋、速度和性價比。當然還有就是數據的分析(不過還在內測階段)。

主持人:那么七牛目前的產品及服務都有哪些?相比其他公司類似產品,競爭力體現在哪些方面?

李道兵:七牛圍繞著數據平臺這一概念組織了一系列的產品,包括存儲、轉碼、分發(fā)等業(yè)務。未來,我們會圍繞如何讓用戶更方便地管理數據,如何讓用戶的數據價值最大化這幾個方向來開發(fā)更多產品。

正如我之前提到的,我們跟 AWS 等云服務最大的不同在于終極目標的不同。AWS的目標是圍繞著降低采購周期,提高使用率這個方向去發(fā)展,而我們更多是從如何提高軟件工程師和運維工程師的生產率去考慮。

所以我們會率先引入在 URL 中指定轉碼規(guī)格,支持URL轉碼管道,支持靈活的回調策略,分片上傳、鏡像存儲等等功能。我們的售前也會努力和客戶一起來制定解決方案,幫助解決接入時遇到的各種問題。

主持人:我們來聊聊今天的主題~對于公司來說,為什么有必要考慮高可用可伸縮?必要性體現在哪些方面?

李道兵:現在各種應用用戶量起來很快,特別是2C/娛樂業(yè)的一些應用(比如逗拍,一個春節(jié)就起來了,小咖秀之類的也很快),用戶量起來本來是讓你離成功近了一大步,但如果這時候因單機故障出現不可用,或者因為系統(tǒng)容量不足導致響應不暢,那么你的用戶也會很快離你而去。

更何況,其實我們也可以看到,高可用也好,可伸縮也好,都是有章可循的,成本也不高。

主持人:如何構建高可用和可伸縮架構?有哪些關鍵的技術節(jié)點和難點挑戰(zhàn)?

李道兵:我覺得首先一點是分離控制流和數據流,當然如果你的應用不涉及富媒體或者其他大流量的數據那么就可以跳過這步。這么做的好處主要是,控制流其實流量不高,那么我們就可以租8線BGP的機房來提高動態(tài)請求的響應速度和覆蓋率,畢竟好機房貴的是流量成本,而不是機架成本。而數據流的高可用和可伸縮的技術門檻高,運維成本也不低,那么最好往云上搬。

對于控制流這邊,我們又可以簡單地把需求分解到入口、業(yè)務、數據庫、緩存、消息隊列這幾個子模塊。

  • 入口比較簡單,低流量的情況下一對 Nginx,加上心跳就可以滿足。即使是高流量,那么心跳+LVS也是一個漂亮的選擇。當然在 DNS 層先做一次負載均衡也不錯。另外,如果你的應用是有客戶端的,你還可以選擇發(fā)送所有入口IP到客戶端,由客戶端來選擇,做負載均衡。
  • 業(yè)務層牢記一個原則,不要保存狀態(tài),就可以輕易地做到高可用和可伸縮,狀態(tài)盡量放到緩存層和數據庫層,而不是自己兜著。初期兩個節(jié)點,后來水平加節(jié)點就可以了。
  • 數據庫這方面的文檔和PPT反而是最多的,高可用方面,MySQL的 master-master方案,MongoDB的 ReplicaSet 方案都不錯,主要是看你的使用場景。伸縮性主要靠水平和垂直拆表,畢竟各種數據庫的集群方案都有很大的缺陷,個人覺得不如放在業(yè)務邏輯層來做。另外,數據庫層有條件的話就上 SSD,成本雖然貴一點,但2個數量級左右的性能提升,對你的幫助會非常非常大。
  • 緩存層隨著 Redis 3.0 和 Codis 這類方案的推出,反而是率先解決了緩存層的高可用問題,我覺得大家可以直接采用,在業(yè)務邏輯層搭也可以,針對不同的情況可以用一致性Hash,主備緩存等多種方式來處理。如果自己搭,那么緩存層的節(jié)點數不能少,畢竟要防止緩存失效后對數據庫的沖擊,一個簡單的手法是緩存層和業(yè)務邏輯層混合部署,一起水平擴展。
  • 消息隊列一般依賴于數據庫或者其他持久化層,自己的高可用和可伸縮倒是比較方便,設計時注意即可,比較值得注意的是,一般這種情況下很難保證消息隊列的順序,這也是設計時需要考慮的,不依賴于消息順序即可。

主持人:那么云存儲作為一個服務端的業(yè)務,在實現高可用和可伸縮的時候有什么自己的特點?

李道兵:云存儲也是服務端的業(yè)務,所以上面提到的各個點都要考慮。(當然不能再分離數據流了)。

此之外,儲存還要額外考慮幾個點,比如如何優(yōu)化數據流,降低數據流在內網的傳遞次數,降低內網擁塞的可能性,同時也能提高響應性。還有就是如何避免突發(fā)的大規(guī)模數據沖擊服務器,也就是說如何避免出現性能毛刺。

主持人:在提升用戶體驗方面七牛做了哪些努力呢?對于用戶反饋都是如何及時解決的?

李道兵:針對用戶體驗,我們是從兩個方面來優(yōu)化的。

  • 首先是產品本身的質量,比如服務的可用性,服務的響應速度,如何減少 bug等,這方面我們有持續(xù)的優(yōu)化措施。
  • 另一個方面是如何提升七牛的服務水平。七牛有一個很強的售前團隊,能夠和客戶一起來分析客戶的場景,幫助客戶設計最佳的接入和遷移方案。

七牛的支持團隊也很厲害,絕大部分的工單都可以讓客戶得到滿意的答復,少量比較深的問題則會直接轉發(fā)給開發(fā)團隊,讓開發(fā)團隊來做一個深度剖析。

問題的解決速度則是支持團隊的一個重要考核指標,我們的客戶對這響應速度這點也很在意。

主持人:看到您簡歷中一直在深鉆技術的第一線,結合您的切身體會跟我們分享下一名合格的架構師應該是怎樣的呢?

李道兵:之前在知乎回答過一個類似的問題,我就直接貼過來吧

  • 多看書

  • 《設計模式》和《重構》這兩本讓我能從程序員的視野往外走一點
  • ?《企業(yè)應用架構模式》、《領域驅動設計》,比《設計模式》深一點,解決的也是更實際的問題
  • ?《人件》、《人月神話》、《夢斷代碼》,理解一下軟件工程為啥會失敗
    • 多看文章

  • QCon 的就不錯,有很多架構相關的PPT,拿著一個PPT,等對方講完問題之后,自己想想,自己的解決方案是什么?
  • 多看看各個企業(yè)的架構變化史
  • 多看看基礎組件的設計思路,比如MySQL、MemCache、Nginx...
    • 多做

  • 做點算法題,不是為了練習算法,而是為了讓你思考更細致,畢竟少考慮一個點,肯定就無法AC
  • 對于不同組件,自己去測試,上壓力,真實測量容量。壓死為止,看瓶頸究竟在哪兒?
  • 到線上去,看一看你的系統(tǒng),哪些響應慢,不穩(wěn)定。哪些資源消耗狠,需要優(yōu)化或者擴容。
  • 還有多找人聊天,說出你的想法,等別人反駁,從別人的反駁中吸取知識,再去做驗證。修改。

    主持人:您在提升七牛技術團隊方面,有哪些思考呢?

    李道兵:首先是招聘,校招要看這個人是否聰明,之前是否努力,之前的努力是否有成果,性格是否適合這個團隊,這個團隊能否給他合適的成長空間。社招要追求這個人能否給你的團隊帶來新知識、新理念、新方法,能否讓你的團隊進一步成長。

    其次是學習,團隊如果是忙于工作沒有時間學習是不行的,當然僅僅是有時間學習也不夠,如何創(chuàng)建一個讓大家愿意去學習的環(huán)境也很重要,所以我們每周五會有分享講座,每人的季度OKR里邊也要有如何提升自己的內容,我們期望大家成長,也期望大家很嚴肅地看待這份工作,而不僅僅是為了混日子。

    主持人:七牛的技術團隊氛圍是怎樣的?公司招人過程中,比較看重新人的哪些特質?

    李道兵:首先是平等,大家的角色都是比較類似的,架構設計也不是上面決策下面執(zhí)行,而是大家一起來討論。

    其次是大家都覺得成長比較快,這個可能跟我們 peer review 的機制有點關系,每個人都需要 review 別人的代碼,自己的代碼也需要別人來 review, 那么你可以很快學習到一些很實用的技巧,自己的代碼缺陷也很容易被人指出來,迅速改掉。

    最后是擔當,我們公司比較推崇擔當這個詞,一個好的工程師也要有好的推進能力,如何去把一個事情跟進到底是一個必須要掌握的能力。

    新人的問題剛才提過,主要是聰明,努力,以及努力沉淀下來的成果。

    主持人:對想在技術架構路線上走得更遠的技術人,您都有什么建議嗎?

    李道兵:之前知乎那個鏈接講得差不多了,最后再送夫子的一句話,“學而不思則罔,思而不學則殆”。當然對我來講,思我會理解為思考再加討論。

    互動環(huán)節(jié):如何優(yōu)化數據流,降低數據流在內網的傳遞次數,降低內網擁塞的可能性,同時也能提高響應性----------對于業(yè)務交互較多的平臺來說,數據流在內網傳遞次數很多,我想請教一下,這塊有什么樣的優(yōu)化經驗?
    李道兵:1. 控制流不用擔心傳遞次數太多,服務分解細一點是好事;2. 數據流方面一是減少環(huán)節(jié),而是用控制流代替數據流。
    問:服務分解細,節(jié)點就很多
    李道兵:比如數據直接發(fā)往緩存節(jié)點,然后把緩存節(jié)點的 URI 直接往下傳遞。節(jié)點多,但每個節(jié)點的功能內聚和單一,這對你的服務的穩(wěn)定性是好事,在加上 etcd 這類的工具來降低部署難度就好。 互動環(huán)節(jié):您有沒有接觸過 OpenStack?
    李道兵:openstack 其實應該算是一個開源的 AWS 實現,特別是主要的虛擬機,存儲,EBS這幾塊。存儲這一塊,openstack 的實現很差,性能不好,運維難度也高,內部的bug也不少。不過最近很多人都在用 ceph 來做 openstack 的存儲,這樣也挺好。
    問:您接觸過的話,我想和您請教一下,OpenStack控制節(jié)點主機的高可用,都有哪些比較成熟可用的方案?
    李道兵:抱歉這個快不太熟,如果我來設計,一般就是兩種方案,如果有內存一致性的需求,那么模仿或者直接使用 zookeeper/etcd。 互動環(huán)節(jié):有個問題請教,你們有沒有需要跨機房數據實時同步的場景,如果有,如何保證數據實時和一致的?
    李道兵:有,我們走的方案偏保守。首先,如果多個機房要共用一套數據,那么需要保證只有一個節(jié)點可以寫入。對于其他機房,則在業(yè)務邏輯層重放主機房的操作,并且按照業(yè)務邏輯清理緩存。只要保證你的緩存形式滿足: 1. 能夠根據單條數據來清理 2. 列表類的緩存有有效期,并且不會導致業(yè)務出錯即可。 互動環(huán)節(jié):傳統(tǒng)ERP每天有銷售流水5萬多條,不停插入Oracle,采購和其他業(yè)務不停查看歷史銷售記錄一查查兩三年的銷售,各種計算,特別客戶銷售品類多而且雜,計算方法也是千奇百怪, 也做一些優(yōu)化,效果不明顯。請問您有什么好的建議?
    李道兵:每天5萬條其實 qps 很低,峰值應該低于 5qps。計算需要有獨立的數據庫,而不是在線的數據庫。數據庫需要有 admin, 分析大家的慢請求。要么加索引,要么禁止或者遷移到 hadoop/hive 這類適合慢請求的平臺。 互動環(huán)節(jié):能否介紹一下糾刪碼在七牛存儲的實現?
    李道兵:糾刪碼在七牛存儲的實現:細節(jié)不便透漏,但是 EC 也不是一個太新的東西,比如內存,RAID都有過實現,你可以看看他們的實現。 互動環(huán)節(jié):能問一個偏業(yè)務問題嗎?比如幾萬人秒殺10個產品,怎么做架構保證不出錯和性能穩(wěn)定
    李道兵:秒殺最常見的做法是兩段式,第一段是接受秒殺請求,并且扔進隊列,這個步驟只需保證入口和隊列的容量即可。第二段是后臺從隊列拿到請求,應用在數據庫,然后通知用戶,只一個步驟就是按照數據庫的容量來有序執(zhí)行即可。 互動環(huán)節(jié):為什么很多網站的登錄域名和首頁不是一個域名?passport.jd.com這個是jd的登錄域名,為什么很多站這樣,和分布式架構有關還是其他原因?
    李道兵:分拆能降低單個模塊的開發(fā)和維護難度,特別是你的開發(fā)分到多個團隊以后,多個團隊維護一個模塊是很恐怖的,當然還有不同的域名有不同的部署需求,分拆后部署更靈活。 互動環(huán)節(jié):在mysql集群,水平分表的情況下,有幾種方式自動生成表的ID主鍵保證不重復,目前你們是如何處理的?
    李道兵:幾個方法, 1. 使用 UUID ;2. 每個數據庫用不同的數列,比如第一個用 1,4,7,10, 第二個用 2,5,8,11, 第三個用 3,6,9,12 ;3. 當然也可以用外部的主鍵生成器。 互動環(huán)節(jié):能提供一個,mysql集群架構的方式嗎?
    李道兵:數據庫的文檔都比較好找。(例如:How To Set Up MySQL Master-Master Replication)

    總結

    以上是生活随笔為你收集整理的如何构建高可用和可伸缩的架构?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。