敏ility性は安党でなければなりたせん

EugeneJimBrickmanは、「Hello、Startup」ずいう本の著者であり、スタヌトアップ支揎を専門ずするAtomic Squirrelの創始者です。 それ以前は、Linkedln、トリップアドバむザヌ、Cisco Systems、Thomson Financialなどの䌁業で10幎以䞊働いおいたした。 たた、コヌネル倧孊でコンピュヌタヌサむ゚ンスの孊士号ず修士号を取埗しおいたす。



あなたの仕事は、高速道路のすべおの車をより速くするこずだず想像しおください。 すべおのドラむバヌにアクセルペダルを最埌たで抌すように指瀺した堎合はどうなりたすか



明らかに、結果は灜害になりたす。 しかし、これはたさに、倚くの開発者が実装しようずしおいる関係のタむプであり、゜フトりェアをより速く䜜成しようずしおいたす。 これを行う理由のいく぀かを以䞋に瀺したす。



「私たちは本圓にダむナミックになろうずしおいるので、構造やドキュメントを開発するために無駄に時間を無駄にしないでください。」

「すぐに実皌働環境に送信する必芁があるため、テストを曞く時間がありたせん」

「䜕も自動化する時間がなかったので、コヌドを手動でデプロむするだけでした。」



高速道路の車の堎合、高速での走行には安党性に特に泚意が必芁です。 車を玠早く運転できるようにするには、ブレヌキ、ベルト、゚アバッグなどの適切なデバむスが必芁です。これにより、䜕か問題が発生した堎合にドラむバヌを救うこずができたす。



゜フトりェアの堎合、アゞリティにはセキュリティも必芁です。 合理的な劥協に到達するこずず、泚意を払うこずなく盲目的に前進するこずには違いがありたす。 有害事象が発生した堎合の損倱を最小限に抑える安党メカニズムが必芁です。 無謀な人は、最終的には速くなるのではなく、遅くなりたす



•テストを曞かずに「保存」された1時間は、本番゚ラヌの原因ずなる間違いを芋぀けるのに5時間かかり、「パッチ」が新しい゚ラヌを生成した堎合はさらに5時間かかりたす。



•30分間ドキュメントを䜜成する代わりに、各埓業員にプログラムの䜿甚方法を1時間教え、埓業員が補品を誀っお䜿甚し始めたかどうかを調査するのに䜕時間も費やしたす。



•自動化を心配せずに少し時間を節玄できたすが、コヌドを手動で再入力するのに時間がかかり、誀っおステヌゞを芋逃した堎合ぱラヌを怜玢するのにさらに時間がかかりたす。



゜フトりェアの䞖界の䞻芁なセキュリティメカニズムずは䜕ですか この蚘事では、自動車の䞖界における3぀の安党メカニズムず、プログラムの䞖界における同様のメカニズムを玹介したす。



ブレヌキ/継続的統合



問題が本圓に深刻になる前に、良いブレヌキは車を止めたす。 ゜フトりェアでは、継続的むンテグレヌションにより、間違ったプログラムが実皌働に入る前に停止したす。 「継続的むンテグレヌション」ずいう甚語を理解するために、最初にその反察であるレむトむンテグレヌションを怜蚎したす。



画像

図 1.囜際宇宙ステヌション



図に瀺すように、倚くのコンポヌネントで構成される囜際宇宙ステヌションISSを構築する責任があるず想像しおください。 1.さたざたな囜のチヌムがこれたたはそのコンポヌネントを䜜成する必芁があり、すべおを線成する方法を決定したす。 次の2぀のオプションがありたす。



•すべおのコンポヌネントを事前に開発したす。その埌、各チヌムは完党に独立しおコンポヌネントを離れたす。 すべおのコンポヌネントの準備ができたら、それらをすべお䞀緒に宇宙に発射し、䞀緒にしようずしたす。



•すべおのコンポヌネントの初期初期蚭蚈を開発し、その埌各チヌムが䜜業を開始したす。 各チヌムは、コンポヌネントを開発しながら、各コンポヌネントを他のコンポヌネントず継続的にテストし、問題が発生した堎合はアプロヌチ、構造、蚭蚈を倉曎したす。 準備の構成芁玠は単独で空間に移動し、そこで組み立おられたす。



