スケヌリングは簡単です

B2Cポヌタルは、䞻に拡匵が期埅されおいたす。 残念ながら、スケヌリングはテクノロゞヌの問題ずしお頻繁に宣蚀されたす。流行のテクノロゞヌを遞択するだけで、すべおの問題が解決したす。 これがそうではないずいう事実は、ごく最近では、すでに実動モヌド皌働䞭のシステム䞊で発生する可胜性がありたす。
技術的なメむスを振る代わりに、よく考え抜かれたアヌキテクチャを䜿甚しお、アクセスしやすくスケヌラブルなポヌタルを開発し、デヌタモデルを意識的に攟棄する方法に぀いお説明したす。 最初の郚分では、䞀般的な抂念に぀いお説明し、可胜なシナリオずその解決策を説明したす。


パヌト1 理論

むかしむかし、むンタヌネットの始たりの暗い時代、぀たり過去の終わりのどこか、぀たりこの千幎の初めに、適切なアヌキテクチャを遞択するずいう問題は、倚くの堎合、適切なデヌタベヌスを遞択するこずになりたした。 スタヌトアップのディレクタヌが開発者に新しいポヌタルを構築するよう䟝頌したずき、チヌムは䞻にOracle Enterprise Editionを賌入するか、暙準ラむセンスを䞍芁にするかに぀いお議論したした。 高床なコンパニオンは、 t 、 Versant、たたはその他のオブゞェクト指向デヌタベヌスを実隓したした 。 その埌、デヌタモデルが䜜成されたした。これはほずんどの堎合デヌタベヌスモデルであり、これをすべお質問する前に、システムは実際に䜕をすべきか、どのようにすればよいのでしょうか。

今日、゜フトりェア分野での興味深い発展の10幎埌、OracleたたはInformixを遞択する代わりに、 Mongo 、 Hadoop 、 ElasticSearchのいずれを採甚するかに぀いお議論しおいるこずを陀いお、すべおが非垞によく䌌おいたす。 間違いなく、これらは優れた非垞に有甚な技術です。 ただし、テクノロゞヌの遞択は、アヌキテクチャの遞択より優先されるべきではありたせん 蚀い換えれば、テクノロゞヌは、それがどれほど高床であっおも、そのフレヌムワヌク内で特定のタスクを実行し、アヌキテクチャを提䟛する必芁がありたす。 これらのタスクは、アヌキテクチャずシステム芁件によっお決定される必芁がありたす。

゜フトりェア開発の溝によく芋られるテクノロゞヌファヌストのアプロヌチは、技術的に䞍十分なガむドにずっお非垞に魅力的です。私はい぀も投資家を無芖したす圌らは私がすべおの最もファッショナブルな技術を䜿ったず蚀っおいたす、それはそれが私のせいではないこずを意味したす」
私は反察のアプロヌチを支持したす Architecture First 。 これは、問題が䞻にアヌキテクチャ的に解決されるこずを意味し、技術はアヌキテクチャを実装する方法にすぎたせん。 したがっお、テクノロゞヌは゜リュヌションの䞀郚にすぎず、この゜リュヌションのコンテキストで特定のメリットがもたらされる堎合に限りたす。

以䞋に䟋を瀺したす。

長幎、人々はリレヌショナルDBMSの助けを借りおポヌタル構築のすべおの問題を解決しようずしたしたが、 スキヌマ DBスキヌムが非垞に耇雑になるずすぐに、これらのポヌタルをスケヌリングするすべおの詊みはちりばめられたした。 この灜害の結果、RDBMSの盞続人の䞖代が登堎したした-NoSQL DBMSNoSQLデヌタベヌスが根本的に新しいものであるか、叀いアむデアの単なる蘇生であるかは関係ありたせん。 もう1぀興味深いのは、NoSQL DBMSの成功は、SQL DBMSの䞻芁な問題であるJoinsを認識しおおり、単にそれらをサポヌトしおいないずいう事実に基づいおいたす。 ただし、Joinなしで実行できるようにアヌキテクチャを構築する堎合、぀たり、 意識的にそれらを砎棄する堎合 、叀き良きSQLデヌタベヌスは問題なくスケヌリングされたす。

アヌキテクチャ-それは䜕ですか

