リポゞトリから本番環境のCI / CDむンフラストラクチャたで1週間で

通垞、「サポヌト」ずいう甚語の意味は1぀だけです。ホスティング、䞍良ドラむブの亀換、WebサヌバヌずDBMSのセットアップ、および䞀般的な日垞の管理に関する問題ぞの察応です。 しかし、実際には、これはむンタヌネットプロゞェクトの安定性制埡の最初のレベルにすぎたせん。



確かに、すべおの重芁なデヌタの冗長性ず自動feyloverを備えた、異なるデヌタセンタヌの耇数のサヌバヌのフェむルセヌフクラスタヌを既に構成しおいる堎合でも、実皌働サむトのデバッグされた䜜業が深刻に䞭断される可胜性がありたす。 これの代わりにどれくらいの頻床で芋たしたか



画像



ここにありたす



画像

そしお、この投皿に぀いお-開発の安党性ず安定性、およびそれらが提䟛できるシステムず原則に぀いお。 たたは、流行語を䜿甚するには-DevOpsずCI / CDに぀いお。



なんで



基本スキヌムでは、サむト自䜓、そのベヌス、およびキャッシングや怜玢などの他のすべおの関連サヌビスがスピンしおいるサヌバヌが1぀しかない堎合、ほずんどすべおを手動で実行できたす-リポゞトリからコヌドの曎新を取埗し、サヌビスを再起動したす、怜玢ベヌスずその他すべおのむンデックスを再䜜成したす。



画像



しかし、プロゞェクトが倧きくなったらどうしたすか 瞊ず暪の䞡方。 Webを備えた10台のサヌバヌ、ベヌスを備えた3台のサヌバヌ、および怜玢甚の耇数のサヌバヌが既にある堎合。 たた、顧客がどのようにサヌビスを䜿甚しおいるかを正確に把握し、デヌタベヌス、フロント゚ンド、および定期的なタスクで個別の分析を取埗するこずも決定したした。 そしお今、私たちは1぀のサヌバヌではなく、䟋えば30を持っおいたす。 手ですべおのささいなこずをし続けたすか 管理者のスタッフを増やす必芁がありたす。なぜなら すでに物理的にサポヌトされおいるすべおのシステムに十分な時間ず泚意がありたせん。



たたは、管理者クラフトワヌクショップであるこずをやめお、生産チェヌンの構築を開始するこずもできたす。 次の抜象化レベルに進み、個々のサヌビスやプログラムではなく、サヌバヌ党䜓をシステム党䜓の最小単䜍ずしお管理したす。



DevOpsずCI / CDの方法論が発明されたのはこのためです。 CI / CDは、開発甚の別個のプラットフォヌム、別個のステヌゞング、および別個の販売の存圚を意味したす。



画像



たた、各リリヌスは手動たたは自動テストであるかどうかにかかわらず、特定のラむフステヌゞを経なければならないこずを意味したす。 これにより、展開自䜓で䜕かがうたくいかない可胜性が排陀されたす。間違ったブランチ、間違ったカブ、間違ったサヌバヌなどを匕き出したした。すべおが事前に予枬および構造化され、人的芁因の圱響は最小限です。 コヌド自䜓の品質ずプロゞェクトの内郚ロゞックの動䜜を監芖するだけです。



これにより、管理者は開発および蚈算プロセスに䞀切干枉せず、将来のアヌキテクチャの拡匵方法に぀いお監芖および思考する圓面の責任を匕き受けるこずができたす。



通垞、そのようなこずは理論的にはもっず蚀われたす。 ここで、圌らは蚀う、Dockerのようなものがある。 ここでは、コンテナを安䟡に䜜成できたす。 䞍芁なレむダヌやサヌビスを読み蟌たずに、芪システムの重芁な郚分に觊れるこずなく、すべおを簡単に䜜成、曎新、ロヌルバックできたす。 そしお、別の蚘事で-しかしKubernetesがありたす。 圌は、手動で介入するこずなく、自分でプロゞェクトにドッカヌブリックを挿入および匕き出し、構成の仕組みを説明するだけです。 公匏ドキュメントの3行です。 そしお、このスタむルでは、ほがすべおの材料。 メカニックに安党で安定した開発を提䟛するずいう本圓のタスクから始めお、これが実際の生掻の䞭でどのように起こるかに぀いおお話したいず思いたす。



誰に぀いお



Facebook Messengerのボットを䜿甚しお英語を孊習するのに圹立぀Edwinサヌビスの䟋に぀いお説明したす。 @EnglishWithEdwinボットは、英語のレベルを決定し、各生埒の進歩ず速床に基づいおカリキュラムをパヌ゜ナラむズしたす。



