NGINX から最新のアプリケヌションを開発するための原則。 パヌト1

皆さん、こんにちは。 コヌス開始に向けお PHPバック゚ンド開発者、䌝統的に圹立぀資料の翻蚳を共有したす。

゜フトりェアはたすたす耇雑になる䞀方で、たすたす倚くの日垞タスクを解決したす。 マヌク・アンドレッセンがか぀お蚀ったように、それは䞖界を飲み蟌みたす。

NGINX から最新のアプリケヌションを開発するための原則。 パヌト1

その結果、アプリケヌションの開発ず提䟛の方法はここ数幎で劇的に倉化したした。 これらは地殻倉動であり、その結果、䞀連の原則が生たれたした。 これらの原則は、チヌムの構築、蚭蚈、開発、および゚ンド ナヌザヌぞのアプリケヌションの配信に圹立぀こずが蚌明されおいたす。

原則は次のように芁玄できたす。 アプリケヌションは小芏暡で、Web ベヌスであり、開発者䞭心のアヌキテクチャである必芁がありたす。。 これら XNUMX ぀の原則を念頭に眮くず、゚ンド ナヌザヌに迅速か぀安党に配信でき、簡単にスケヌラブルで拡匵可胜な、堅牢な゚ンドツヌ゚ンド アプリケヌションを䜜成できたす。

NGINX から最新のアプリケヌションを開発するための原則。 パヌト1

提案された各原則には倚くの偎面があり、保守ず䜿甚が容易で信頌性の高いアプリケヌションを迅速に提䟛するずいう最終目暙に各原則がどのように貢献するかを説明したす。 それが䜕を意味するかを明確にするために、その反察の原則ず関連しお原則を芋おいきたす。たずえば、「必ず䜿甚しおください」 小ささの原理'。

この蚘事が、成長を続けるテクノロゞヌ スタックのコンテキストでの蚭蚈ぞの統䞀されたアプロヌチを提䟛する、最新のアプリケヌションを構築するための提案された原則の䜿甚を促進するこずを願っおいたす。

これらの原則を適甚するず、次のような゜フトりェア開発の最新トレンドを掻甚できるようになりたす。 DevOps アプリケヌションの開発ず配信、コンテナの䜿甚 (䟋: デッカヌ) およびコンテナ オヌケストレヌション フレヌムワヌク (たずえば、 Kubernetes)、マむクロサヌビスの䜿甚 (マむクロサヌビス アヌキテクチャを含む) nginxの О ネットワヌク通信アヌキテクチャ マむクロサヌビスアプリケヌション向け。

最新のアプリケヌションずは䜕ですか?

最新のアプリケヌション? モダンスタック? 「モダン」ずは䞀䜓䜕を意味するのでしょうか

ほずんどの開発者は、最新のアプリケヌションが䜕で構成されおいるかに぀いお䞀般的な抂念しか持っおいないため、この抂念を明確に定矩する必芁がありたす。

最新のアプリケヌションは、React JavaScript ラむブラリを䜿甚したナヌザヌ むンタヌフェむス、Android たたは iOS 甚のモバむル アプリケヌション、API を䜿甚しお別のアプリケヌションに接続するアプリケヌションなど、耇数のクラむアントをサポヌトしたす。 最新のアプリケヌションは、デヌタやサヌビスを提䟛するクラむアントの数が無制限であるこずを意味したす。

最新のアプリケヌションは、芁求されたデヌタずサヌビスにアクセスするための API を提䟛したす。 API は䞍倉か぀定数である必芁があり、特定のクラむアントからの特定のリク゚ストのために特別に蚘述されおはなりたせん。 API は HTTP(S) 経由で䜿甚でき、GUI たたは CLI で䜿甚できるすべおの機胜ぞのアクセスを提䟛したす。

デヌタは、JSON などの䞀般的に受け入れられおいる盞互運甚可胜な圢匏で利甚できる必芁がありたす。 API は、RESTful API や GraphQL が適切なむンタヌフェむスを提䟛するように、クリヌンで組織化された方法でオブゞェクトずサヌビスを公開したす。

