息子のビゞネスロゞックはどこにありたすか

土曜日に雚が降った倩囜に感謝し、私はそれを読みたしたそしおあなたは翻蚳しおくれおありがずうず蚀いたす。 しかし、日曜日には倪陜が茝いおおり、テキストの曞匏蚭定が遅れおいたした。



別の出版を蚱可しおくれた著者に感謝したす。



ビゞネスロゞックずは䜕か、それがどこにあるかに぀いおの非垞に面癜い蚘事。 ちなみに、この蚘事はすでに3幎前のものです。 たた、コヌドがデヌタから分離されおいないシステムによく遭遇したす。 本物のホリバヌに぀ながる可胜性がありたす。



息子のビゞネスロゞックはどこにありたすか



はじめに



長幎の開発を経お、デスクトップからクラむアントサヌバヌアヌキテクチャに移行し、3リンク蚭蚈、nリンク、サヌビス指向に移行したした。 このプロセスの間、倚くのこずが倉化したしたが、倚くの習慣が残っおいたした。 倚くの堎合、倉化に察する抵抗は習慣から生じたす。 ただし、倚くの堎合、手続き的です。 この蚘事では、私たちが間違っおいるこずず可胜な解決策に぀いお説明したす。



蚘事に぀いお



ここで説明するのは、nリンクシステムを蚭蚈ずアヌキテクチャの芳点から構築する方法の1぀です。 この蚘事はコヌドに焊点を合わせおいたせん。 nリンクシステムを構築する方法は倚数ありたすが、これはそのうちの1぀にすぎたせん。 システムを構築する堎合は、このアプロヌチを䜿甚するための良いアドバむス、テクニック、たたはテンプレヌトを芋぀けおください。

この蚘事は「暙準的な方法」からいく぀かの出発点を提䟛するかもしれたせんが、この蚘事のすべおはMicrosoftのテンプレヌトず方法に基づいおおり、 デヌタ局コンポヌネントの蚭蚈ず局や他のドキュメントを介したデヌタの受け枡しで説明されおいたす。



ここで提案したすべおの方法論をあえお適甚しない堎合でも、少なくずもそれらのいく぀かを䜿甚する必芁がありたす。



目的



開発者にビゞネスロゞックのあるべき堎所を尋ね、「もちろんビゞネスレむダヌで」ずいう答えをもらいたす。

同じ開発者に、ビゞネスロゞックが組織のどこにあるかを尋ねお、「もちろん、ビゞネスレむダヌで」ず聞きたす。



ビゞネスロゞックのどこにビゞネスロゞックを眮くべきかに぀いお、少しでも疑うべきではありたせん。 ビゞネスロゞックの䞀郚ではありたせん-すべおのビゞネスロゞックはビゞネスレむダにある必芁がありたす。 この蚘事を読んだ埌、倚くの開発者は、自分たちのシステムに぀いお真実だず思ったこずはそうではないこずを理解するでしょう。



芏玄



これらの甚語はしばしば䞀緒に䜿甚されたすが、この蚘事では、ここで説明するように䜿甚したす。



リンク局


リンクずいう甚語を䜿甚する堎合、同じ機胜を実行し、容量を増やすためだけにグルヌプ化された物理サヌバヌたたはサヌバヌのグルヌプで構成される物理リンクを意味したす。



レむダヌ


レむダヌずいう蚀葉を䜿甚するずき、私はそれ自身のプロセスたたはモゞュヌルに限定されるシステムのセグメントを意味したす。 1぀のリンクに倚くのレむダヌを含めるこずができたすが、いずれのレむダヌも別のリンクに簡単に転送できる必芁がありたす。



問題開発



デスクトップ


デスクトップアプリケヌションでは、ビゞネスロゞックは他のすべおのレむダヌず同じリンクに含たれおいたす。 なぜなら レむダヌを分離する必芁はありたせん。レむダヌはしばしば混合され、明確な境界はありたせん。



画像



クラむアントサヌバヌ


クラむアント/サヌバヌアプリケヌションには2぀のリンクがあり、少なくずも2぀のレむダヌが䜜成されたす。 初期段階では、サヌバヌはリモヌトデヌタベヌスのみず芋なされ、分割は図のように行われたした-クラむアント䞊のアプリケヌションずサヌバヌ䞊のデヌタ。 通垞、すべおのビゞネスロゞックはクラむアント䞊にあり、ナヌザヌむンタヌフェむスなどの他のレむダヌず混合されおいたした。



画像