この瞬間たでに、同瀟は数か月間開発を続けおいたしたが、急速に開発されおいる実甚的な補品があり、最初の公開リリヌスの準備をしおいたした。 開発サむトでは、Dockerコンテナのサヌビスが既に開始されおおり、AWSのデヌタベヌスが䜜成され、これらすべおが機胜しおいたした。



Edwinの開発マネヌゞャヌであるSergey Vasilievは、垂堎にある既存のオファヌを慎重に分析し、補品のアヌキテクチャず運甚䞊の信頌性の芁件に぀いお説明したした。 24時間䜓制のサヌビスサポヌトに加えお、ステヌゞングサむトず運甚サむトを詳现に調査し、快適な曎新ず䞀般的なむンフラストラクチャ管理を可胜にする必芁がありたした。



圓時の実皌働環境でのコンテナの䜿甚は倧芏暡ではなく、チャットボットの開発が始たったばかりでした。 したがっお、私たちにずっおは、本物の興味深い補品を䟋に珟代のツヌルを実践する絶奜の機䌚でした。



プロゞェクト構造



Edwinはどのように内郚構造化されおいたすか キヌワヌド-Python、PostgreSQL、Neo4j、RabbitMQ。 埓来、アヌキテクチャは、トランスポヌト、論理、分析の3぀の倧きなブロックに分割できたす。



画像

最初のブロック-pythonで蚘述されたドッキングされたメヌリングリストアプリケヌションは、Facebook Gatewayを介しお゜ヌシャルネットワヌクからメッセヌゞを受信し、デヌタベヌスに保存しお、RabbitMQキュヌにむベントを远加したす。



2番目のブロックには、ボット自䜓のコンテナがあり、キュヌから3番目のブロックでキュヌからデヌタを読み取り、3番目のブロックで分析甚のデヌタを収集したす。たた、スケゞュヌラ-プッシュ通知やセッションの有効期限。



3番目のブロック-分析甚のデヌタを含むデヌタベヌスず、ボットからデヌタを集玄し、Googleアナリティクスや他の堎所にアップロヌドするサヌビスを備えたいく぀かのコンテナ。



しかし、これは想定される構造にすぎたせん。なぜなら、 Edwinは私たちのずころに来お、ただプロゞェクトのリリヌスバヌゞョンを持っおいないので、圌は本番で茝いおいたせんでした。 ステヌゞ/補品環境のセットアップが必芁でした。



䞀般的に、これは1぀ではなくおもそれほど難しくはありたせんでした-導入の詳现はすべお議論されたしたが、期限は容赊なく近づいおおり、すべおの願いを実珟するのに1週間しか残っおいたせんでした。



CI / CDセットアップ



最初に心に留めおおくべきこずは、すべおが遠くから芋えるほど耇雑ではないずいうこずです。 䞻なこずは、あなたがしおいるこずずその理由を理解するこずです。 本圓に重芁なニヌズにのみツヌルを遞択し、実際のニヌズず機䌚を適切に評䟡したす。



システム党䜓の基盀は、サヌビスずビゞネスロゞックを備えたドッカヌコンテナです。 むンフラストラクチャ管理の汎甚性ずモビリティを高めるために遞択されたコンテナ。 珟圚、Dockerコンテナをゞャグリングするための最も人気のあるツヌルは、GoogleのKubernetesです少なくずも最も広く知られおいたす。 しかし、私たちにはあたりにも混乱し、構造的に耇雑であるように思われたため、䜜業胜力を維持するためにあたりにも倚くの䜓の動きが必芁になりたしたそしお最初の理解には時間がかかりすぎたした。 そしお以来 CI / CDシステム党䜓の運甚期限を最小限に抑えたため、よりシンプルで軜量な゜リュヌションを探すこずにしたした。



コンテナテンプレヌトを保存するために、Amazon EC2 Container Registryを取埗するこずが決定されたした実際、それを取埗するのではなく、開発者を遞択しおおくだけです。 䞀般に、ロヌカルホストで個人的に䜜成されたレゞストリず倧差はありたせん。 基本的に、ロヌカルホストで個人的に持ち䞊げる必芁がないずいう事実。



そのため、コンテナテンプレヌトを含むリポゞトリがありたす。 展開されたコンテナが垞に盞互に認識し、ネットワヌク構成が倉曎された堎合でも盞互に通信できるようにするにはどうすればよいですか 同時に、コンテナ自䜓ずその構成の内郚に絶えず干枉するこずなく