オプション1では、最埌にISS党䜓を収集しようずするず、倚数の競合ず蚭蚈䞊の問題が発生したす。フランスの配線はフランスが行うべきであり、埌者はこれがむギリスの仕事であるず確信しおいたが、 突然、すべおのチヌムがメトリック枬定システムを䜿甚したこずが刀明したしたが、1぀はむギリス人です。 トむレを蚭眮する䜜業を自分たちにずっお重芁ず考えたチヌムは1぀もありたせんでした。 すべおがすでに行われ、宇宙を飛び回っおいるずきにすべおを明らかにするこずは、問題の解決が非垞に困難で高䟡になるこずを意味したす。



残念ながら、これは倚くの䌁業が゜フトりェアを䜜成するずきに䜿甚するパスです。 開発者は、数週間たたは数か月間、それぞれの分野で絶えず完党に独立しお行動し、最埌の最埌で出力補品に開発を統合しようずしたす。 このプロセスは「埌期統合」ず呌ばれ、マヌゞの競合図2を参照、怜出困難な゚ラヌの怜玢、プロゞェクトの出力リリヌスブランチの安定化の詊みを解決するための時間日、週の倧幅な損倱に぀ながるこずがよくありたす。



画像

図 2.機胜ブランチをプロゞェクトの出力リリヌスブランチにたずめるず、深刻なマヌゞ競合が発生したす



オプション2ずしお説明されおいる代替アプロヌチは、すべおの開発者が定期的に䜜業の結果をたずめる、継続的な統合です。 これにより、開発者が間違った方向に移動しすぎる前にプロゞェクトの問題を特定し、開発の䞀貫した開発を可胜にしたす。 継続的に統合する最も䞀般的な方法は、ステム開発モデルを䜿甚するこずです。



このモデルでは、開発者はバヌゞョン管理システムバヌゞョン管理システム= VCSに応じお、「トランク」たたは「マスタヌ」ず呌ばれる同じブランチですべおの䜜業を行いたす。 アむデアは、誰でも定期的にこのスレッドに自分のコヌドをアップロヌドするこずであり、おそらく1日に数回です。 単䞀のブランチでのすべおの開発者の䜜業は本圓に䟡倀がありたすか ステム開発は、LinkedIn、Facebook、Googleの䜕千人ものプログラマヌによっお䜿甚されおいたす。 Googleのトランク「トランク」統蚈は特に印象的です。毎日1぀のブランチで、20億行を超えるコヌドず45,000を超える確認操䜜を調敎しおいたす。

画像

図 3.ステミングでは、それぞれが同じブランチに独自のコヌドをアップロヌドしたす。



倚くの堎合、䜕千人もの開発者が競合せずに同じブランチにコヌドをアップロヌドできたすか 頻繁に小さな確認操䜜を頻繁に行うず、巚倧なモノリシックな合䜵を実行する代わりに、競合の数は非垞に少なく、発生する競合が望たしいこずがわかりたす。 これは、䜿甚される統合戊略に関係なく競合が避けられないずいう事実によるものですが、1か月から2日間の䜜業継続的な統合を䌎うを衚す競合は、数か月の䜜業を衚す競合統合が遅いよりも簡単に解決できたす。



そしお、ブランチの安定性はどうですか すべおの開発者が同じブランチで䜜業し、開発者がコンパむルしないか重倧な゚ラヌを匕き起こすコヌドをダりンロヌドするず、プロセス党䜓がブロックされる可胜性がありたす。 これを防ぐには、セルフテストレむアりトが必芁です。 自己テストレむアりトは完党に自動化されたプロセスです぀たり、1぀のコマンドで開始できたす。十分な数の自動テストが含たれおいたす。 それらがすべお合栌すれば、コヌドの安定性を確認できたす。 通垞のアプロヌチは、確認操䜜フックをバヌゞョン管理システムVCSに远加したす。VCSは、このような各操䜜を受け入れ、JenkinsやTravisなどの継続的統合CIサヌバヌ䞊のリンクを介しお枡し、拒吊したす。レむアりトが倱敗した堎合。 CIサヌバヌはコントロヌラヌであり、コヌドの各バッチをチェックしおから、トランクにロヌドできるようにしたす。 良いブレヌキのように動䜜し、本番に入る前に悪いコヌドを止めたす。



継続的むンテグレヌションなしでは、誰かが動䜜するこずを瀺すたで、゜フトりェアは壊れおいるずみなされたす。これは通垞、テストたたはむンテグレヌションの段階で発生したす。 継続的むンテグレヌションでは、新しい倉曎のたびに゜フトりェアが動䜜するず信じられおいたすもちろん、かなり包括的な自動テストのセットがない限り-開発者は違反が発生した瞬間を知っおいるため、゚ラヌをすぐに修正できたす。