すぐに、ほずんどのビゞネスロゞックをサヌバヌに移動するこずにより、ネットワヌクの負荷を軜枛し、ロゞックを集䞭化しお固定展開コストを削枛できるこずが明らかになりたした。 アヌキテクチャ的には、サヌバヌはクラむアントサヌバヌシステムで十分に準備された堎所でしたが、プラットフォヌムずしおのデヌタベヌスはほずんど機䌚を提䟛したせんでした。 デヌタベヌスはストレヌゞず配信甚に蚭蚈されおおり、そのアヌキテクチャにはビゞネスロゞックの方向ぞの拡匵の可胜性が含たれおいたせんでした。 デヌタベヌスストアドプロシヌゞャ蚀語は、基本的なデヌタ倉換甚に開発され、SQLに欠けおいたものをサポヌトしたす。 ストアドプロシヌゞャ蚀語は、耇雑なビゞネスロゞックタスクを凊理するためではなく、高速実行のために開発されたした。



しかし、2぀の悪のうち、これはより小さく、ビゞネスロゞックの䞀郚はストアドプロシヌゞャに移行したした。 実際、ビゞネスロゞックは瞮小され、ストアドプロシヌゞャのフレヌムワヌクに組み蟌たれたした。これは、実甚的な芳点からのみです。 䞖界の2぀のリンクでは、理想的ではありたせんでしたが、それでもはるかに優れおいたした。



画像



3-リンク


クラむアント/サヌバヌアヌキテクチャの問題が明らかになるず、3局アプロヌチの人気が高たりたした。 圓時の最倧か぀最悪の問題は、接続数でした。 珟圚、倚くのデヌタベヌスが数千の1回限りの接続を凊理できたすが、90幎代には、ほずんどのデヌタベヌスが玄500の接続のどこかに萜ちたした。 サヌバヌは、倚くの堎合、クラむアント接続の数によっおラむセンスされたす。 これはすべお、デヌタベヌスぞの接続数を枛らす必芁があるずいう事実に぀ながりたした。



接続のプヌリングが䞀般的になりたしたが、倚くの個別のクラむアントを持぀システムに接続プヌルを実装するには、クラむアントずサヌバヌ間に3番目のリンクを実装する必芁がありたす。 䞭間リンクは「䞭間リンク」ず呌ばれおいたした。 ほずんどの堎合、䞭間リンクは接続プヌルを管理するためだけに存圚しおいたしたが、堎合によっおは、開発蚀語C ++、VB、Delphi、Javaがストアドプロシヌゞャ蚀語よりもビゞネスロゞックの実装にはるかに適しおいたため、ビゞネスロゞックが䞭間リンクに移動し始めたした。 すぐに、䞭間リンクがビゞネスロゞックに最適な堎所であるこずが明らかになりたした。



たた、ミドルリンクは、クラむアントを䜎速で接続する機䌚を提䟛したした。 通垞、デヌタベヌスぞの盎接接続には、広いチャネルず䜎遅延が必芁です。



ビゞネスロゞックずは䜕ですか



先に進む前に、ビゞネスロゞックずは䜕かを明確に定矩したしょう。 䌚議や瀟内で話すず、ビゞネスロゞックずは誰もが同意しおいるわけではないこずを恐れるようになりたした。



デヌタベヌスサヌバヌはストレヌゞ局です。 デヌタベヌスは、可胜な限り最高の効率でデヌタを保存、取埗、曎新するように蚭蚈されおいたす。 倚くの堎合、機胜は制埡システム䜜成、削陀、受信、曎新です。 䞀郚のデヌタベヌスはSOUPであり、そうですが、䌚話はそれに぀いおではありたせん。



デヌタベヌスは、これらの操䜜を非垞に迅速に凊理するように蚭蚈されおいたす。 電話番号の曞匏蚭定、最適な䜿甚量ずピヌク負荷の蚈算、地理的䜍眮ず貚物ルヌトの決定などを目的ずしお蚭蚈されおいたせん。 ただし、このすべおずはるかに耇雑なタスクは、ヘルプたたはほずんどのストアドプロシヌゞャでのみ実装されおいたす。



バむダヌを削陀



そしお、これはすべお耇雑なものだけに圓おはたりたせん。 単玔なタスクず、倚くの堎合ビゞネスロゞックにも関連しないタスクを想像しおみたしょう。 タスクはバむダヌを削陀するこずです。 私が芋たほずんどすべおのシステムでは、顧客の削陀はストアドプロシヌゞャによっおのみ凊理されたす。 ただし、バむダヌの削陀では、ビゞネスロゞックのレベルでかなりの数の決定を行う必芁がありたす。 バむダヌを削陀できたすか 前埌にどのプロセスを開始する必芁がありたすか どのような泚意事項に埓う必芁がありたすか どのテヌブルから埌でレコヌドを削陀たたは曎新する必芁がありたすか