これには、サヌビス発芋などの皮類の゜フトりェアがありたす-おそらく、理解を容易にするために、「ビゞネスロゞックルヌタヌ」ず呌ぶこずができたすが、技術的にはこれは完党に正しい定矩ではありたせん。 単䞀の芁求配信センタヌが確立され、すべおのサヌビスが近隣の堎所のデヌタに適甚されたす。このセンタヌの゚ヌゞェントは最初にコンテナ内に配眮されたす。 そしお、起動時のすべおのサヌビスは、堎所ず状態をルヌタヌに通知したす。



コンテナ甚の新しいマシンをすばやく準備する方法は 結局のずころ、ホストもネットワヌク負荷などのために正しく構成する必芁がありたす。デフォルトのカヌネルパラメヌタも、実皌働環境で芋たいものからかなり離れおいるこずがよくありたす。 このために、新しいサむトの準備にかかる時間を倧幅に短瞮するいく぀かのAnsibleレシピが䜜成されたした。



サヌバヌをコンテナ甚に構成するず、必芁なすべおのサヌビスがドッキングされたす。実際には、30分ごずに500個のボタンを抌さずに「継続的統合」を敎理する方法を理解するだけです。 その結果、GoCDや小さなスクリプトバむンディングなどのシステムに萜ち着きたした。 なぜGoCDなのか、Jenkinsではなく私に尋ねるのですか 以前、他のプロゞェクトでは、䞀方ず他方に察凊する必芁があり、盞互䜜甚の合蚈は、JenkinsよりもGoCDの方が簡単に構成できそうでした。 タスクずパむプラむンのテンプレヌトを䜜成し、それに基づいお、さたざたな環境に合わせおさたざたな本番チェヌンを生成できたす。



開発プロセス



2月6日月曜日



䞀般的に、最初の日は穏やかでした。 やっず私たちがやらなければならないこずのTKを手に入れたした。



ここでは、もちろん、ちょうど1週間はただ少しのトリックであるずいう予玄をする䟡倀がありたす。 結局のずころ、私たちが存圚するのは真空ではありたせん 管理者は、どのような皮類のプロゞェクトがサポヌトされるようになるのか、そもそも䞀般的にどのタスクがタスクになるのかを事前に認識しおいたした。 そのため、ツヌルを遞択する可胜性に぀いお少し敎理する時間がありたした。



その結果、その時点でプロゞェクトが開発されおいた既存のサヌバヌを静かに枬定したした。 監芖を重芖し、䜕が実行されおいるか、どのように動䜜するかを把握したす。



受信した情報に基づいお、Ansibleレシピを䜜成し、本番甚にサヌバヌのむンストヌルを開始したす。開発䞭の䞍泚意なアクションを回避するために、既存の開発環境ず亀差しないAmazonに別のVPCをセットアップしたす。 必芁なすべおのサヌビスPostgreSQL、Neo4j、プロゞェクトコヌドを含むコンテナをデプロむしたす。



ずころで、同僚は開発䞭にAmazon RDSの圢でPostgreSQLを䜿甚しおいたしたが、本番環境では、共同合意により、PostgreSQLを䜿甚しお通垞のむンスタンスに切り替えるこずを決定したした-これにより、システムのすべおの芁玠の動䜜を可胜な限り管理できる管理者にずっお状況がより透明になりたした負荷のその埌の成長の時間。



実際、ほずんど劎力をかけずにプロゞェクトを行っおおり、専任の管理時間がない堎合は、RDSも䜿甚できたす。RDSは非垞に適しおいたす。同時に、より緊急のタスクのためにリ゜ヌスを解攟できたす。



2月7日火曜日



別のサヌバヌに、基本バヌゞョンのGoCDデプロむメントパネルずConsulサヌビス怜出をむンストヌルしたす。



前述したように、゚ドりィンは開発のためのある皋床の準備が敎ったむンフラストラクチャを手に入れたした。 コンテナをゞャグリングするために、圌らはAmazon ECS、別名EC2 Container Serviceを䜿甚したした。 Kubernetes-as-a-Serviceのようなもの。 プロゞェクトの将来の構造に぀いお開発者の垌望を話し合い、蚈算を行った埌、ECSを攟棄するこずが決定されたした。 倚くのクラりドのように、内郚で䜕が起こっおいるかを制埡するのに十分に透明ではないこずが刀明したした。同じコンテナに蚭定された環境パラメヌタヌなど、珟圚の状況では非垞に有甚なものはありたせんでした すなわち 異なるパむプラむンで同じコンテナを䜿甚する方法はなく、単に環境を再定矩するだけです。 Amazonパラダむムでは、環境ごずに個別のコンテナヌを䜜成する必芁がありたす。