-Jez HumbleyずDavid Farley、本Continuous DeliveryContinuous Delivery of Softwareの著者



継続的むンテグレヌションを䜿甚しお倧きな倉曎を加えるにはどうすればよいですか ぀たり、1週間を必芁ずする機胜に取り組んでいる堎合、1日に䜕床もトランクにアップロヌドできたすか 1぀の解決策は、機胜の切り替えを䜿甚するこずです。



安党ラッチ/機胜スむッチ



19䞖玀初頭、ほずんどの人ぱレベヌタヌを避け、ケヌブルが壊れるず゚レベヌタヌの乗客が死ぬこずを恐れおいたした。 この問題を解決するために、゚リシャオヌティスは「安党な゚レベヌタヌ」を発明し、その有効性を倧胆に実蚌したした。 これを行うために、オヌティスは倧きなオヌプン゚レベヌタシャフトを構築し、オヌプン゚レベヌタを数階持ち䞊げお、アシスタントに聎衆の前でケヌブルを切るように呜じたした。 4.゚レベヌタヌは萜䞋し始めたしたが、すぐに停止したした。



画像

図 4.゚リシャ・オヌティスは「安党なリフト」を実蚌したす。



どのように機胜したすか 安党゚レベヌタヌの重芁な芁玠は、図1に瀺す安党ラッチです。 5.初期䜍眮では、安党ラッチは完党に䌞びおおり、゚レベヌタシャフトのラッチに入り、゚レベヌタが動かないようになっおいたす。 ゚レベヌタケヌブルが十分に締められおいる堎合にのみ、安党ラッチが倖れたす。 蚀い換えれば、ラッチはケヌブルが無傷の堎合にのみ栌玍されたす。



画像

図 5.安党゚レベヌタヌの特蚱の図は、䞭倮に゚レベヌタヌがありD、偎面に安党ラッチがありf、䞊郚にケヌブルがあるG゚レベヌタヌシャフトを瀺しおいたす。



この玠晎らしいデザむンでは、安党ラッチはデフォルトでセキュリティを提䟛したす。 ゜フトりェアでは、パフォヌマンススむッチは同じ機胜を実行したす。 機胜スむッチを䜿甚する方法は、構成ファむルたたはデヌタベヌスで名前付き機胜スむッチshowFeatureXYZなどを怜玢する「if」ステヌトメントですべおの新しいコヌドをラップするこずです。



iffeatureToggleEnabled“ showFeatureXYZ”{showFeatureXYZ}



重芁な考え方は、デフォルトでは、すべおの機胜スむッチがオフの䜍眮にあるずいうこずです。 ぀たり デフォルトの䜍眮は安党です。 ぀たり、特性スむッチのシェルが有効になっおいる間、「if」挔算子はコヌドが実行されない、たたは目に芋える効果がないこずを保蚌するため、䞍完党なコヌドたたは誀ったコヌドをロヌドしお終了するこずもできたす。

特性の䜜業が完了したら、指定したスむッチ特性を「オン」の䜍眮に配眮できたす。 これらのスむッチの特性ず倀を構成ファむルに保存する最も簡単な方法。 したがっお、開発環境の構成でこの機胜を有効にできたすが、完了するたで䜿甚されないようにするこずができたす。



# config.yml

dev:

showFeatureXYZ: true



prod:

showFeatureXYZ: false









より匷力なオプションは、各ナヌザヌの特性スむッチの倀を蚭定できる動的システムの存圚ず、埓業員が特性スむッチの倀を動的に倉曎しお特定のナヌザヌの特定の特性を有効たたは無効にするこずができるナヌザヌWebむンタヌフェむスの存圚です図に瀺す。 6。

たずえば、開発䞭、最初は䌚瀟の埓業員にのみいく぀かの特性を蚱可できたす。 機胜が完成したら、すべおのナヌザヌの1に察しお有効にするこずができたす。 すべおが正垞であれば、10のナヌザヌに蚱可を䞎え、次に50に蚱可を䞎えるこずができたす。 ある時点で問題が発生した堎合、Webベヌスのナヌザヌむンタヌフェむスを䜿甚しお、問題の機胜をオフにするこずができたす。 パフォヌマンススむッチは、ベンチマヌクにも䜿甚できたす。





図 6. LinkedIn XLNT機胜オフツヌルを䜿甚しお、米囜ナヌザヌの1に察しお䞀郚の機胜を有効にする



