開発者のSREぞの道むンフラストラクチャに行く理由ずそれから䜕が生たれるのか

箄1幎前、.NET開発者からSREに再トレヌニングしたした。この蚘事では、経隓豊富な開発者のグルヌプがCを脇に眮き、Linux、Terraform、Packerを孊び、NALSDを䜜成しおIaCを構築する方法、䌚瀟のむンフラストラクチャを管理するために極端なプログラミング手法をどのように適甚したか、そしおそれから䜕がもたらされたかに぀いお説明したす。









侖界13か囜のDodo Pizzaには600を超えるピザ屋があり、ピザ屋のプロセスのほずんどは、私たち自身が䜜成しお管理しおいるDodo IS情報システムによっお管理されおいたす。したがっお、システムの信頌性ず安定性は生存のために重芁です。



珟圚、瀟内の情報システムの安定性ず信頌性はSREサむト信頌性゚ンゞニアリングチヌムによっおサポヌトされおいたすが、垞にそうであるずは限りたせんでした。



背景開発者ずむンフラストラクチャの䞊列䞖界



長幎、私は兞型的なフルスタック開発者および少しのスクラムマスタヌずしお開発し、優れたコヌドの蚘述方法を孊び、Extreme Programmingの実践を適甚し、私が觊れたプロゞェクトのWTFの数を熱心に枛らしたした。しかし、゜フトりェア開発で経隓を積むほど、アプリケヌションの信頌性の高い監芖および远跡システム、高品質のログ、完党な自動テスト、およびサヌビスの高い信頌性を保蚌するメカニズムの重芁性に気づきたした。そしお、たすたす頻繁に、圌はむンフラチヌムに「垣根を越えお」芋始めたした。



私のコヌドが動䜜する環境を理解すればするほど、驚かされたす。゜フトりェアの䞖界でのすべお、すべおの人に察する自動テスト、CI、頻繁なリリヌス、安党なリファクタリング、およびコヌドの所有暩の共有は、昔から䞀般的で芪しみ深いものです。同時に、「むンフラストラクチャ」の䞖界では、自動テストがなく、セミマニュアルモヌドで本番システムに倉曎を加えるこずは䟝然ずしお正垞であり、ドキュメントは倚くの堎合、個人の頭だけにあり、コヌドにはありたせん。



この文化的および技術的栌差は、混乱だけでなく問題も匕き起こしたす。開発、むンフラストラクチャ、およびビゞネスの亀差点においおです。むンフラストラクチャの問題の䞭には、ハヌドりェアに近接しおおり、ツヌルの開発が比范的䞍十分なため、察凊が難しいものがありたす。しかし、すべおのAnsibleプレむブックずBashスクリプトを完党な゜フトりェア補品ずしお怜蚎し始め、それらに同じ芁件を適甚するず、残りの郚分は無効になる可胜性がありたす。



問題のバミュヌダトラむアングル



しかし、私は遠くから始めたす-これらすべおのダンスが必芁ずされる問題で。



開発者の問題



2幎前、私たちはピザ屋の倧芏暡なネットワヌクが私たち自身のモバむルアプリケヌションなしでは生きられないこずに気付き、それを曞くこずにしたした。



  • クヌルなチヌムを線成したした。
  • 6か月間、圌らは䟿利で矎しいアプリケヌションを䜜成したした。
  • 矎味しいプロモヌションでグランドロヌンチをバックアップしたした。
  • そしお、初日に圌らは無事に荷を䞋したした。






もちろん、最初はたくさんの浅瀬がありたしたが、䜕よりもたず芚えおいたす。開発時に、匱いサヌバヌが本番環境にデプロむされたした。ほずんどがアプリケヌションからのリク゚ストを凊理する蚈算機です。アプリケヌションの公衚前に、それを増やす必芁がありたした-私たちはAzureに䜏んでおり、これはボタンをクリックするこずで解決したした。



しかし、誰もこのボタンを抌しおいたせん。むンフラストラクチャチヌムは、アプリケヌションが今日リリヌスされおいるこずさえ知りたせんでした。圌らは、「重芁ではない」サヌビスの生成の監芖はアプリケヌションチヌムの責任であるず決定したした。そしお、バック゚ンド開発者これはDodoでの圌の最初のプロゞェクトでしたは、むンフラストラクチャのメンバヌが倧䌁業でこれを行っおいるず決定したした。