モダン アプリケヌションはモダン スタック䞊に構築され、モダン スタックはそのようなアプリケヌションをサポヌトするスタックです。 このスタックを䜿甚するず、開発者は HTTP むンタヌフェむスず明確な API ゚ンドポむントを備えたアプリケヌションを簡単に䜜成できたす。 遞択したアプロヌチにより、アプリケヌションは JSON 圢匏でデヌタを簡単に送受信できるようになりたす。 蚀い換えれば、最新のスタックは、次の XNUMX 芁玠アプリケヌションの芁玠に察応したす。 マむクロサヌビス.

このタむプのスタックの䞀般的なバヌゞョンは、以䞋に基づいおいたす。 Java, Python , Node, ルビヌ, PHP О Go。 マむクロサヌビスアヌキテクチャ nginxの は、前述の各蚀語で実装された最新のスタックの䟋を衚しおいたす。

私たちはマむクロサヌビスのみのアプロヌチを掚奚しおいるわけではないこずに泚意しおください。 皆さんの倚くは、進化が必芁なモノリスを扱っおいる䞀方で、マむクロサヌビス アプリケヌションに向けお拡匵および進化しおいる SOA アプリケヌションを扱っおいる人もいたす。 さらに、サヌバヌレス アプリケヌションに移行しおいるものや、䞊蚘の組み合わせを実装しおいるものもありたす。 この蚘事で抂説されおいる原則は、いく぀かの小さな倉曎を加えるだけで、これらの各システムに適甚されたす。

原則

モダン アプリケヌションずモダン スタックが䜕であるかに぀いお共通の理解が埗られたので、次はモダン アプリケヌションの開発、実装、保守に圹立぀アヌキテクチャず開発原則に぀いお詳しく芋おいきたしょう。

原則の XNUMX ぀は「小さなアプリケヌションを䜜成する」ように聞こえたすが、そう呌んでおきたしょう。 小ささの原理。 倚くの可動郚分で構成される非垞に耇雑なアプリケヌションがありたす。 さらに、小さな個別のコンポヌネントからアプリケヌションを構築するず、アプリケヌション党䜓の蚭蚈、保守、操䜜が容易になりたす。 (「シンプルにする」ではなく「単玔化する」ず蚀ったこずに泚意しおください)。

XNUMX 番目の原則は、開発者が実装䞭のむンフラストラクチャや CI/CD の懞念から解攟されながら、開発䞭の機胜に集䞭できるように支揎するこずで開発者の生産性を向䞊させるこずができるずいうこずです。 ぀たり、私たちのアプロヌチを䞀蚀で蚀えば、 開発者に焊点を圓おた.

最埌に、アプリケヌションに関するすべおをネットワヌクに接続する必芁がありたす。 過去 20 幎間にわたり、ネットワヌクが高速化し、アプリケヌションがより耇雑になるに぀れお、私たちはネットワヌク化された未来に向けお倧きな進歩を遂げおきたした。 すでに説明したように、最新のアプリケヌションは、倚くの異なるクラむアントによっおネットワヌク経由で䜿甚される必芁がありたす。 ネットワヌク思考を建築に適甚するず、次のような倧きな利点がありたす。 小ささの原理 そしおアプロヌチのコンセプトは、 開発者指向.

アプリケヌションを蚭蚈および実装するずきにこれらの原則を念頭に眮くず、補品の開発ず提䟛においお玛れもない利点が埗られたす。

これら XNUMX ぀の原則をさらに詳しく芋おみたしょう。

小ささの原理

人間の脳は、同時に倧量の情報を認識するこずが困難です。 心理孊では、認知負荷ずいう甚語は、情報を蚘憶に保持するために必芁な粟神的努力の総量を指したす。 開発者の認知的負荷を軜枛するこずは、アプリケヌション党䜓の珟圚の耇雑なモデルや開発䞭の機胜を頭の䞭に留めおおくのではなく、問題の解決に集䞭できるため、優先事項です。

NGINX から最新のアプリケヌションを開発するための原則。 パヌト1

アプリケヌションは次の理由で分解したす。

  • 開発者の認知的負荷の軜枛。
  • テストの加速ず簡玠化。
  • アプリケヌションの倉曎を迅速に配信したす。


開発者の認知的負荷を軜枛する方法はいく぀かありたすが、ここで小芏暡の原則が圹に立ちたす。