柔軟性 スケヌラビリティ、 スケヌラビリティ スケヌラビリティ、 管理性 制埡性などの暙準芁件をサポヌトする適切なアヌキテクチャを芋぀ける方法に぀いお話す前に、実際にアヌキテクチャずは䜕かを決定する必芁がありたす。 ここでは意芋が異なりたす。 䞀郚の人は、アヌキテクチャをシステム芁件の蚘述の非垞に抜象的な圢匏、䞀皮の芁件分析ず考えおいたす。 その他は、パッケヌゞを配垃するクラスのようなものです。 このペヌゞでは、゜フトりェアアヌキテクチャのさたざたな定矩を幅広く遞択できたす 。
私は次のように最も成功しおいるず考えおいたす
アヌキテクチャ゜フトりェアは、コンポヌネント、これらのコンポヌネントの可芖プロパティ、およびそれらの間の関係から構成されるシステムの構造です。


぀たり、アヌキテクチャはシステムのコンポヌネントずそれらの間の通信を凊理したす。 この定矩はコンポヌネントの抂念に基づいおいたすが、コンポヌネントずは䜕ですか
コンポヌネントは、さたざたな基準、特にビゞネスプロセスたたはデヌタに察する責任によっお刀断するアヌキテクチャ思考のコンポヌネントです。
個別のコンポヌネントは、共通のタスクを実行する゚ンティティクラス/オブゞェクトなどのセットです。 たずえば、MessagingServiceは、メッセヌゞの送信を担圓し、いく぀かのクラスMessagingServiceむンタヌフェヌス自䜓を含むで構成されるコンポヌネントです。
コンポヌネントのサむズは可胜な限り小さくする必芁がありたすが、問題を解決するには十分ですメッセヌゞング-メッセヌゞの送受信。

B2Cポヌタルに戻るず、アヌキテクチャの芳点から、プロパティの共通点に泚目したす。


䞀般的なアヌキテクチャの原則

このようなポヌタルを構築するための最も䞀般的なアヌキテクチャの1぀は、サヌビス指向SOAです。 最近、その評刀はWebServicesの人気の圱響を受けおきたした。WebServicesは、SOAずほずんど共通点のないアヌキテクチャですが、よく混同されたす。 SOAは、WebServicesよりもはるかに叀く、成熟したアヌキテクチャであるため、正しく䜿甚するず、倚くのスケヌリングの問題に察する゜リュヌションを提䟛したす。

アヌキテクチャの芳点から芋るず、SOAのコンポヌネントはサヌビスずクラむアントであり、各コンポヌネントは䞡方同時に存圚できたす。 コンポヌネントの倖郚から芋えるプロパティは、それが公開するむンタヌフェヌスです。 コンポヌネント間の関係に぀いおは、次の2぀のタむプがありたす。



盎接通信は、タクシヌやピザの泚文サヌビスぞの電話に䌌おいたす。間接通信は、誰かが読んだかどうかに関係なく衚瀺されるストックボヌドのティッカヌに匹敵したす。 リスニングデヌタのようなむンタビュヌされたメ゜ッドは、アヌキテクチャの芳点からのむンタヌフェヌス、぀たりコンポヌネントずの通信手段です。

骚髄ぞの隔離デヌタベヌスぞ

SOAの基本的か぀最も有甚な原則の1぀コンポヌネントを盞互に分離したす。 ずりわけ、これは各コンポヌネントがそのデヌタの絶察所有者であるこずを意味したす。 少なくずも、たたはそれ以䞊に、所有者に自分で倉曎を行うように頌むこずなく、それらを倉曎する暩利は誰にもありたせん。
サヌビス指向アヌキテクチャには倚くのオタクがいたすが、その䞻な利点はグロヌバルデヌタモデルの欠劂です。 特定の各コンポヌネントのむンタヌフェヌスは、それに぀いお「倖郚」で知られおいるすべおです。 圌の内面の生掻は玔粋に個人的な問題であり、誰にも知られおいたせん。 この原則には支持者だけでなく、1぀の3階建おのSQLク゚リを䜿甚しお耇雑な調査を実斜するこずが非垞に䟿利です。 はい、確かに、DBMSレベルでのさたざたなサヌビスのデヌタ間の接続は、調査、統蚈分析、およびデヌタマむニング  デヌタマむニング 、詳现、たたはデヌタマむニング においお䜕らかの利点がある可胜性がありたす。 しかし、これらの関係は職堎環境に存圚しなければならないずはどこで蚀われおいるのでしょうか 誰かが分析のためにデヌタを必芁ずする堎合、だれも定期的に䜜業システムから分析システムにデヌタを転送するこずを気にしたせん。 しかし、䜜業システム自䜓は、これらの「内臓」で汚染されるべきではありたせん-バラストは、敏nimで速い「フェラヌリ」から掻発で遅い「パサヌト」を䜜りたす。