バルクヘッド/゜ヌスコヌドベヌスのパヌティション分割



船舶では、隔壁を䜿甚しお、断熱された防氎コンパヌトメントを䜜成したす。 このため、ケヌスが砎壊されるず、1぀のコンパヌトメントのみが殺到したす。

同様に、゜フトりェアでは、゜ヌスコヌドベヌスを分離されたコンポヌネントに分割するこずができたす。そのため、問題が発生した堎合、このコンポヌネント内でのみ動䜜したす。

゜ヌスコヌドベヌスの最悪の特性は倧きすぎるため、゜ヌスコヌドベヌスのパヌティション分割は重芁です。 プログラムが倧きいほど、開発は遅くなりたす。 たずえば、Steve McConnellの著曞「Perfect Code」Steve McConnellの「Code Complete」、2004幎のタブレットを考えおみたしょう。プロゞェクトのサむズコヌド行ず゚ラヌ密床コヌド1000行あたりの゚ラヌ数の関係を瀺したす。











ここでは、コヌドベヌスが増加するに぀れお、゚ラヌの密床が増加するこずがわかりたす。 ゜ヌスコヌドベヌスが2倍に増加した堎合、゚ラヌの数は4〜8倍に増加したす。 たた、50䞇を超えるコヌド行を凊理する必芁がある堎合、゚ラヌ密床は10行ごずに1぀の゚ラヌに達する可胜性がありたす。



その理由は、アンディ・ハントの著曞である 『Venkat Subramaniam』の匕甚を䜿甚するず、高速゜フトりェア開発に関する゚チュヌドだからです。 「-」゜フトりェア開発は、統合開発環境や蚭蚈ツヌルではなく、どのスキヌムでも行われたせん。 それはあなたの頭の䞭で起こりたす。」 数十䞇のコヌド行を含む゜ヌスコヌドデヌタベヌスは、人が心に留めおおくこずができるものをはるかに超えおいたす。 このような巚倧なプログラムのすべおの盞互䜜甚ずデッドロックを考慮するこずは䞍可胜です。 したがっお、プログラムを分割しお、特定の瞬間にプログラムの䞀郚に集䞭し、他のすべおを安党に残すこずができるようにする戊略が必芁です。



コヌドベヌスを分割するには、䞻に2぀の戊略がありたす。1぀は人為的な機胜ぞの䟝存関係の導入であり、もう1぀はマむクロサヌビスアヌキテクチャの導入です。



人工的な機胜ぞの䟝存性の考え方は、他のモゞュヌルの゜ヌスコヌドに䟝存する代わりに゜ヌスの䟝存性、他のモゞュヌルによっお発行されたバヌゞョン管理された人工的な機胜に埓うようにモゞュヌルを倉曎するこずです人工的な機胜ぞの䟝存性。 あなたはすでにオヌプン゜ヌスラむブラリでこれをしおいるかもしれたせん。 JavaScriptプログラムでjQueryを䜿甚するか、JavaコヌドでApache Kafkaを䜿甚するには、察応するオヌプン゜ヌスラむブラリの゜ヌスコヌドに䟝存せず、これらのラむブラリが提䟛するバヌゞョン管理された人工属性jquery-1.11-min.jsたたはkafkaなどに䟝存したす-clients-0.8.1.jar。 各モゞュヌルの固定バヌゞョンが䜿甚されおいる堎合、開発者がそのようなモゞュヌルに察しお行った倉曎は、明瀺的に曎新を遞択するたで圱響したせん。 このアプロヌチは、船舶の隔壁のように、他のコンポヌネントの問題からあなたを隔離したす。



マむクロサヌビスの考え方は、すべおのモゞュヌルが同じプロセスで動䜜し、機胜呌び出しを介しお通信する単䞀のモノリシックアプリケヌションから、各モゞュヌルが個別のプロセスで動䜜する分離サヌビスに切り替えるこずです。メッセヌゞ。 サヌビスの境界は゜フトりェア所有暩の境界ずしお機胜するため、マむクロサヌビスはチヌムが独立しお䜜業できるようにする優れた方法です。 マむクロサヌビスを䜿甚するず、さたざたなテクノロゞヌを䜿甚しお補品を䜜成するこずもできたすたずえば、1぀のマむクロサヌビスをPythonで、別のマむクロサヌビスをJavaで、3぀目をRubyで、各サヌビスを独立しお評䟡できたす。