そこで、認知的負荷を軜枛するための XNUMX ぀の方法を玹介したす。

  1. 新しい機胜を開発する際に考慮しなければならない期間を短瞮したす。期間が短いほど、認知的負荷は䜎くなりたす。
  2. XNUMX 回限りの䜜業が実行されるコヌドの量を削枛したす。぀たり、コヌドが枛り、負荷が枛りたす。
  3. アプリケヌションに増分倉曎を加えるプロセスを簡玠化したす。

開発期間の短瞮

方法論が確立されおいた時代に戻りたしょう。 waterfall が開発プロセスの暙準であり、アプリケヌションの開発たたは曎新にかかる期間は XNUMX か月から XNUMX 幎が䞀般的でした。 通垞、゚ンゞニアはたず補品芁件 (PRD)、システム参照文曞 (SRD)、アヌキテクチャ蚈画などの関連ドキュメントを読み、これらすべおを XNUMX ぀の認知モデルに統合し、それに埓っおコヌドを䜜成したす。 芁件、぀たりアヌキテクチャが倉化したため、認知モデルの曎新に぀いおチヌム党䜓に垞に知らせるために倚倧な努力が必芁でした。 最悪の堎合、このアプロヌチでは単に仕事が麻痺しおしたう可胜性がありたす。

アプリケヌション開発プロセスにおける最倧の倉化は、アゞャむル手法の導入でした。 この方法論の䞻な特城の XNUMX ぀は、 agile 反埩的な開発です。 これはひいおぱンゞニアの認知的負荷の軜枛に぀ながりたす。 開発チヌムにアプリケヌションを XNUMX ぀の長いサむクルで実装するよう芁求するのではなく、 agile このアプロヌチを䜿甚するず、フィヌドバックを受け取りながら、迅速にテストしおデプロむできる少量のコヌドに集䞭できたす。 アプリの認知負荷は XNUMX か月から XNUMX 幎に移行し、倧芏暡なアプリに察するより曖昧な理解をタヌゲットずした XNUMX 週間の远加たたは機胜倉曎のための膚倧な仕様が必芁になりたした。

倧芏暡なアプリケヌションから、次のスプリントたでに XNUMX ぀の機胜のみを念頭に眮き、XNUMX 週間のスプリントで完了できる特定の小さな機胜に焊点を移すこずは、倧きな倉化です。 これにより、垞に倉動する認知負荷を軜枛しながら、開発の生産性を向䞊させるこずができたした。

方法論においお agile 最終的なアプリケヌションは、元のコンセプトをわずかに修正したバヌゞョンになるこずが予想されるため、開発の終点は必然的に曖昧になりたす。 明確で正確なのは、特定の各スプリントの結果のみです。

小さなコヌドベヌス

認知的負荷を軜枛するための次のステップは、コヌドベヌスを枛らすこずです。 䞀般に、最新のアプリケヌションは倧芏暡です。堅牢な゚ンタヌプラむズ アプリケヌションは、数千のファむルず数十䞇行のコヌドで構成される堎合がありたす。 ファむルの線成方法によっおは、コヌドずファむル間のリンクや䟝存関係が明らかになる堎合もあれば、その逆の堎合もありたす。 䜿甚するラむブラリや、デバッグ ツヌルがラむブラリ/パッケヌゞ/モゞュヌルずカスタム コヌドをどの皋床区別できるかによっおは、コヌドの実行自䜓のデバッグでも問題が発生する可胜性がありたす。

アプリケヌションのコヌドの実甚的なメンタル モデルの構築には膚倧な時間がかかり、開発者に再び倧きな認知的負担がかかるこずになりたす。 これは、倧量のコヌドがあり、その機胜コンポヌネント間の盞互䜜甚が明確に定矩されおおらず、機胜境界が尊重されないために泚目オブゞェクトの分離が曖昧になるこずが倚い、モノリシック コヌド ベヌスに特に圓おはたりたす。

゚ンゞニアの認知的負荷を軜枛する効果的な方法の XNUMX ぀は、マむクロサヌビス アヌキテクチャに移行するこずです。 マむクロサヌビス アプロヌチでは、各サヌビスは XNUMX ぀の機胜セットに焊点を圓おたす。 䞀方、サヌビスの意味は通垞定矩されおおり、理解可胜です。 サヌビスの境界も明確です。サヌビスずの通信は API を介しお行われるため、あるサヌビスで生成されたデヌタを別のサヌビスに簡単に枡すこずができるこずに泚意しおください。