その開発者は私でした。それから私は明癜だが重芁なルヌルを思い぀きたした

, , , . .


今は難しくありたせん。近幎、プログラマヌが悪甚の䞖界を調べお䜕も壊さないようにするための倚数のツヌルが登堎したしたPrometheus、Zipkin、Jaeger、ELKスタック、Kusto。



ただし、倚くの開発者は、むンフラストラクチャ、DevOps、SREず呌ばれるものに関しお深刻な問題を抱えおいたす。その結果、プログラマヌ



はむンフラストラクチャチヌムに䟝存したす。それは痛み、誀解、時には盞互の憎悪を匕き起こしたす。



圌らはシステムを珟実から分離しお蚭蚈し、どこでどのようにコヌドが実行されるかを考慮しおいたせん。たずえば、クラりドでの生掻のために開発されおいるシステムのアヌキテクチャず蚭蚈は、オンプレミスでホストされおいるシステムの蚭蚈ずは異なりたす。



圌らは、コヌドに関連するバグや問題の性質を理解しおいたせん。これは、問題が負荷、ク゚リバランシング、ネットワヌクたたはハヌドドラむブのパフォヌマンスに関連しおいる堎合に特に顕著です。開発者は垞にこの知識を持っおいるずは限りたせん。



圌らは、コヌドの保守に䜿甚される䌚瀟の資金やその他のリ゜ヌスを最適化するこずはできたせん。私たちの経隓では、むンフラストラクチャチヌムは、問題をお金で満たすだけです。たずえば、運甚環境でデヌタベヌスサヌバヌのサむズを増やしたす。したがっお、倚くの堎合、コヌドの問題はプログラマにさえ届きたせん。なんらかの理由で、むンフラストラクチャのコストが増加し始めただけです。



むンフラ問題



「反察偎」にも困難がありたす。



高品質のコヌドがなければ、数十のサヌビスず環境を管理するこずは困難です。珟圚、GitHubには450を超えるリポゞトリがありたす。それらのいく぀かは運甚サポヌトを必芁ずしたせん、いく぀かは死んで歎史のために保存されおいたすが、重芁な郚分はサポヌトする必芁があるサヌビスを含んでいたす。圌らはどこかにホストする必芁があり、監芖、ログの収集、均䞀なCI / CDパむプラむンが必芁です。



これらすべおを管理するために、最近、Ansibleを積極的に䜿甚したした。Ansibleリポゞトリには以䞋が含たれおいたす



  • 60の圹割;
  • プレむブック102冊。
  • PythonおよびBashでのバむンディング。
  • Vagrantでの手動テスト。


これはすべお、賢い人によっお曞かれ、よく曞かれたした。しかし、むンフラストラクチャの他の開発者やプログラマヌがこのコヌドを積極的に䜿甚し始めるずすぐに、プレむブックが壊れ、圹割が重耇しお「苔で芆われお」したうこずがわかりたした。



その理由は、このコヌドが゜フトりェア開発の䞖界で倚くの暙準的な手法を䜿甚しおいなかったからです。 CI / CDパむプラむンがなく、テストは耇雑で䜎速だったため、誰もが面倒で「時間がない」ため手動で実行できず、さらに新しいテストを䜜成しおいたした。このようなコヌドは、2人以䞊で䜜業するず砎滅したす。



コヌドの知識なしにむンシデントに効果的に察応するこずは困難です。午前3時にPagerDutyにアラヌトが来たら、䜕をどのように説明するプログラマヌを探す必芁がありたす。たずえば、これらの500の゚ラヌはナヌザヌに圱響を䞎えたすが、他の゚ラヌはセカンダリサヌビスに関連付けられおいたすが、゚ンドカスタマヌにはそれが衚瀺されず、朝たでそのようなすべおを残すこずができたす。しかし、朝の3時にプログラマを起こすのは難しいので、サポヌトするコヌドがどのように機胜するかを理解するこずをお勧めしたす。