人工的な機胜ずマむクロサヌビスぞの䟝存性には倚くの利点がありたすが、倚くの重倧な欠点も含たれおいたす。どちらの方法も、前述の継続的統合のアむデアず矛盟しお機胜したす。 トレヌドオフの詳现に぀いおは、「コヌドベヌスをマむクロサヌビスずアヌティファクトに分割する」「 マむクロサヌビスず人工特性アプロヌチにおける゜ヌスコヌドベヌスの分離」を参照しおください。



3぀の質問



セキュリティメカニズムを䜿甚するず、より迅速に移行できたすが、すべおの費甚を支払う必芁がありたす。開発が実際に遅くなる堎合、事前の時間が必芁です。 珟圚の補品のセキュリティメカニズムに費やす䟡倀がある時間を決定する方法は 決定を䞋すには、次の3぀の質問をする必芁がありたす。



•問題のメカニズムによっお察凊される問題のコストはいくらですか

•セキュリティメカニズム自䜓の䟡栌はいくらですか

•これらの問題はどの皋床発生する可胜性がありたすか



この蚘事を終了するために、䞀般的な゜リュヌションで䞊蚘の3぀の質問がどのように機胜するかを芋おみたしょう。自動テストを行うかどうかです。



頑固なテスト愛奜家の䞭には、すべおに察しおテストを䜜成し、100のコヌドカバレッゞを目指しお努力する必芁があるず䞻匵する人もいたすが、珟実の䞖界ではこれに近いものを芋るこずは非垞にたれです。 Hello、Startupを曞いたずき、Google、Facebook、LinkedIn、Twitter、Instagram、Stripe、GitHubなど、過去10幎間で最も成功したスタヌトアップの開発者にむンタビュヌしたした。 特に初期の段階で、チェックするものずチェックしないものに぀いお、党員が慎重に考え抜いた劥協案を䜜成したこずが刀明したした。



これらの3぀の質問を怜蚎しおください。



自動化されたテストの䜜成ず保守のコストはいくらですか



単䜓テストの準備は珟圚安䟡です。 高品質のテストプラットフォヌムは、ほがすべおのプログラミング蚀語で䜿甚できたす。 ほずんどの建物システムには、単䜓テストのサポヌトが組み蟌たれおおり、通垞は迅速に機胜したす。 䞀方、統合テスト特にナヌザヌむンタヌフェむステストでは、システムの重芁な郚分を䜿甚する必芁がありたす。぀たり、構成に費甚がかかり、䜜業が遅く、保守が難しくなりたす。



もちろん、統合テストでは、単䜓テストでは芋萜ずされる倚くの゚ラヌをキャッチできたす。 しかし、セットアップず実装は非垞に高䟡であるため、ほずんどのスタヌトアップは固定資産を非垞に耇雑な単䜓テストに振り向け、非垞に䟡倀のある重芁な統合テストの小さなセットに少しだけ投資するこずが刀明したした。



自動化されたテストがない堎合に合栌できる゚ラヌのコストはいくらですか



1週間以内に捚おる可胜性が高いプロトタむプを䜜成する堎合、゚ラヌのコストは䜎いため、テストに投資する䟡倀はおそらくありたせん。 䞀方、支払い凊理システムを䜜成する堎合、゚ラヌのコストは非垞に高くなりたす。もちろん、クラむアントのクレゞットカヌドから2回匕き萜ずしたり、間違った金額で操䜜したりするこずは望たしくありたせん。



私が開発者ず話し合った新興䌁業はテストのやり方が異なりたしたが、ほずんど党員がコヌドのいく぀かの郚分通垞は支払い、セキュリティ、デヌタストレヌゞを自ら決定したしたが、違反は単に容認できないため、深刻なチェックが行われたした文字通り初日から。



自動テストなしで゚ラヌが発生する可胜性はどのくらいですか



䞊に瀺したように、コヌドベヌスが倧きくなるず、゚ラヌの密床が増加したす。 同じこずが、チヌムの芏暡ずプロゞェクトの耇雑さの増倧にも圓おはたりたす。



10,000行のコヌドを持぀2人のプログラマのチヌムの堎合、テストの䜜成に費やす時間のわずか10で十分です。 20人のプログラマず100,000行のコヌドを䜿甚するず、これには20の時間がかかり、100䞇行の200人のコヌド開発者のチヌムでは50が必芁になりたす。



プログラムのサむズず開発者の数が増えるに぀れお、テストにより倚くの時間を費やす必芁がありたす。



All Articles