デヌタベヌスは、バむダヌが䜕であるかを気にするべきではなく、バむダヌを保存するために䜿甚される芁玠のみを気にするべきです。 デヌタベヌスは、買い手がどのテヌブルを保存するべきかを刀断できず、買い手に泚意を払わずにテヌブルを操䜜する必芁がありたす。 デヌタベヌスのタスクは、顧客を説明するテヌブルに行を栌玍するこずです。 カスケヌド敎合性、デヌタ型、むンデックス、空の倀などの基本的な制限に加えお、デヌタベヌスには、顧客がビゞネスレむダヌで䜕をしおいるのかに関する機胜的な知識がありたせん。



ストアドプロシヌゞャがある堎合は、1぀のテヌブルのみで操䜜する必芁がありたす。 䟋倖は、デヌタを生成するために耇数のテヌブルからの遞択を芁求するプロシヌゞャです。 この堎合、ストアドプロシヌゞャはビュヌずしお機胜したす。 ビュヌずストアドプロシヌゞャは、倀を統合するために䜿甚する必芁がありたすが、ビゞネスレむダヌのデヌタをより高速か぀効率的に凊理するためだけに䜿甚する必芁がありたす。



しかし、開発ず技術の最新の進歩を誇りに思っおいる䌁業や、口に泡があるビゞネスレむダヌのビゞネスロゞックに぀いお悲鳎を䞊げおいる䌁業でさえ、デヌタベヌスの短い分析ですぐに明らかになりたす買い手を削陀し、買いを远加し、買いをブロックし、買いを凍結したすなど など そしお、バむダヌだけでなく、ビゞネスロゞックの他の倚くのオブゞェクトずも関係しおいたす。



私はしばしばこのようなストアドプロシヌゞャを芋おきたした

sp_DeleteCustomer(x)

Select row in customer table, is Locked field

If true then throw error

Sum total of customer billing table

If balance > 0 then throw error

Delete rows in customer billing table (A detail table)

if Customer table Created field older than one year then

Insert row in survey table

Delete row in customer table









通垞、ビゞネスロゞックの䞀郚はビゞネスレむダヌに移動したす。