倚くのツヌルでは、アプリケヌションコヌドに埋め蟌む必芁がありたす。むンフラストラクチャの担圓者は、䜕を監芖し、どのようにログに蚘録し、远跡のために䜕に泚意を払うべきかを知っおいたす。しかし、倚くの堎合、これらすべおをアプリケヌションコヌドに埋め蟌むこずができたせん。そしお、䜕をどのように埋め蟌むかわからない人。



「壊れた電話」。100回目、䜕をどのように監芖するかを説明するのは䞍愉快です。アプリケヌションで再利甚するためにプログラマヌに枡す共有ラむブラリヌを曞く方が簡単です。ただし、これを行うには、同じ蚀語で同じスタむルで、アプリケヌション開発者が䜿甚するのず同じアプロヌチでコヌドを蚘述できる必芁がありたす。



ビゞネス䞊の問題



ビゞネスには、察凊する必芁のある2぀の倧きな問題もありたす。



信頌性ず可甚性に関連するシステムの䞍安定性による盎接的な損倱。

2018幎には、51の重倧なむンシデントがあり、システムの重倧な芁玠が合蚈で20時間を超えお機胜したせんでした。金銭的には、これは未配達および未配達の泚文による盎接損倱の2500䞇ルヌブルです。そしお、埓業員、顧客、フランチャむズ加盟店の信頌をどれほど倱ったかは蚈算できたせん。



珟圚のむンフラストラクチャサポヌトコスト。同時に、同瀟は2018幎の目暙を蚭定したしたピッツェリアあたりのむンフラストラクチャのコストを3倍に削枛するこずです。しかし、チヌム内のプログラマヌもDevOps゚ンゞニアも、この問題の解決に近づくこずはできたせんでした。これには理由がありたす。



  • , ;
  • , operations ( DevOps), ;
  • , .


?



これらの問題をすべお解決するにはどうすればよいですかこの解決策は、Googleの「サむト信頌性゚ンゞニアリング」ずいう本で芋぀けたした。それを読んだずき、私たちは理解したした-これが私たちが必芁ずするものです。



しかし、ニュアンスがありたす。これをすべお実装するには䜕幎もかかり、どこかから始めなければなりたせん。最初に持っおいた初期デヌタを怜蚎しおください。



むンフラストラクチャ党䜓がほがすべおMicrosoft Azureに存圚したす。ペヌロッパ、アメリカ、䞭囜など、さたざたな倧陞にたたがる独立した販売クラスタヌがいく぀かありたす。生産を繰り返すが孀立した環境に䜏んでいるロヌドスタンドず、開発チヌム甚の数十のDEV環境がありたす。



私たちがすでに行った優れたSREプラクティスのうち、



  • アプリケヌションずむンフラストラクチャを監芖するためのメカニズムネタバレ2018幎、私たちはそれらが良かったず思っおいたしたが、すでにすべおを曞き盎しおいたす。
  • 24/7 on-call;
  • ;
  • ;
  • CI/CD- ;
  • , ;
  • SRE .


しかし、最初に解決したかった問題がありたした



。むンフラストラクチャチヌムが過負荷でした。珟圚のオペレヌティングシステムのため、グロヌバルな改善のための十分な時間ず劎力がありたせんでした。たずえば、非垞に長い間必芁でしたが、Elasticsearchをスタックから取り陀くこずも、リスクを回避するために別のクラりドプロバむダヌからむンフラストラクチャを耇補するこずもできたせんでしたここで、マルチクラりドですでに詊した人は笑うかもしれたせん。



コヌドのカオス。むンフラストラクチャコヌドは無秩序で、さたざたなリポゞトリに散圚しおおり、どこにも文曞化されおいたせん。すべおは個人の知識に䟝存し、他には䜕もありたせんでした。これは巚倧な知識管理の問題でした。



「プログラマヌずむンフラストラクチャ゚ンゞニアがいたす。」かなりよく発達したDevOpsカルチャヌがあったずいう事実にもかかわらず、ただこの分離がありたした。異なる蚀語を話し、異なるツヌルを䜿甚する、たったく異なる経隓を持぀2぀のクラスの人々。もちろん、圌らは友達であり、コミュニケヌションを取っおいたすが、完党に異なる経隓のために、しばしばお互いを理解しおいたせん。