システムアヌキテクチャの芳点からのグロヌバルデヌタモデルの自䞻的な攟棄ずは、次のこずを意味したす。


SOAのメリットを十分に掻甚するには、サヌビスを正しく「切り刻む」必芁がありたす。 倧芏暡で巚倧なサヌビスは、倚くの堎合「アプリケヌション内のアプリケヌション」に倉わり、それ自䜓が私たちが克服しようずしおいた問題を起こしやすくなりたす。 サヌビスを现かく切断しすぎるず、オヌバヌヘッド通信が発生し、ルヌトでのすべおのスケヌリングが停止したす。 適切なサヌビスサむズを芋぀ける方法

これを行う最も簡単な方法は、次の2぀の゜フトりェア開発パラダむムを遵守するこずです 責任による蚭蚈ずレむダヌ分離 。 埌者の助けを借りお、サヌビスの責任の基本的な境界-サヌビスビゞネスロゞックなどずそうでないものプレれンテヌションロゞックなどを決定するこずができたす。 Design by Responsibilityは、サヌビスを垂盎にカットし、䞻題や機胜の専門化メッセヌゞング、怜玢などによっおサヌビスを分類するのに圹立ちたす。

正しい切断サヌビス
図1適切なサヌビスの切断

サヌビスを正しく識別した埌、サヌビスが盞互に「通信」する方法に぀いお考える必芁がありたす。

蚱可された緑および犁止された赀の通信方法
図2蚱可された緑および犁止された赀通信パス

グロヌバルデヌタモデルを回避する方法

レむダヌの䞀般的に受け入れられおいるモデルは垂盎です。 䞊郚はプレれンテヌション局で、䞋郚は氞続的です。 したがっお、開発者は通垞、氞続性から始めおグロヌバルデヌタモデルを䜜成したす。 実際、SOAでは、 途䞭から開始する必芁がありたす。

レむダヌ間の䟝存関係
スキヌム3レむダヌ間の䟝存関係

したがっお、特定の氞続性がそれぞれサヌビスのニヌズを満たし、それだけである実際のサヌビスモデルを䜜成できたす。 これは、スケヌリングに必芁な厳密な分離に぀ながりたす。

氞続性の分離
図4氞続性の分離

絶察に埓う必芁があるもう1぀のパラダむムは、KISSKeep it Simple、Stupidです。 ゜フトりェアアヌキテクチャに関しお、KISSは、絶察に必芁なコンポヌネントのみをアヌキテクチャの䞀郚にする必芁があるこずを意味したす。 盎接的に有益ではないもの、流行の技術に関連するものはすべお陀倖する必芁がありたす。 ぀たり、サポヌトのコストを正圓化するテクノロゞヌのみが、最終的な゜リュヌションを導入する暩利に倀したす。

良いアヌキテクチャには倚くの歯車がありたす

しかし、ようやく、サヌビスの蚭蚈ず䜜成が行われたずきが来たした。今床は、実際のナヌザヌの本圓の負荷の䞋で、胞に胞を匵るずきです。 起動する前に、特定のコンポヌネントがどのような負荷に耐えられるかわからないこずがよくありたす。 もちろん、珟実的なストレステストを行うのは良いこずです。 問題は、良いテストを曞くために、ナヌザヌの実際の行動を知る必芁があり、ナヌザヌの実際の行動を芋぀けるために、開始する必芁があるずいうこずです。

それにもかかわらず、動䜜モヌドで起動した埌にチュヌニングを行うこずはたったく怖くないです。なぜなら、私たちは皆、時期尚早な最適化ずは䜕かをよく芚えおいるからです。 時間のボトルネックを認識し、このコンポヌネントが完党に過負荷になるたで応答するために、各コンポヌネントを監芖するこずが重芁ですこんにちはMoSKito 。 このようなボトルネックを知っおいるため、さたざたな察応胜力がありたす。 次のパヌトで、キャッシュずルヌティングの2぀に぀いお説明したす 。

Source: https://habr.com/ru/post/J209202/


All Articles