たた、䜕らかの理由で、異なるチェヌンで同じタスクを䜿甚するこずは䞍可胜です。 䞀般的に、GoCDははるかに柔軟性がありたした。



残りの時間は、GoCDの販売環境のパむプラむンを䜜成および蚭定したす。コヌドの構築、コンテナヌの再䜜成、新しいコンテナヌの補品ぞの展開、曎新されたサヌビスの領事ぞの登録。



2月8日氎曜日



昚日の蚭定を再確認し、テスト蚈算を実行し、システム接続を確認したす。コヌドがリポゞトリから正しく取埗されるこず、同じコヌドがコンテナに正しく収集されるこず、コンテナが正しいサヌバヌで起動されるこず、そしお領事にそのステヌタスを通知したす。



䞀般的に、珟時点では、確立された基本むンフラストラクチャをすでに準備しおおり、その䞭で既に新しいパラダむムに取り組むこずができたす。 GoCD展開パネルがあり、本番環境でプロゞェクトを組み立おおレむアりトするためのメカニズムがありたす。Consulを䜿甚するず、既存のむンフラストラクチャに新しいサヌバヌやサヌビスを远加時間ず人件費を远加するこずなく有機的にできたす。



すべおが正垞に機胜するこずを確認した埌、隣接するアベむラビリティヌゟヌンのデヌタベヌスのバックアップレプリケヌションを開発者ずずもに蚭定し、䜜業デヌタを本番デヌタベヌスにアップロヌドしたす。



2月9日朚曜日



先ほど蚀ったように、この時点で、䞀般に、CI / CDシステムの必芁最小限の芁玠はすべおむンストヌルされ、構成されおいたす。 結果のシステムの構造に関するすべおのデヌタを開発者に枡したす;圌らの郚分では、プロゞェクトのすべおのアセンブリおよび蚈算メカニズムのテストを開始したす。



ずころで、ToRをコンパむルするずきに、すべおのコンテナずサヌビスからのすべおのシステムログの集䞭収集などの重芁なポむントを忘れおいたこずがわかりたす。 これは、プロゞェクトの党䜓的な状況のバックグラりンド分析や、朜圚的なボトルネックや差し迫った問題の远跡に圹立ちたす。



ログは、あらゆる皮類の分析に非垞に䟿利なむンタヌフェむスであるKibanaで収集するこずにしたした。 サヌドパヌティのプロゞェクトで繰り返し遭遇し、瀟内プロゞェクトで䜿甚したした。



数時間でKibanaを䞊げ、サヌビスからのログの収集を構成し、補品䞊のすべおの重芁なサヌビスの監芖を構成したす。



2月10日金曜日



ほずんどの堎合、すべおが組織偎から金曜日に準備ができおいたした。 圓然ながら、さたざたな小さなバグやグリッチに遭遇したしたが、継続的むンテグレヌションのシステムずは関係がありたせんでした。



結果



画像



その結果、䜕が埗られたしたか 3぀のステヌゞず環境dev、stage、prodで構成されるモゞュヌル匏プロゞェクト開発システム。 プロゞェクト党䜓が個別のマむクロサヌビスに分割され、それぞれに独自のパむプラむンがありたす。



開発者が新しいバヌゞョンをリリヌスするず、GoCDパネルに移動し、察応するパむプラむンを起動するだけです。 たずえば、「ステヌゞで新しいロガヌをロヌル」し、そこでテストし、すべおが正垞に機胜するこずを確認しおから、補品にロヌルオヌバヌしたす。 突然䜕かがおかしくなった堎合は、自分でパネルを介しお、目的のサヌビスを目的のバヌゞョンにロヌルバックしたす。



画像



dev、stage、prodの3぀の環境はすべお、異なるVPCで分離されおいたす。 Consulは環境ごずに個別のデヌタセンタヌを持っおいるため、サヌビスが誀っお異なる環境間を移動するこずさえありたせん。 そしお、そのような状況で倧きな欲求があったずしおも、凊女を砎るなど、乙女に察するいかなる行動によっおも非垞に困難です。



たた、プロゞェクトの容量を簡単に増やすこずができたす。 新しいコンピュヌティングパワヌが必芁な堎合、玄10分で新しいむンスタンスを起動しお䜜業の準備をするこずができたす。



遭遇した問題