オンボヌディングSREチヌム



これらの問題を解決し、SREぞの移行を開始するために、オンボヌディングプロゞェクトを立ち䞊げたした。それだけが叀兞的なオンボヌディングではなかった-珟圚のチヌムに人々を远加するために新入瀟員新人を蚓緎した。これは、むンフラストラクチャ゚ンゞニアずプログラマヌの新しいチヌムの䜜成でした-本栌的なSRE構造ぞの第䞀歩。



プロゞェクトに4か月を割り圓お、3぀の目暙を蚭定したした。



  1. むンフラストラクチャチヌムでの職務ず運甚掻動に必芁な知識ずスキルに぀いおプログラマをトレヌニングしたす。
  2. IaCを蚘述-コヌド内のむンフラストラクチャ党䜓の説明。そしお、それはCI / CD、テストを備えた本栌的な゜フトりェア補品でなければなりたせん。
  3. このコヌドからむンフラストラクチャ党䜓を再䜜成し、Azureでマりスを䜿甚しお仮想マシンを手動でクリックするこずを忘れたす。


参加者9人、そのうち6人は開発チヌム、3人はむンフラストラクチャ。4か月間、圌らは通垞の仕事を蟞めお、指定されたタスクに没頭する必芁がありたした。ビゞネスの「生呜」を維持するために、むンフラストラクチャからさらに3人が勀務し、オペレヌティングシステムを扱い、埌方をカバヌしたした。その結果、プロゞェクトは著しく䌞び、5か月以䞊かかりたした2019幎5月から10月たで。



オンボヌディングの2぀の柱孊習ず実践



オンボヌディングは、トレヌニングずコヌドによるむンフラストラクチャの䜜業の2぀の郚分で構成されおいたした。



トレヌニング。少なくずも1日3時間はトレヌニングに割り圓おられたした。



  • 参考文献のリストから蚘事や本を読むLinux、ネットワヌク、SRE;
  • 特定のツヌルずテクノロゞヌに関する講矩で;
  • Linuxなどのテクノロゞヌクラブで、耇雑なケヌスずケヌスを分析したした。


もう1぀の孊習ツヌルは内郚デモです。これは毎週の䌚議で、10分で党員䜕か蚀いたいこずがある人が、圌らが1週間でコヌドに実装したテクノロゞたたは抂念に぀いお話したした。たずえば、VasyaはTerraformモゞュヌルを操䜜するためのパむプラむンを倉曎し、PetyaはPackerを䜿甚しおむメヌゞアセンブリを曞き盎したした。



デモの埌、私たちはSlackの各トピックの䞋でディスカッションを開始したした。そこでは、関心のある参加者がすべおを非同期でより詳现に議論するこずができたした。したがっお、10人での長い䌚議を避けたしたが、同時に、チヌムの党員がむンフラストラクチャで䜕が起こっおいるのか、どこに向かっおいるのかをよく理解しおいたした。







緎習。オンボヌディングの2番目の郚分は、コヌド内のむンフラストラクチャの䜜成/説明です。この郚分はいく぀かの段階に分かれおいたす。







むンフラストラクチャのリバヌス゚ンゞニアリング。これは、䜕がどこに展開され、どのように機胜し、どのサヌビスが機胜し、どのマシンずそのサむズが展開されるかを分析した最初の段階です。すべおが完党に文曞化されたした。



抂念。私たちはさたざたなテクノロゞヌ、蚀語、アプロヌチを実隓し、むンフラストラクチャをどのように説明できるか、どのツヌルを䜿甚する必芁があるかを発芋したした。



スペルコヌド。これには、コヌド自䜓の蚘述、CI / CDパむプラむンの䜜成、テスト、およびすべおのプロセスの構築が含たれたす。説明したコヌドを蚘述し、開発むンフラストラクチャをれロから䜜成する方法を知っおいたした。



再䜜成ずは、負荷テストず本番環境を意味したす。これは、オンボヌディング埌に行われるはずだった4番目のステヌゞですが、奇劙なこずに、そこからの利益は、非垞に頻繁に䜜成/再䜜成される未䜿甚環境からの利益よりもはるかに少ないため、珟時点では延期されおいたす。



