<noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

<pre id="llnpn"></pre>

    <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

    <noframes id="llnpn">

      <noframes id="llnpn"><pre id="llnpn"></pre>
      • 自動秒收錄
      • 軟件:1973
      • 資訊:56157|
      • 收錄網站:175404|

      IT精英團

      臉書數據庫項目負責人:我從做基礎設施中學到的42件事

      臉書數據庫項目負責人:我從做基礎設施中學到的42件事

      瀏覽次數:
      評論次數:
      編輯: 景同
      信息來源: ITPUB
      更新日期: 2022-05-16 21:06:04
      摘要

      最近讀到了分布式系統研究者MaheshBalakrishnan的一篇博客《42thingsIlearnedfrombuildingaproductiondatabase》。同樣做

      • 正文開始
      • 相關閱讀
      • 推薦作品

      我最近看了一篇博客《42 things I learned from building a production database》,作者是Mahesh Balakrishnan,他是一位分布式系統的研究者。做同樣的基礎設施,看了大老板總結的經驗,驚嘆不已。有些簡直是見解深刻,所以我翻譯了全文。馬赫什巴拉克里什南是臉書德洛斯項目的負責人。德洛斯是動物園管理員的標桿。關于Delos的更多細節,其團隊已經發了兩篇論文,有興趣的同學可以自行搜索。

      IC=個人繳費者,即獨立繳費者。臉書開發團隊是指那些不是經理、團隊領導或任何領導職位的程序員??梢岳斫鉃橐痪€開發者。

      對客戶(用戶)

      讓你的客戶開心,否則,這篇文章的其余部分就無關緊要了。

      2)注意擁有合適的客戶數量(剛開始只要一個)和合適的客戶(允許你構建關鍵技術的客戶),并且謹慎地增加這個數量。

      3)直接與客戶對接。很多團隊內部矛盾可以通過說“我剛和客戶聊過,他們說.”來解決。做基礎設施的時候,我們往往不需要去猜測客戶的需求,我們可以直接問客戶。

      17" mp-original-line-height="27">

      4)但要意識到客戶可能無法表達他們真正需要的東西。不要只看到需求的表面價值,而要花時間詳細地理解他們的用例,閱讀他們的代碼。


      項目管理


      5)要有一個簡單明了的使命宣言來表達你存在的理由,Delos 的宣言是:我們將成為 FB infra 的可靠基礎。


      6)反復進行任務難度的評估。決策者可能沒有時間、傾向、上下文或培訓來進行評估,而且可能會把它們弄錯(簡直是)幾個數量級。


      7)對 IC 的任務分配很關鍵。要求自己處于任何決策的關鍵路徑上,因為你通常比經理更了解問題、代碼庫和 IC 們的優勢。如果你和其他 IC 自己解決任務分配問題,大多數經理都會很高興。


      8)Road-map 是一種手段,而不是目的。


      9)如果你有好的或一致的經理,要盡可能地理解、支持和包容。如果你沒有這樣的經理人......好吧,我還沒有想明白這個問題,如果你想明白了,請告訴我。


      10)使你的項目對組織架構調整有足夠的魯棒性。一個公司的管理層級本質上是脆弱的(畢竟,樹是一個單連接的圖),所以要不斷地與未來可能接手這個項目的經理進行交流,不惜一切代價,確保經理人的變動不會給 IC 們帶來不公平的職業結果。


      通常來說,公司組織架構調整是非常頻繁的,經常一年就會調整一次,確保經理人的變動不會帶來不公平的職業結果,這點其實很難(我也很想知道怎么做到)。


      11)追蹤類似的功能,在你所在領域的其他項目中花費了多長時間,并以此作為任務難度評估的依據(例如,“功能 X 在系統 Y 中花了 3 年時間;這不是一個 IC 的一半工作”)。


      設計


      12)對 API 要保守,對實現要寬松(Be conservative on APIs and liberal with implementations)。


      13)但要堅持謹慎地推出新的實現(灰度、分階段推出)。


      14)設計 API 時,寫代碼完成第一個實現(implementation),積極計劃第二個實現,并希望/祈禱事情將在第三個實現中發揮作用。(When designing APIs, write code for one implementation; plan actively for the second implementation; and hope/pray that things will work for a third implementation.)


      15)設計 API 時,首要考慮向新實現的遷移。自定義遷移會造成巨大的時間消耗且不可靠。每個主要的 API 都應該有一個單一的 CLI 驅動的調用來切換實現。


      16)作為一個團隊去設計,作為個人實現(Design as a team; implement as individuals)。這將使設計成為瓶頸,但這是值得的:抵制并行化設計的沖動。


      17)對于存儲系統,在開始時就要重點關注一致性和持久性,而不是可用性。一致性和持久性更難衡量,如果出問題也更難修復,由于可用性更容易衡量,所以會有外部壓力要求優先考慮它;推到后面去。


      18)在測試中維護 API 的多個實現,比較它們之間的結果。這樣做的代價是值得的(這將有助于正確性,也可以防止實現細節的泄露)。


      19)對設計進行后期綁定(Late-bind):鼓勵團隊思考整個設計空間,而不是承諾使用某個特定的解決方案。與一群高智商、有主見的 IC 們一起開頭腦風暴會議是一門值得掌握的藝術。鼓勵在設計的關鍵路徑上進行粗略的原型設計。


      20)對實現者進行后期綁定:一旦設計完成,任何 IC 都應該能夠編寫代碼。


      21)擁有適當數量的抽象(這很難)。太少了,你會得到一個混亂的單體;太多了,團隊會被理解每個抽象的語義的認知開銷所淹沒。


      22)避免使用實時性來保證正確性或在機器間比較時鐘,除非你有(并理解)時鐘的錯誤界限。


      23)有一個單一的真理來源。在各種類型的狀態之間建立簡單的不變量。


      24)創造一種文化,讓 IC 不斷地思考完全不同的設計,不要停止關于假設性替代設計的對話,鼓勵好奇心。


      25)了解你的 SKU。云計算使人們很容易忽視硬件,但對硬件(和硬件趨勢)的理解對設計來說至關重要。


      Code Review


      26)在一個具有快速評審周期的透明代碼庫中,除非你把關,否則 API 會泄露實現細節。


      27)鼓勵 IC 對 diffs 進行批判性的思考,并創造一個人們可以自由表達的環境。作為 diffs 作者,你對指出 diffs 問題的人的反應應該是感激,而不是沮喪。


      28)對于關鍵組件,考慮非正式的規則,例如要求兩個接受(即兩個 LGTM)或甚至是某個子集的 IC 的一致接受。


      29)對于關鍵組件,落地時間不是衡量其重要性的標準,要抵制衡量這一標準和優化它的沖動。創造一種讓 IC 可以接受 diffs 不能快速落地的文化(創造性的工作——書籍、論文等等——由于高質量 review 的成本,通常需要漫長的 review 周期;為什么代碼應該有所不同?)


      30)有時候,你只有在一個 IC 寫出了一個候選的設計方案后,才意識到這個設計是正確的。要抵制說“哦,好吧,讓我們先落地,然后再修復它”的沖動;你這樣做對 IC 和項目都沒有幫助。創造一種文化,讓 IC 感覺到如果這不是正確的解決方案,就可以丟棄代碼(以身作則)。


      策略


      31)以某種節奏問自己:為什么這個團隊/項目會存在?如果它不存在,會發生什么(哪個其他團隊/系統會填補這個空白)?該團隊是如何為公司增加價值的,以及它如何在未來繼續這樣做?


      32)跟蹤公司內你所在領域的每個其他主要項目,你應該能夠比他們自己的 IC 更好地解釋他們的技術設計。抓住任何機會去與其他類似項目的負責人辯論項目范圍:你應該能夠闡明你的項目如何適合更大的生態系統。團隊間的競爭是健康和必要的。與這些項目中的 IC 交朋友:他們比公司里的其他人更了解你的技術挑戰。


      33)不要在原始性能或效率上與其他團隊競爭。這將升級為一場軍備競賽,兩個團隊都會浪費時間為工作負載優化他們的系統,產生蘋果與橘子的比較,等等。在基本設計特性上進行競爭。


      34)如果客觀上有人在你的使用場景有更好的系統,并想接手它,那就去找別的事做吧。


      可觀測性


      35)測量是一種手段,而不是目的。


      36)你應該能夠在你的客戶之前發現你的服務中的問題。


      37)在盡可能的情況下,可觀察性應該在 API 之上,并在實現(implementations)之外。這可以確保你可以切換實現并比較性能,而不會在測量代碼中引入錯誤。它還可以簡化實現;并降低新實現的門檻。


      38)任何不容易測量的東西(例如,一致性)往往被遺忘,要特別注意那些難以測量的屬性。


      39)盡可能將關鍵的檢查(例如一致性)推到部署本身,盡量減少對外部服務的檢查(否則你現在有兩件事要跟蹤,而不是一件)。


      研究


      40)追蹤你所在領域的研究成果。很快你就會和你的 IC 有一個速記,可以實現超快的溝通。"如果我們嘗試項目 X 中的那個東西呢?并將其與項目 Y 中的技術相結合?"。


      41)嘗試新事物。在可行的解決方案內,偏向于新的東西。抵制逐字逐句地復制設計的沖動。每一個重要的系統在某些時候都只是某人頭腦中的一個半生不熟的想法。


      42)寫論文。為那些對你正在做的事情沒有任何背景的聽眾寫作,將迫使你檢查和澄清你的假設。論文可以使你更容易雇用到優秀的人才,也更容易讓他們上崗。研究生應該能夠向你解釋你的設計(并發現錯誤?。?。當被要求做講座時,盡量答應。它們很有趣,而且你可以認識新的人。


      作者丨Mahesh Balakrishnan譯者丨多顆糖來源丨網址:https://maheshba.bitbucket.io/blog/2021/10/19/42Things.html


      標簽:你的 項目 團隊
      SQL中的三種重復數據刪除方法 還有誰不行?
      ? 上一篇 2022-05-16
      • SQL中的三種重復數據刪除方法 還有誰不行?
        0閱讀 0條評論 個贊
        SQL去重是數據分析工作中比較常見的一個場景,今天給大家具體介紹3種去重的方法。在使用SQL提數的時候,常會遇到表內有重復值的時候,比如我們想得到uv(獨立訪客),就需要做去重。在MySQL中……
      • 記得網上一個K8s Ingress訪問故障排除 最后卻不是帖子的鍋
        0閱讀 0條評論 個贊
        具體現象應用遷移至我們的PaaS平臺后會出現偶發性的502問題,錯誤見圖片:相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。為啥我們只看到了POST……
      • MYSQL如果索引優化僅僅是添加索引 太年輕而不簡單
        0閱讀 0條評論 個贊
        MYSQL的索引優化,如果此時此刻看到索引的優化,僅僅想到添加適合的索引,是不完全的,索引的優化本身就具有很多的不確定性。1索引會隨著時間的推移,有性能的衰減2索引會隨著數據量的增加,有性能的衰……
      • 甲骨文(第11代)單實例-室內空調(第11代)遷移模擬測試
        0閱讀 0條評論 個贊
        Oracle11.2.0.4單實例----Oracle19C-RAC遷移模擬測試總體思想:通過RMAN物理備份在備庫恢復主庫數據,后續通過在主庫停業務后,將從備份后的所有日志都同步到新庫應用,重新配置……
      • MySQL的行格式是什么?
        0閱讀 0條評論 個贊
        行格式(rowformat)決定了我們插入的一行數據,是如何存儲在數據庫中的,MySQL有4種行格式,分別是REDUNDANT,COMPACT,DYNAMIC,COMPRESSED。不同行格式區別:……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • PostgreSQL并行框架分析
        3閱讀 0條評論 個贊
        作者簡介施博文,目前就職于騰訊云PG團隊概覽PostgreSQL并行框架提供了一系列方便的函數,支持在插件或內核中直接調用相關函數,啟動若干個后臺進程進行并行操作。目前,PG的并行框架主要用來……
      • 關于數據中心最強科普 一個就給你完整了解!
        1閱讀 0條評論 個贊
        數據中心,英文縮寫叫IDC,也就是InternetDataCenter(互聯網數據中心)。之所以不太直接稱之為“DC”,主要是為了避免和直流電(DirectCurrent)混淆。而且,現在的數……
      • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
        1閱讀 0條評論 個贊
        前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
      • 零入侵:一個注解 循環重試功能的優雅實現
        0閱讀 0條評論 個贊
        前言在實際工作中,重處理是一個非常常見的場景,比如:發送消息失敗。調用遠程服務失敗。爭搶鎖失敗。這些錯誤可能是因為網絡波動造成的,等待過后重處理就能成功。通常來說,會用try/catch,while循……
      • 一行Python代碼實現程序并行
        1閱讀 0條評論 個贊
        Python在程序并行化方面多少有些聲名狼藉。撇開技術上的問題,例如線程的實現和GIL,我覺得錯誤的教學指導才是主要問題。常見的經典Python多線程、多進程教程多顯得偏"重"。而且往往隔靴搔……
      • 運維常用的34個Linux Shell腳本 對你一定有幫助!
        1閱讀 0條評論 個贊
        作為一名Linux工程師,會寫好的腳本不僅能提高工作效率,還能有更多的時間做自己的事。最近在網上沖浪的時候,也注意收集一些大佬寫過的腳本,匯總整理一下,歡迎收藏,與君共勉?。?)用戶猜數字#!/b……
      • 管理數百個Kubernetes集群需要什么?
        0閱讀 0條評論 個贊
        文章轉載:進擊云原生(版權歸原作者所有,侵刪)要點:部署一個具備生產就緒所需所有依賴關系的Kubernetes集群需要數天時間。如果不自動化這個過程,管理Kubernetes集群的浮動是非常困難的。在……
      • epoll這個Linux高性能服務的本質真的不簡單
        1閱讀 0條評論 個贊
        設想一個場景:有100萬用戶同時與一個進程保持著TCP連接,而每一時刻只有幾十個或幾百個TCP連接是活躍的(接收TCP包),也就是說在每一時刻進程只需要處理這100萬連接中的一小部分連接。那么,如何才……
      • Linux中的交互式進程查看命令htop
        1閱讀 0條評論 個贊
        htop界面展示HtopLinux進程監控工具“Htop是一個用于Linux/類Unix系統的交互式實時進程監控應用程序,也是top命的替代品,它是所有Linux操作系統上預裝的默……
      • 說說春云的全鏈路灰度發布方案~
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-碼猿技術專欄,作者不才陳某大家好實際生產中如有需求變更,并不會直接更新線上服務,最通常的做法便是:切出線上的小部分流量進行體驗測試,經過測試后無問題則全面的上線。這樣做的好處也是……
      • 如何優雅地升級Kubernetes集群的Docker和Containerd版本
        1閱讀 0條評論 個贊
        前言公司用的k8s集群是“多環境合一”的方式,集群流量入口也摒棄了常見的traefik和ingress-nginx,直接用了一個國內不常見的底層基于Envoy的APIGateway網關服務。當然還有……
      • Python的八個實用“無代碼”特性
        1閱讀 0條評論 個贊
        注:在命令行中使用Python時,“-m”選項參數可以實現非常強大的功能??梢哉f,善用“-m”參數,這是一個優秀的Python技術人的必備技能。曾發過一篇文章《Python中-m的典型用……
      • Spring云應用的優雅下線和灰度發布
        2閱讀 0條評論 個贊
        前言在生產環境中,如何保證在服務升級的時候,不影響用戶的體驗,這個是一個非常重要的問題。如果在我們升級服務的時候,會造成一段時間內的服務不可用,這就是不夠優雅的。那什么是優雅的呢?主要就是指在服務升級……
      • 透徹理解數據資產、數據資源、數據管理、數據治理等概念的區別
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生數據成為生產要素后,各種跟數據相關的概念就出來了,其實很多概念沒有權威定義,大家各有各的理解,這導致了理解上的歧義。數據管理、數據治理、數據資源……
      • MySQL 8.0如何創建規范表
        1閱讀 0條評論 個贊
        這一節內容,基于MySQL8.0版本,聊一下如何創建一張規范的表。首先貼出一張相對規范的表結構:CREATETABLEstudent_info(`id`INTNOTNULLAUTO_IN……
      • MySQL語句優化——隱式字符編碼轉換
        1閱讀 0條評論 個贊
        MySQL中我們知道有:如果對索引字段做函數操作,可能會破壞索引值的有序性,因此優化器就決定放棄走樹搜索功能。隱式類型轉換也會導致放棄走樹搜索。因為類型轉換等價于在條件字段上使用了函數比如:假設tra……
      • 教你如何在Linux中生成復雜的密碼 并檢查密碼強度
        0閱讀 0條評論 個贊
        在本教程中,我們將討論如何生成復雜密碼并且檢查密碼強度。生成復雜的密碼強密碼應由字母、數字和符號的混合組成。第二個要求是不要使用已知單詞、出生日期或姓名,因為很容易受到字典攻擊。密碼應該包含多少個字符……
      • 一天一技能:協調與多流程的完美結合
        7閱讀 0條評論 個贊
        我們知道,協程本質上是單線程單進程,通過充分利用IO等待時間來實現高并發。在IO等待時間之外的代碼,還是串行運行的。因此,如果協程非常多,多少每個協程內部的串行代碼運行時間超過了IO請求的等待時間,那……
      • Java 9為什么把String的底層實現從char[]改成byte[]?
        8閱讀 0條評論 個贊
        如果你不是Java8的釘子戶,你應該早就發現了:String類的源碼已經由char[]優化為了byte[]來存儲字符串內容,為什么要這樣做呢?開門見山地說,從char[]到byte……
      • 代碼規范設計模式的落地之路
        2閱讀 0條評論 個贊
        —1—前言與同事開了一個分享會,筆者分享了一些了代碼設計模式相關的內容。以及復盤了一下項目中有些復雜的業務場景,為什么沒有很好的應用到設計模式。業務雖然肯定保密的,但是拋開項目,業務層面,縱觀回顧了一……
      最近發布資訊
      更多
      本地特级毛片,老师脱裙子让我看内裤,人妻av乱片aV出轨avApp
      <noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

      <pre id="llnpn"></pre>

        <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

        <noframes id="llnpn">

          <noframes id="llnpn"><pre id="llnpn"></pre>