他のサヌビスずの察話は、通垞、REST の䜿甚など、シンプルでクリヌンな API 呌び出しを䜿甚する少数のナヌザヌ サヌビスず少数のプロバむダヌ サヌビスに限定されたす。 これは、゚ンゞニアの認知的負荷が倧幅に軜枛されるこずを意味したす。 最倧の課題は、サヌビス盞互䜜甚モデルず、耇数のサヌビス間でトランザクションなどがどのように発生するかを理解するこずです。 その結果、マむクロサヌビスを䜿甚するず、コヌドの量が枛り、明確なサヌビス境界が定矩され、ナヌザヌずプロバむダヌの間の関係が理解できるようになるため、認知的負荷が軜枛されたす。

小さな段階的な倉曎

原則の最埌の芁玠 小ささ 倉曎管理です。 開発者にずっおは、コヌド ベヌス (おそらく自分自身の叀いコヌドであっおも) を芋お、「これはク゜だ、すべお曞き盎す必芁がある」ず蚀いたくなるのが特に誘惑です。 これが正しい決定である堎合もあれば、そうでない堎合もありたす。 開発チヌムにはグロヌバルなモデル倉曎の負担がかかり、それが膚倧な認知負荷に぀ながりたす。 ゚ンゞニアは、必芁な機胜を段階的にではあるがタむムリヌに展開できるように、スプリント䞭に加えられる倉曎に集䞭するこずをお勧めしたす。 最終補品は事前に蚈画されたものず䌌おいたすが、クラむアントのニヌズに合わせおいく぀かの修正ずテストが行​​われたす。

コヌドの倧郚分を曞き盎す堎合、他のシステムの䟝存関係が圱響するため、倉曎を迅速に提䟛できない堎合がありたす。 倉曎の流れを制埡するために、機胜の非衚瀺を䜿甚できたす。 原則ずしお、これは、機胜が実皌働環境にあるものの、環境倉数蚭定 (env-var) やその他の構成メカニズムを䜿甚しお䜿甚できないこずを意味したす。 コヌドがすべおの品質管理プロセスを通過した堎合、そのコヌドは朜圚的な状態で本番環境に導入される可胜性がありたす。 ただし、この戊略は、機胜が最終的に有効になった堎合にのみ機胜したす。 そうしないず、コヌドが乱雑になり、開発者が生産性を高めるために察凊しなければならない認知的負荷が増えるだけです。 倉曎管理ず段階的な倉曎自䜓は、開発者の認知負荷を手頃なレベルに保぀のに圹立ちたす。

単玔な远加機胜の導入であっおも、゚ンゞニアは倚くの困難を乗り越えなければなりたせん。 管理偎ずしおは、チヌムの䞍必芁な負担を軜枛しお、重芁な機胜芁玠に集䞭できるようにするこずが賢明です。 開発チヌムを支揎するためにできるこずは XNUMX ぀ありたす。

  1. 方法論を䜿甚する agileチヌムが䞻芁な機胜に集䞭しなければならない時間枠を制限するためです。
  2. アプリケヌションを耇数のマむクロサヌビスずしお実装したす。 これにより、実装できる機胜の数が制限され、認知負荷を維持する境界が匷化されたす。
  3. 倧芏暡で扱いにくい倉曎よりも段階的な倉曎を優先し、小さなコヌドを倉曎したす。 远加盎埌に衚瀺されない堎合でも、機胜の非衚瀺を䜿甚しお倉曎を実装したす。

仕事に小芏暡の原則を適甚するず、チヌムはより幞せになり、必芁な機胜の実装に集䞭し、質的な倉曎をより迅速に展開できる可胜性が高くなりたす。 しかし、これは䜜業がより耇雑にならないずいう意味ではありたせん。逆に、新しい機胜の導入にはいく぀かのサヌビスの倉曎が必芁になる堎合があり、このプロセスはモノリシック アヌキテクチャでの同様のプロセスよりも困難になる可胜性がありたす。 いずれにせよ、小型化アプロヌチを採甚するこずの利点にはそれだけの䟡倀がありたす。

最初の郚分の終わり

間もなく、翻蚳の第 XNUMX 郚を公開する予定です。皆様からのコメントをお埅ちしおいたす。 オヌプンデヌ、今日の20.00時に開催されたす。

出所 habr.com

コメントを远加したす