代わりに、プロゞェクトアクティビティに切り替えたした。小さなサブコマンドに分割し、これたでに到達しおいなかったグロヌバルむンフラストラクチャプロゞェクトを取り䞊げたした。そしおもちろん、私たちは時蚈に参加したした。



IaC甚のツヌル
  • Terraform .
  • Packer Ansible .
  • Jsonnet Python .
  • Azure, .
  • VS Code — IDE, , , , .
  • — , .




むンフラストラクチャでの極端なプログラミングプラクティス



プログラマヌずしお私たちが持っおきた䞻なものは、私たちが仕事で䜿甚する゚クストリヌムプログラミングの実践です。 XPは、最良の開発アプロヌチ、実践、および䟡倀の絞り蟌みを組み合わせたアゞャむル゜フトりェア開発方法論です。



たずえそれに぀いお知らなくおも、゚クストリヌムプログラミングの手法の少なくずも䞀郚を䜿甚しないプログラマは䞀人もいたせん。同時に、むンフラストラクチャの䞖界では、これらのプラクティスは、Google SREのプラクティスず非垞に重耇しおいるにもかかわらず、バむパスされおいたす。



XPをどのようにむンフラストラクチャに適合させたかに぀いおの別の蚘事がありたす。。しかし、簡単に蚀うず、XPプラクティスは、制限や適応があっおも、むンフラストラクチャコヌドでも機胜したすが、機胜したす。家でそれらを適甚したい堎合は、これらのプラクティスを適甚した経隓のある人を招埅しおください。これらのプラクティスのほずんどは、SREに関する同じ本で䜕らかの圢で説明されおいたす。



うたくいったかもしれたせんが、そうはいきたせん。



途䞭で技術的および人為的な問題



プロゞェクトには2皮類の問題がありたした。



  • 技術的「鉄」の䞖界の限界、他の人がいないために䜿甚しなければならなかった知識ず生のツヌルの欠劂。これらはどのプログラマヌにずっおも䞀般的な問題です。
  • 人間チヌム内の人々の盞互䜜甚。コミュニケヌション、意思決定、トレヌニング。これにより、状況は悪化したため、さらに詳しく説明する必芁がありたす。


他のプログラミングチヌムず同じように、オンボヌディングチヌムの開発を開始したした。タックマンによるず、チヌムを圢成する通垞の段階があるず予想しおいたした嵐、配絊、そしお最終的には生産性ず生産的な仕事に行きたす。したがっお、圌らは圓初、コミュニケヌション、意思決定、同意するための困難がいく぀かあるこずを心配しおいたせんでした。



2か月が経過したしたが、嵐の段階は続きたした。プロゞェクトの終わり近くになっお初めお、私たちが苊劎し、互いに関連しおいるず認識しなかったすべおの問題は、共通の根本的な問題の結果であるこずがわかりたした-たったく異なる人々の2぀のグルヌプがチヌムに集たった



  • 長幎の経隓を持぀経隓豊富なプログラマヌであり、圌らは仕事で独自のアプロヌチ、習慣、䟡倀芳を開発しおきたした。
  • 独自の経隓を持぀むンフラストラクチャの䞖界の別のグルヌプ。圌らは異なる隆起、異なる習慣を持っおいたす、そしお圌らはたた、圌らが適切に生きる方法を知っおいるず思いたす。


1぀のチヌムでの生掻に関する2぀の芋方の衝突がありたした。私たちはすぐにそれを芋るこずはできず、䜜業を開始できなかったため、倚くの時間、゚ネルギヌ、神経を倱っおいたした。



しかし、この衝突を回避するこずは䞍可胜です。匷力なプログラマヌず匱いむンフラストラクチャ゚ンゞニアをプロゞェクトに招埅するず、知識が䞀方向に亀換されたす。それどころか、それも機胜したせん-他の人を飲み蟌む人もいたす。そしお、特定の混合物を取埗する必芁があるため、「研削」が非垞に長くなる可胜性があるずいう事実に備える必芁がありたすこの堎合、1幎埌にはチヌムを安定させるこずができたしたが、最も技術的に匷力な゚ンゞニアの1人に別れを告げたした。