党䜓ずしお、掻動の分野自䜓は倚くの人にずっおかなり耇雑に芋えるかもしれないずいう事実にもかかわらず、倚くの問題が私たちを埅っおいお、ほずんどすべおがすぐにうたくいきたした。 䞀般的に、これは継続的むンテグレヌションずは関係ありたせん。



問題は、このプロゞェクトがホストされおいるAmazon Web Servicesによっおスロヌされたした。



Consulをセットアップするずきに、圌らは興味深いプラグに出䌚いたした。 ゚ヌゞェントずそれらぞのアクセスは、システムリゟルバヌを介しおコンテナに登録されたす。 ただし、Amazonがデフォルトで䜿甚するAMI LinuxはデフォルトのCentOSずは倚少異なり、リゟルバヌずの連携はVirtual Private CloudVPCネットワヌクの蚭定で行われたす。 サヌバヌが再起動するず、Amazonはリゟルバヌを匷制したす。 残念ながら、これたで倱敗した執政官の解像床蚭定を壊さないように圌に匷制したした。 しかし、chatrtr + iは党員を救ったので、今は生きおいたす。



䞀般に、VPCずそのネットワヌクの構造は非垞に興味深いものであり、非垞に予期しない堎所での制限に぀たずく可胜性がありたす。 たずえば、アプリケヌションバランサヌはアクセシビリティマルチゟヌンでのみ䜜成できたす。぀たり、バック゚ンドは䞀床に耇数の異なる可甚性ゟヌンに配眮する必芁がありたす。 このため、プラむベヌト/パブリックおよび1぀のゟヌンず別のゟヌンにアドレスがあるように、VPCネットワヌクにブレヌクダりンが必芁です。 たた、䜜成時にのみVPCネットワヌクの内蚳を倉曎できたす。 たた、むンスタンスでVPCを倉曎するこずも、䜜成時にのみ可胜です。



そしお、同じアクセシビリティゟヌン内に本番サヌバヌを備えた既補のむンフラストラクチャが既にある堎合、別のゟヌンにサヌバヌを远加しおバランサヌを前に吊るすだけでそれを倉曎する方法はありたせん。 残念ながら、構造党䜓を最初から完党にやり盎す必芁がありたす。



結論ず蚈画



プロゞェクトの珟圚の開発レベルである状況の芁件を満たせなくなった堎合、通垞のワヌクフロヌを拡倧したり倉曎したりするこずを恐れないでください。 プロゞェクト開発の次の段階ぞの移行は確かにあなたにずっお負担が倧きすぎるこずを恐れないでください。 自分のニヌズに適切にアプロヌチし、最初に耳にする決定に぀いお考えずに把握しなければ、この道は䞀人でも簡単に習埗できたす。



もちろん、倚くの人が蚀うこずができたす「ええ、そうです、圌らはHabrahabrやOur Ra​​dioのようなプロゞェクトを10幎間サポヌトしおおり、ここではシンプルさに぀いお話しおいるのです」 はい、確かに、私たちは䞀生のうちに倚くの異なるものを芋おきたした。 そしお、おそらくこれは、単玔なものず耇雑なものを区別し、あたりにも倚くの熊手を螏たないようにするのに圹立぀のです。 しかし、繰り返しになりたすが、最初に「クヌルさ」を远求せずにタスクにアプロヌチしお適切なツヌルを遞択するこずが合理的であれば、人生を倧幅に簡玠化できたす。



䞀方、説明されおいるスキヌムおよびコンテナ化に基づく他のスキヌムは、プロゞェクトが最初からこのような操䜜に察応する必芁があるこずを意味しおいるこずを芚えおおく䟡倀がありたす。 プロゞェクトは、モバむルで亀換可胜なように、状態を維持できない本栌的なマむクロサヌビスで構成する必芁がありたす。 モノリシックシステムのフレヌムワヌクでは、このような継続的むンテグレヌションアプロヌチの導入は、劎働集玄的であり、将来の䜿甚での快適性が䜎いようです。



プロゞェクトの今埌の蚈画は



基本的なむンフラストラクチャが確立された埌、Jiraベヌスのバグトラッカヌをそれに接続しお、Gitリポゞトリからprodの新しいバヌゞョンを展開するずきに、バグのアプリケヌションに関する情報を遞択し、自動的に閉じおリリヌスノヌトに曞き蟌むこずができたす。



たた、メむンの䜜業ノヌドで自動スケヌリングを蚭定する必芁があるずきが来おいるようです。 その合蚈数は垞に増加しおおり、ピヌク時にアクティブなサヌバヌの数を節玄するこずでコストを削枛できたす。



All Articles