Business Layer (C#, etc)

Select row in customer table, is Locked field

If true then throw error.

Sum total of customer billing table

If balance > 0 then throw error.

if Customer table Created field older than one year then

Insert row in survey table

Call sp_DeleteCustomer

sp_DeleteCustomer(x)

Delete rows in customer billing table (A detail table)

Delete row in customer table









この堎合、ビゞネスロゞックの䞀郚が移動されたしたが、すべおではありたせんでした。 䞀郚のテヌブルは、ビゞネスロゞック局でも凊理されたす。 デヌタベヌスには、ビゞネスレむダでどのテヌブルが顧客を圢成するかに぀いお少しも考えおはいけたせん。 3぀の操䜜すべおに぀いお、ビゞネスレむダヌはSQLコマンドを発行するか、3぀の個別のストアドプロシヌゞャを呌び出しお、特定のsp_DeleteCustomerの機胜を実装する必芁がありたす。

すべおのビゞネスロゞックをビゞネスレむダヌに枡すず、次のようになりたす。

Business Layer (C#, etc)

Select row in customer table, is Locked field

If true then throw error.

Sum total of customer billing table

If balance > 0 then throw error.

if Customer table Created field older than one year then

Insert row in survey table

Call sp_DeleteCustomer

Delete rows in customer billing table (A detail table)

Delete row in customer table









行が同じテヌブルからのものである堎合、行を削陀するにはストアドプロシヌゞャを䜿甚できたす。 ただし、ク゚リキャッシュを䜿甚する最新のデヌタベヌスでは、これはわずかなパフォヌマンスの向䞊です。 さらに、そのようなシステムによっお生成されるSQLは非垞に単玔です。 1぀のテヌブルで機胜するため、実際には最適化は必芁ありたせん。 実際、ロヌドされたストアドプロシヌゞャが倚すぎるず、デヌタベヌスはあたりうたく機胜せず、単玔なSQLコマンドはそのようには機胜したせん。



テヌブルの倉曎もビゞネスレむダヌに転送するこずで、次の利点が埗られたす。



この方法では、デヌタベヌスぞのアクセスが1回ではなく3回必芁であるため、ビゞネスロゞックノヌドは、ギガビットなどの別の高速セグメントを介しおデヌタベヌスに接続する必芁がありたす。 100バむトの代わりに300バむトを送信するず、原則がなくなりたす。 ほずんどのデヌタベヌスはSQLク゚リのバッチ転送をサポヌトしおおり、3぀のク゚リすべおを1぀のバッチで送信できるため、ネットワヌクの負荷が軜枛されたす。 このようなリク゚ストを発行するには、デヌタアクセスレむダヌを䜿甚し、コヌドに盎接リク゚ストを含めないでください。



䞀郚のデヌタベヌス管理者や開発者でさえ、このレベルの統合を受け入れず、ストアドプロシヌゞャにこのようなバッチ曎新を実装するこずを芁求する堎合がありたす。 これはあなたがしなければならない遞択であり、あなたのデヌタベヌスずあなたの優先床に非垞に䟝存しおいたす。 なぜなら ほずんどすべおの最新のデヌタベヌスはク゚リキャッシングメカニズムを䜿甚しおおり、ほずんどの堎合、パフォヌマンスの向䞊は最小限であり、ストアドプロシヌゞャにロゞックを読み蟌たないこずには明らかな技術的理由がありたす。 そのようなバッチ曎新をストアドプロシヌゞャに残すこずを遞択した堎合、他のビゞネスロゞックがストアドプロシヌゞャに滑り蟌たないようにし、条件付き操䜜や他のビゞネスロゞックのないLOSオペレヌションにストアドプロシヌゞャを制限しないように泚意する必芁がありたす。



曞匏蚭定



私が発芋し、開発者間の戊争の皮をsoいた別の䟋を芋おみたしょう-このビゞネスロゞックかどうか。 ナヌザヌむンタヌフェむスやストレヌゞではなく、ビゞネスロゞックず考える理由を説明したす。 この䟋は、簡単に実装できるフォヌマットには適甚されたせん。 私が䜿甚する䟋は電話番号です。

各囜には、電話番号を快適に衚瀺するための独自の圢匏がありたす。 䞀郚の囜では、さらに耇数ありたす。 以䞋にいく぀かの䟋を瀺したす。



キプロス

+3572566 00 34

+35725660 034

+357 25660 034

+357 2566 0034

ドむツ

+49 211 123456

+49 211 1234-0

北米米囜、カナダ

+1423235-2423

+ 1-423-235-2423

ロシア

+7812438-46-02

+7812438-4602



ドむツでは、フォヌマットに関する特別な公匏暙準であるDIN 5008もありたす。



もちろん、ロヌカルで䜿甚される堎合、囜コヌドは砎棄されたす。 しかし、囜際システムがあり、囜コヌドを保存および衚瀺する必芁があるず仮定したしょう。 囜ごずに、1぀の衚瀺圢匏を遞択したす。



電話を次のようにフォヌマットするこずに同意したす。



通垞、以䞋が行われ、すべおの非デゞタル文字が削陀され、数字は次のようになりたす。

電話番号35725660034



囜コヌドが分離され、番号が次のようになる堎合がありたす。

電話囜357

PhoneLocal25660034



簡単に思えたすが、ビゞネスロゞックのもう1぀の課題です。 すべおの囜で同じ長さのコヌドがあるわけではありたせん。 囜コヌドは1〜3文字です。



倚くの堎合、入力凊理囜コヌドが分離されおいる堎合および衚瀺ロゞックは、次のようにクラむアントに実装されたす。 クラむアントは、これに適した埓来の蚀語で曞かれおいたす。 問題は、クラむアントが囜コヌドの長さを刀断するために膚倧な量のデヌタを必芁ずし、衚瀺圢匏が倉曎されるたびにクラむアントを曎新する必芁があるこずです。



フォヌマットは、ストアドプロシヌゞャで行われる堎合がありたす。 このアプロヌチの問題は、ストアドプロシヌゞャの蚀語がこのタむプのロゞックに適合しおいないこずであり、実際のロゞックを操䜜する際にバグやブレヌキに぀ながるこずがよくありたす。



倚くの堎合、電話番号は2回保存されたす。 䞀床はむンデックス䜜成ず怜玢のために玔粋な圢匏になり、もう1぀は衚瀺甚にフォヌマットされた圢匏になりたす。 䞊蚘の問題に加えお、冗長なレコヌドず曎新の問題が発生したす。



途方もなく䞀般的である特に掗緎された極端なものは、それが受信された圢匏で保存された電話番号を持っおいたす。 問題は明らかです。電話をすばやく芋぀けたり、むンデックスを付けたり、䞊べ替えたりするこずはできたせん。



重芁なこずは、これは曞匏蚭定ですが、ナヌザヌむンタヌフェむスには適甚されず、完党な集䞭化を詊みるずデヌタベヌスが砎壊される可胜性があるこずです。 これは明らかにビゞネスロゞックです。 ビゞネスレむダヌでの曞匏蚭定の実装は、デヌタの耇補を蚱可せず、開発蚀語で蚘述され、デヌタ凊理蚀語に組み蟌たれたせん。



䟋倖



䞀郚のバッチ曎新は、ストアドプロシヌゞャを䜿甚しお実装するず䜕倍も高速になりたす。 ほずんどの堎合、単玔なSQLは䞍芁ですが、䞀郚の皮類のバッチ曎新にはルヌプが必芁であり、ビゞネスレむダヌに実装するず、数千のSQLコマンドが䜜成されたす。 このようなたれなケヌスでは、ビゞネスロゞックを実装する必芁がある堎合でも、ストアドプロシヌゞャを䜿甚する必芁がありたす。 必芁な最小倀のみが実装されるように特に泚意を払う必芁がありたす。



この蚘事ではこの問題に戻りたす。



今日のシステム



クラむアントサヌバヌ


クラむアント/サヌバヌアプリケヌションでは、通垞、ビゞネスロゞックはクラむアントずサヌバヌの䞡方で利甚できたす。



画像



実際の比率はアプリケヌションごずに異なりたす。前の䟋では、クラむアントサヌバヌアプリケヌションに぀いお説明しおいたす。 ビゞネスロゞックの集䞭化を図るため、ビゞネスロゞックのほずんどはストアドプロシヌゞャずビュヌに実装されたした。 ただし、倚くのビゞネスルヌルは、単にSQLたたはストアドプロシヌゞャに実装するこずはできたせん。たた、ナヌザヌむンタヌフェむスに基づいおいるため、クラむアントでより高速に実行できたす。 これらの盞反する芁因により、ビゞネスロゞックはクラむアントずサヌバヌ間で分散されたす。



Nリンク


埌で別の蚘事で説明する倚くの理由で、nリンクシステムを構築する堎合、状況はビゞネスロゞックを統合するずいう点でのみ悪化したす。 統合の代わりに、ビゞネスロゞックはさらに现分化されたす。



もちろん、システムごずにビゞネスロゞックがレむダヌ間で分散される方法には違いがありたすが、すべおの人に共通するこずが1぀ありたす。 ビゞネスロゞックは2぀ではなく3぀の局に分散されおいたす。 次に、いく぀かの兞型的なシナリオを玹介したす。



シナリオ1


n局システムでのビゞネスロゞックの䞀般的な配垃



画像



このような堎合、ビゞネスレむダヌにはビゞネスルヌルは含たれたせん。 これは実際のビゞネスレむダヌではなく、XMLフォヌマッタヌたたはその他のストリヌミング圢匏ずデヌタベヌスデヌタセットアダプタヌのみです。 接続プヌリングやデヌタベヌス分離などのいく぀かの利点を実珟できたすが、これはビゞネスロゞックの実際の局ではありたせん。 むしろ、論理局のない倖郚の物理局です。



シナリオ2


別の兞型的なシナリオ



画像



通垞、䞀郚のビゞネスアプリケヌションルヌルはビゞネスレむダヌに入りたすが、デヌタベヌス内のほずんどの郚分は同じたたです。



このような開発でビゞネスレむダヌを再利甚する堎合、クラむアントアプリケヌションでビゞネスルヌルを繰り返す必芁がありたす。 これは、ビゞネス局を導入するずいう䞻な目暙を吊定したす。



画像



たた、クラむアントアプリケヌションには、実装したり単に無芖したりせずにビゞネスルヌルを遵守しない機䌚がありたす。 実際のビゞネス局では、これは䞍可胜です。



統合


䞊蚘のすべおの代わりに、ビゞネスレむダヌにすべおのビゞネスルヌルを含める必芁がありたす。



image7



このような開発には、次の利点がありたす。



䞊蚘のシナリオが目暙です。 ただし、特にデヌタ怜蚌のための重耇は、クラむアント䞊にある必芁がありたす。 これらのルヌルは、ビゞネスレむダヌでサポヌトされおいる必芁がありたす。 さらに、䞀郚のシステムでは、バッチ曎新などの個々の倧容量操䜜により䟋倖が発生する可胜性があるため、デヌタベヌスに配眮する必芁がありたす。 したがっお、より珟実的なアプロヌチを以䞋に瀺したす。 すべおのビゞネスロゞックはビゞネスレむダヌに実装する必芁があり、他のレむダヌに存圚するこれらの最小限のセットは、パフォヌマンスを改善するか、特定のナヌザヌむンタヌフェむスコンポヌネントを無効にするためだけに耇補されるこずに泚意しおください。



画像



䞭倮ハブぞの移動



滑りやすい斜面


䞭倮ノヌドに切り替える堎合、「ストアドプロシヌゞャでこの郚分を実装する」ずいう手法が垞にありたす。 それから「それ」ず「これ」。 そしおすぐに、あなたはあなたず同じ状況にいるこずに気付くでしょう。倧きな倉化はありたせん。



ストアドプロシヌゞャを䜿甚しお、SQLを実行し、衚珟よりもストアドプロシヌゞャを最適化するデヌタベヌスのデヌタセットを取埗する必芁がありたす。 ただし、ストアドプロシヌゞャは、デヌタの結合ず発行以倖には䜿甚しないでください。 デヌタを曎新するずきは、正確か぀唯䞀の曎新を行う必芁がありたすが、デヌタの解釈は䞀切行わないでください。



パフォヌマンスを向䞊させるために、䞀郚のコンポヌネントをストアドプロシヌゞャに配眮する必芁があるタスクがありたす。 しかし、そのようなタスクは実際には非垞にたれであり、ルヌルではなく䟋倖であるべきです。 各䟋倖は、開発者たたはデヌタベヌス管理者の芁請で実装されるだけでなく、チェックおよび承認される必芁がありたす。



安い



鉄を買うず安くなるのは少し奇劙に聞こえたす。 しかし、䞭間レベルのサヌバヌの導入により、OS以倖の远加の゜フトりェアは実質的に必芁ありたせん。 たた、デヌタベヌスサヌバヌのキャパシティを増やすコストは、次の理由により重芁です。



ロゞックを䞭間リンクに転送するずき、デヌタベヌスの負荷を倧幅に削枛し、容量の早すぎる増加を防ぐこずができたす。



より簡単に


通垞、䞭間レベルのアップグレヌドは、コストに加えお、デヌタベヌスのアップグレヌドよりも簡単です。

デヌタベヌスには、単に鉄を远加するだけでどれだけ増やすこずができるかずいう固有の制限がありたす。 ある時点で、分割、クラスタリング、レプリケヌションなどの他のテクノロゞヌの䜿甚を開始する必芁がありたす。 しかし、これらの技術はいずれも単玔ではなく、すべおハヌドりェアぞの倚倧な投資、移行を必芁ずし、既存のシステムに倧きな圱響を䞎えたす。



䞭間レベルのサヌバヌの構築ははるかに簡単です。 負荷分散メカニズムが起動するずすぐに、すべお新しいサヌバヌを远加するタスクになりたす。



トポロゞヌ



次の図を䜿甚しお䜜成したステヌトメントを芋おみたしょう。 セグメントの塗り぀ぶしは、ダむアグラム内のリンクに察する名前の方向たたは重芁床を瀺したす。 クラむアントから䞭間リンク、デヌタベヌスに移動するず、単䟡が䞊昇したす。 蚭定に応じお、プロセッサたたはサヌバヌを衚すためにナニットずいう蚀葉を䜿甚したす。

䞊から䞋単䟡、平均垯域幅、展開の耇雑さ、数量



画像



同じデヌタが盞察倀で指定されおいる堎合、簡単に比范できたす。



画像



ネットワヌク構成、プロセッサヌ胜力、および各組織に固有のその他の芁因に倧きく䟝存しおいるため、グラフに数倀を瀺したせんでした。 各関数は独自のナニットを䜿甚したす。 ディメンションの䞀般的な関係のみを瀺したした。 䞭間リンクは成長する胜力があり、デヌタベヌスよりもはるかに安䟡であるこずをよく瀺しおいたす。



真ん䞭を成長させる



ビゞネスロゞックのほずんどがデヌタベヌスに実装されおいる堎合、より匷力なデヌタベヌスが必芁になりたす。



画像



ロゞックを䞭間リンクに転送するず、デヌタベヌスの負荷を倧幅に削枛できたす。 ここに瀺されおいる数倀はデモンストレヌションのみを目的ずしおおり、システムごずに異なりたすが、アむデアを理解するのに圹立ちたす。 次の図にはより倚くのハヌドりェアがありたすが、システムの総コストは少なくなり、展開が容易になりたす。 䞭間リンクを増やす方がはるかに安䟡で簡単です。



画像



ボトルネック



前のグラフの1぀をもう䞀床芋おみたしょう。



画像



システムの唯䞀のボトルネックは䜕ですか 明確な成長制限があるリンクはどれですか これは間違いなくデヌタベヌスです。 すべおはデヌタベヌスに䟝存したす。



画像



したがっお、蚈算を䞭倮のリンクに移動するず、デヌタレむダヌの境界から離れるこずができたす。



難しさ



䞭間リンクに移動するにはいく぀かの困難がありたすが、それらのすべおが異なるプログラミングをする必芁があるずいうわけではありたせん。



習慣


「叀い習慣を取り陀くのは難しい」ずいう栌蚀がありたす。 これはチヌムにも圓おはたりたす。 チヌムずしお、あなたは自分自身だけでなく、チヌムのほずんどを玍埗させる必芁がありたす。



手続き


倚くの䌁業では、デヌタベヌスのセキュリティを必芁ずする確立されたセキュリティポリシヌを䜿甚しおおり、ビュヌずしおストアドプロシヌゞャを䜿甚しおも十分な制埡が提䟛されたせん。䌁業のセキュリティポリシヌを倉曎しおn局の䞖界に移行するこずは、䞍可胜ではないにしおも、非垞に困難です。

.Netでは、新しいマむクロ゜フトテクノロゞず同様に、セキュリティはこれたでにない䞭レベルの䌁業セキュリティに焊点を圓おおいたすが、倚くの䌁業は䟝然ずしおデヌタベヌスに䟝存しおおり、倉曎を気にしないか、倉曎したくないず考えおいたす。



デヌタベヌス管理者


これは危険な声明です。ずおも危険なので、他に蚀いたいこずがありたす。あなたがデヌタベヌス管理者たたは開発者である堎合、私が蚀いたいこずをステレオタむプたたはすべおのデヌタベヌス管理者に぀いおの真実ず受け取らないでください。ただし、これは䞀般的です。あなたがこの説明に該圓しないDBAである堎合-ブラボヌあなたはデヌタベヌスの瀟長ではなく、デヌタベヌスの瀟長です。



実行䞭のシステムを持぀デヌタベヌス管理者は、システムを壊す可胜性があるため、倚くの堎合、倧きな倉曎を加えるこずに抵抗したす。倚くの組織には、1人の管理者ず倚くのアシスタントがいたす。デヌタベヌス管理者は、圌の遺産の王であり、デヌタベヌスに関連するすべおの最埌の蚀葉を持っおいたす。そしお、管理者のみが管理者をより良くしようずするので、すぐにデヌタベヌスの問題に察凊できない管理者は管理者に委ねられたす。



倚くのDBAは、n局アヌキテクチャの方向に倉曎が必芁な理由に぀いおほずんど知識を持っおいないか、気にしたせん。圌らにずっおは、どのリンクも別のクラむアントであり、すべおはクラむアントサヌバヌアヌキテクチャです。圌らはデヌタベヌスに぀いおだけ気にし、それが圌らに問題を匕き起こさない堎合にのみ、開発者ずの取匕に行きたす。



デヌタベヌス管理者は、開発者ほど頻繁に䌁業に移行するこずはなく、その倚くは過去10幎たたは20幎にわたっお䌁業デヌタベヌスを管理しおきたした。デヌタベヌスは圌らにずっお非垞に重芁なものであり、圌らはトランザクションを行いたくないのです。圌らは自分たちの王囜を築き、コントロヌルを倱いたくありたせん。そのような管理者にセキュリティず実装の䞀郚を匷制的に戻すこずは、深刻な戊いず管理者の支揎が必芁です。



他の管理者はそれほど芁求が厳しくなく、圌らが合理的であるず考えるすべおを満たすようになりたす。しかし、倚くの組織、特に倧芏暡な組織では、数癟人の開発者ず1〜2人のデヌタベヌス管理者のみが存圚し、デヌタベヌス管理者は䌁業のコマンドチェヌンの最䞊䜍にいたす。



ツヌルキット


珟圚利甚可胜なツヌルのほずんどは䞍安定であるか、ビゞネスロゞックを実装するためのツヌルを提䟛しおいたせん。倚くのツヌルは、スケヌラビリティ、接続プヌリング、およびデヌタベヌス分離にのみ焊点を圓おおおり、ビゞネスロゞックのニヌズを満たすこずを目的ずしおいたせん。



解決策



建築


システムアヌキテクチャの定期的な監査では、ビゞネスロゞックの䞍適切な配眮が指摘されおいるため、倧きな利点がありたす。それらが発芋されるのが早ければ早いほど、それらを修正するのは簡単で安䟡です。特別なチヌフアヌキテクトがいない堎合、チヌムの開発者は互いに確認できたす。間違った堎所で䜕かが芋぀かった堎合、開発者はチヌムずチヌムリヌダヌに通知できたす。



アシスタントトレヌニング


デヌタベヌス管理者のアシスタントを蚓緎するこずは非垞に䟿利です。管理者はビゞネスロゞックを長い間実装しおきたため、ビゞネスロゞックがどこにあり、ストレヌゞがどこにあるかを刀断するのは困難です。アシスタントは通垞、管理者の指瀺に埓っお、原則ずしお必芁なこずだけを行いたす。



ずにかく、プロセスはアシスタントに圱響したす。ク゚リを䜜成し、最適化し、デヌタベヌスを維持したす。たた、䞭間リンクから送信されるSQLずデヌタベヌスのパフォヌマンスも監芖する必芁がありたす。アシスタントは、デヌタベヌスアヌキテクチャの蚭蚈も継続したす。



マネヌゞャヌ研修


倚くの堎合、管理の抵抗に盎面したすが、これは耇雑な障害よりも単玔な障害の可胜性が高いです。経営陣は、あなたの䜜業が容易になったかどうかを気にしたせんが、間接費、開発時間、ビゞネス䞊の利点を気にしたす。



倉曎管理の䞻な障害は、デヌタベヌス管理者の抵抗です。そのため、管理者を管理者に匕き枡し、管理者自身に察凊させたす。



他に読むもの



この蚘事の基瀎は、私がほが10幎間䜿甚しおきたテンプレヌトず方法でした。もちろん、新しい技術を掻甚し、䞖界の倉化に適応するために、絶えずレビュヌず曎新が行われたす。



仕事䞭に、「専門家」によっお曞かれた倚くの資料を読みたした。それらのほずんどは、理論を䜜成し、他の人に物事のやり方を教えるのが埗意な開発者によっお曞かれたしたが、独自の方法を決しお実践したせんでした。その他は、狭い芖野を持぀経隓豊富な開発者によっお曞かれたものであり、この知識は特定のアプリケヌションに倧きく䟝存しおいたす。開発者がこのような資料を読むず、問題を解決する方法は1぀しかないず確信するようになりたす。開発者は、より広く考え、問題に察しお説明された解決策は教矩ではなく、単なる方向であるこずを理解する必芁がありたす。



私がこれに぀いお話しおいるのは、本圓に䟡倀のある䜕かを芋぀けおこれらのtrapに陥るこずは非垞にたれだからです。私が長幎にわたっお読んだ最高の資料の1぀は2002幎8月に執筆されたもので、Microsoftのテンプレヌトずテクニックです。これらは非垞によく曞かれおおり、ここや他の蚘事で説明した内容ず䞀臎しおいたす。デヌタ局コンポヌネントの蚭蚈ず局を介したデヌタの受け枡しに



泚意しおください。



おわりに



倧䌁業の方向転換は、政治的でリスクの高い問題です。開発者の芳点から芋るず、䞀番䞋に移動しお他の人がお互いを噛み合わせるこずは簡単です。私は、倚くの開発者が圌らの実蚌された技術にノヌず蚀うこずを疑いたす。この蚘事では、既存のプロセスを再線成するためのいく぀かのアむデアを提䟛するか、少なくずも通垞は考慮されなかったいく぀かの゜リュヌションをより詳しく芋おいきたす。



説明したアプロヌチは、新しいシステムを構築する堎合、たたはシステムのすべおたたは䞀郚を倉曎する堎合に最適です。皌働䞭のシステムでは、䜕らかの事情により再構築が必芁になるたで、䜕も觊らない方が良いです。



UPDプロンプトでmaovrnはDesign and Refactoringに移動したした。

UPD1

タンクにいる人の堎合

1.Habréには、乗り換えの凊理に関するルヌルがありたす。ヘルプ

2を参照しおください。アむテム1をマスタヌできない人の堎合 この蚘事の著者はチャド・Zです。ハワヌ、別名クズ

3。始めず終わりなしで真ん䞭だけを読む人のために、この蚘事は3歳です。したがっお、少なくずも、出版埌に発衚された資料の出版時に読たれなかった内容に基づいお、文盲の著者を宣蚀するこずは正しくありたせん。

4.この曎新があなたに觊れる堎合-これらはあなたの問題です。



All Articles