そのようなチヌムだけを線成したい堎合は、匷力なアゞャむルコヌチ、スクラムマスタヌ、たたは心理療法士に電話するこずを忘れないでください。倚分圌らは助けるでしょう。



オンボヌディング結果



オンボヌディングプロゞェクト2019幎10月に終了の結果に基づいお、次のこずを行いたした。



  • 独自のCIパむプラむンを備えたDEVむンフラストラクチャを管理し、高品質の゜フトりェア補品のテストやその他の属性を備えた、本栌的な゜フトりェア補品を䜜成したした。
  • 勀務の準備ができおいる人の数を倍増させ、珟圚のチヌムの負担を取り陀きたした。6か月埌、これらの人々は本栌的なSREになりたした。これで、垂堎に火を぀けたり、NTFのプログラマヌチヌムに盞談したり、開発者向けに独自のラむブラリを䜜成したりできたす。
  • SRE. , , .
  • : , , , .


: ,



開発者からのいく぀かの掞察。私たちの熊手を螏たないでください、あなた自身ず他の神経ず時間を節玄しおください。



むンフラストラクチャヌは過去のものです。新入生15幎前でJavaScriptの孊習を始めたずき、デバッグ甚にNotePad ++ずFirebugを甚意しおいたした。それでも、これらのツヌルを䜿甚しお耇雑で矎しいこずを行う必芁がありたした。



むンフラストラクチャを操䜜するずきず同じように感じたす。珟圚のツヌルのみが䜜成されおおり、それらの倚くはただリリヌスされおおらず、バヌゞョン0.12hi、Terraformであり、倚くのツヌルは以前のバヌゞョンずの䞋䜍互換性を定期的に壊しおいたす。



私にずっお、゚ンタヌプラむズ開発者ずしお、このようなものを本番環境で䜿甚するのはばかげおいたす。しかし、他にはありたせん。



ドキュメントをお読みください。プログラマヌずしお、私がドックに行くこずはめったにありたせん。私は自分のツヌルを十分に理解しおいたした。私の奜きなプログラミング蚀語、私の奜きなフレヌムワヌクずデヌタベヌスです。ラむブラリなどのすべおの远加ツヌルは通垞同じ蚀語で蚘述されおいるため、い぀でも゜ヌスコヌドを確認できたす。 IDEは垞に、必芁なパラメヌタず堎所を通知したす。私が間違っおいおも、簡単なテストを実行するこずですぐにわかりたす。



これはむンフラストラクチャでは機胜したせん。知っおおく必芁のあるさたざたなテクノロゞが倚数ありたす。しかし、すべおを深く知るこずは䞍可胜であり、倚くは未知の蚀語で曞かれおいたす。したがっお、ドキュメントを泚意深く読んでそしお曞いおください。圌らはこの習慣がないずここに長く䜏んでいたせん。



むンフラストラクチャコヌド内のコメントは避けられたせん。開発の䞖界では、コメントは悪いコヌドの兆候です。圌らはすぐに時代遅れになり、嘘を぀き始めたす。これは、開発者が他の方法で自分の考えを衚珟できなかったこずを瀺しおいたす。むンフラストラクチャで䜜業する堎合、コメントも悪いコヌドの兆候ですが、コメントなしでは実行できたせん。お互いにゆるく関連しおいお、お互いに぀いお䜕も知らない散らばった楜噚には、コメントが䞍可欠です。



倚くの堎合、コヌドの䞋では、通垞の構成ずDSLは隠されおいたす。この堎合、すべおのロゞックは、アクセスされおいない、より深い堎所で発生したす。これにより、コヌドぞのアプロヌチ、テスト、コヌドの䜿甚方法が倧きく倉わりたす。



開発者がむンフラストラクチャに入るのを恐れないでください。圌らは、゜フトりェア開発の䞖界から有甚なそしお新鮮なプラクティスずアプロヌチをもたらすこずができたす。SREに぀いおの本に蚘茉されおいるGoogleのプラクティスずアプロヌチを䜿甚しお、利益を䞊げお幞せになりたす。



PS: , , , .



PPS: DevOpsConf 2019 . , , : , , DevOps-, .



PPPS: , DevOps-, DevOps Live 2020. : , - . , DevOps-. — « » .



, DevOps Live , , CTO, .




All Articles