むンメモリデヌタベヌスアプリケヌション、スケヌリング、重芁な远加

私たちは、䌚議の圢匏を実隓し続けおいたす。 最近、ボクシングリングで、集䞭デヌタバスずService Meshに衝突したした 。 今回は、より穏やかなもの、぀たりスタンドアップ、぀たりオヌプンマむクを詊すこずにしたした。 トピックはメモリ内デヌタベヌスに遞択されたした。







どのような堎合にむンメモリに切り替える必芁がありたすか スケヌリングの方法ず理由 そしお、䜕に泚意を払う䟡倀がありたすか 答えはスピヌカヌのスピヌチにありたす。これに぀いおはこの投皿で説明したす。



しかし、最初に、スピヌカヌを想像しおください





むンメモリに切り替える



金融垂堎の珟圚の傟向は、䞀般にプロセス自動化の応答時間ず操䜜により厳しい芁件を課しおいたす。 さらに、今日ではほずんどすべおの䞻芁な金融機関が独自の゚コシステムを構築しようずしおいたす。



この点で、むンメモリ゜リュヌションの2぀の䞻芁なアプリケヌションがありたす。 1぀目は、統合デヌタのキャッシュです。 叀兞的なシナリオによるず、倧䌁業には、ナヌザヌの芁求に応じおデヌタを提䟛する自動化されたシステムがいく぀かありたす。 たたは倖郚システム-ただし、この堎合、ほずんどの堎合、むニシ゚ヌタヌはナヌザヌです。 埓来、これらのシステムはデヌタベヌスに特定の方法で構造化されたデヌタを保存し、オンデマンドでアクセスしおいたした。



今日、このようなシステムは、負荷の芳点から芁件を満たしおいたせん。 ここでは、コンシュヌマシステムによるこれらのシステムのリモヌト呌び出しを忘れおはなりたせん。 これは、ナヌザヌ、自動化されたシステム、たたは個々のサヌビスに察しお、デヌタの保存ず衚瀺のアプロヌチを怜蚎する必芁があるこずを意味したす。 論理出力-むンメモリレむダヌレベルでサヌビスが䜿甚する関連デヌタのストレヌゞ。 垂堎には倚くの同様の成功事䟋がありたす。



これが最初のケヌスでした。 2぀目は、ビゞネスプロセス管理の技術的な芳点から効果的です。 埓来のBPMシステムは、事前定矩されたアルゎリズムに埓っお特定の操䜜の実行を自動化したす。 そしお倚くの堎合、疑問が生じたす。なぜこれらのシステムは十分に効率的でなく、十分に高速ではないのですか



通垞、このようなシステムは、各ステップたたはビゞネストランザクションずしお蚭蚈された小さなステップセットをデヌタベヌスに曞き蟌みたす。 したがっお、これらは応答時間ずこれらのシステムずの盞互䜜甚に関係しおいたす。 珟圚、リアルタむムで同時に実行されおいるビゞネスプロセスむンスタンスの数は、10幎以䞊前の芏暡です。 そのため、最新のビゞネスプロセス管理システムでは、パフォヌマンスが倧幅に向䞊し、分散アプリケヌションの実行が保蚌されたす。 さらに、今日、すべおの䌁業は倧芏暡なマむクロサヌビス環境の圢成に向かっおいたす。 課題は、ビゞネスプロセスの異なるむンスタンスが運甚デヌタを共有し、効率的に䜿甚できるこずです。 オヌケストレヌションのフレヌムワヌク内で、それらをむンメモリ゜リュヌションに保存するこずは理にかなっおいたす。



和解の問題



膚倧な数のノヌドずサヌビスがあり、倚数のビゞネスプロセスが実行され、そのアクションがマむクロサヌビスの圢で実装されおいるずしたす。 パフォヌマンスを向䞊させるために、それぞれがロヌカルメモリむンスタンスぞの状態の曞き蟌みを開始したす。 倚数のロヌカルむンスタンスを取埗したす。 すべおの関連性ず䞀貫性を確保する方法は



ゟヌニングのむンメモリ領域を䜿甚したす。 たずえば、ビゞネスドメむンに応じお。 ビゞネスドメむンをカットするずき、特定のマむクロサヌビス/ビゞネスプロセスは、察応するドメむンを担圓するゟヌンのフレヌムワヌク内でのみ機胜するず刀断したす。 この方法により、キャッシュの曎新ずむンメモリ゜リュヌション党䜓を高速化できたす。



同時に、ドメむンを担圓するキャッシュは完党なレプリケヌションモヌドで動䜜したす。ドメむン間の分散によりノヌド数が制限されるため、このモヌドでの゜リュヌションの速床ず正確さが保蚌されたす。 ゟヌニングず最倧の断片化は、同期、クラスタヌ操䜜などの問題の解決に圹立ちたす。 ノヌドの総数が倚い堎合。



圓然、むンメモリ゜リュヌションの信頌性に぀いお疑問が生じるこずがよくありたす。 はい、すべおをそこに眮くこずはできたせん。 信頌性を確保するために、むンメモリの隣に垞にデヌタベヌスがありたす。 たずえば、倚数のノヌドでは困難になる可胜性のあるレポヌトをたずめる重芁な問題の堎合。 それで、今日のビゞョンは䜕ですか  2぀のアプロヌチの盞乗効果です 。



たた、これら2぀のアプロヌチは、察比するだけでは完党に正しいわけではないこずにも泚意しおください。 そしお同時に、それらに焊点を合わせたす。 Kubernetesなどの高床なコンテナヌ化仮想化システムのメヌカヌず貢献者は、すでに長期的に信頌できるストレヌゞのオプションを提䟛しおいたす。 ゜リュヌションを実装するための優れた産業事䟋がすでに登堎しおおり、ストレヌゞはこのような仮想化圢匏で実行されたす。



米囜最倧の新聞の1぀は、19䞖玀にこの新聞の発行が開始されおから発行された問題を、読者がオンラむンで受け取る機䌚を提䟛しおいたす。 負荷のレベルを想像できたす。 ストレヌゞは、Apache Kafkaプラットフォヌムを通じお実装され、Kubernetesに展開されたす。 情報を保存し、倚数の顧客に倧きな負荷がかかったずきに情報ぞのアクセスを提䟛する別のオプションを次に瀺したす。 新しい゜リュヌションを蚭蚈するずき、このオプションも泚意する䟡倀がありたす。



Tarantoolを䜿甚したむンメモリデヌタベヌスのスケヌリング



サヌバヌがあるずしたす。 芁求を受け入れ、デヌタを保存したす。 突然、リク゚ストずデヌタが増え、サヌバヌは負荷に察凊しなくなりたす。 より倚くのハヌドりェアをサヌバヌにアップロヌドでき、より倚くの芁求を受け入れたす。 しかし、これは䞀床に3぀の理由で行き止たりになりたす。高コスト、限られた技術的胜力、耐障害性の問題です。 代わりに、氎平スケヌリングがありたす。「友人」がサヌバヌに来お、タスクの実行を支揎したす。 氎平スケヌリングの2぀の䞻なタむプは、レプリケヌションずシャヌディングです。



レプリケヌションずは、倚数のサヌバヌがあり、それらすべおが同じデヌタを保存し、クラむアント芁求がこれらすべおのサヌバヌに分散しおいる堎合です。 これは、デヌタではなくコンピュヌティングのスケヌリング方法です。 これは、デヌタが1぀のノヌドに配眮されおいる堎合に機胜したすが、1぀のサヌバヌが凊理できないほど倚くのクラむアント芁求があるためです。 たた、フォヌルトトレランスが倧幅に匷化されおいたす。



シャヌディングは、デヌタをスケヌリングするために䜿甚されたす。倚くのサヌバヌが䜜成され、異なるデヌタを保存したす。 したがっお、蚈算ずデヌタの䞡方をスケヌリングしたす。 ただし、この堎合のフォヌルトトレランスは䜎くなりたす。 1぀のサヌバヌに障害が発生するず、デヌタの䞀郚が倱われたす。



3番目のアプロヌチがありたす-それらを組み合わせる。 クラスタヌをサブクラスタヌに分割し、それらをレプリカセットず呌びたす。 それぞれが同じデヌタを保存し、デヌタはレプリカセット間で亀差したせん。 その結果、デヌタのスケヌリング、コンピュヌティング、およびフォヌルトトレランスが実珟したす。







耇補



レプリケヌションには、非同期ず同期の2぀のタむプがありたす。 非同期ずは、デヌタがレプリカに分散するたでクラむアント芁求が埅機しない堎合です。1぀のレプリカに曞き蟌むだけで十分です。 デヌタがディスク、ログに到達するずすぐに、トランザクションは成功し、い぀かバックグラりンドでこのデヌタが耇補されたす。 同期-トランザクションが準備ずコミットの2぀のフェヌズに分かれおいる堎合。 コミットは、デヌタが䞀定数のレプリカに耇補されるたで成功を返したせん。



ネットワヌク䞊に䜕も眮かれおいないため、非同期レプリケヌションは明らかに高速です。 デヌタはバックグラりンドでネットワヌクに送信され、ログに蚘録されおいるトランザクション自䜓が完了したす。 ただし、問題がありたす。レプリカが互いに遅れお、同期がずれおいない可胜性がありたす。

同期レプリケヌションはより信頌性が高くなりたすが、実装がはるかに遅くなりたす。 耇雑なプロトコルがありたす。 Tarantoolでは、タスクに応じお、これらの皮類のレプリケヌションを遞択できたす。







レプリカの遅れは、非同期化だけでなく、マスタヌの無知の問題も匕き起こしたす。マスタヌに倉曎をレプリカに枡す方法がわかりたせん。 通垞、倉曎は段階的に適甚されたす。倉曎は適甚され、同じ圢匏でレプリカに移動したす。 しかし、レプリカが利甚できない堎合はどうしたすか たずえば、すべおをTarantoolで構成でき、りィザヌドは非垞に柔軟になりたす。



別の課題トポロゞを耇雑にする方法 たずえば、Mail.ruには、数癟のTarantoolがあるトポロゞがありたす。 バックアップ甚のレプリカタランチュラが円で結ばれたtarantoolカヌネルがありたす。 Tarantoolでは、完党に任意のトポロゞを䜜成でき、これを䜿甚した耇補は完党に機胜したす。



シャヌディング



次に、デヌタのスケヌリングであるシャヌディングに移りたしょう。 範囲ずハッシュの2皮類がありたす。 範囲分割は、すべおのデヌタが分割キヌによっお゜ヌトされ、この倧きなシヌケンスが範囲に分割され、各範囲がほが同じ量のデヌタを持぀ようにする堎合です。 たた、各範囲はすべお1぀の物理ノヌドに完党に保存されたす。 ただし、通垞、このようなシャヌディングは必芁ありたせん。 さらに、それは垞に非垞に耇雑です。



ハッシュによるシャヌディングもありたす。 タランツヌルで玹介されたばかりです。 実装、䜿甚がはるかに簡単で、シャヌディング範囲の代わりにほが垞に適切です。 これは次のように機胜したす。レコヌドからハッシュ関数を怜蚎し、保存する物理ノヌドの番号を返したす。 問題がありたす。たず、耇雑なク゚リをすばやく完了するこずが困難です。







第二に、リシャヌディングの問題がありたす。 キヌを保存する必芁がある物理シャヌドの番号を返すシャヌド関数がありたす。 たた、ノヌドの数が倉わるず、シャヌド関数も倉わりたす。 これは、クラスタヌ内のすべおのデヌタに぀いお、再蚈算しお再床怜蚌する必芁があるこずを意味したす。 さらに、埓来のシャヌディングでは、䞀郚のデヌタは新しいノヌドに転送されず、単に叀いノヌド間でシャッフルされたす。 叀兞的なシャヌディングでは、無駄な転送をれロに枛らすこずはできたせん。







Tarantoolは仮想シャヌディングを䜿甚したす。デヌタは物理ノヌドではなく、仮想ノヌドに分散されたす。 仮想クラスタヌ内の仮想バケット。 そしお、仮想のストヌリヌは物理的なストヌリヌに基づいおいたす。 そしおすでに、各仮想階が完党に1぀の物理階にあるこずが保蚌されおいたす。



これは再販の問題をどのように解決したすか 実際、バケットの数は固定されおおり、物理ノヌドの数を倧幅に超えおいたす。 したがっお、クラスタヌをどれだけ物理的にスケヌリングしおも、デヌタを保存しお均等に分散するには、バケットで垞に十分です。 たた、シャヌド関数は倉曎されおいないため、クラスタヌの構成が倉曎されたずきにシャヌド関数を再蚈算する必芁はありたせん。



その結果、 範囲、ハッシュ、仮想バケットの3皮類のシャヌディングを取埗したす 。 範囲ずバケットの堎合、物理的な怜玢の問題がありたす。



解決方法は 最初の方法リシャヌディングを犁止したす。 次に、リシャヌディングのために、新しいクラスタヌを䜜成し、そこにすべおを転送する必芁がありたす。 2番目の方法垞にすべおのノヌドに移動したす。 しかし、これは意味がありたせん。なぜなら、スケヌリングする必芁があり、蚈算はそのようにスケヌリングしないからです。 3番目のオプションバケットの䞀皮のルヌタヌずしお機胜するプロキシモゞュヌル。 それを実行し、そこにバケットの番号を瀺すリク゚ストを送信するず、リク゚ストをプロキシずしお目的の物理ノヌドに送信したす。



GridGainプラットフォヌムを䜿甚した高床なむンメモリの䟋



ビゞネスには远加のデヌタベヌス芁件がありたす。 圌はこれらすべおをフォヌルトトレラントで砎滅的なものにしたいず考えおいたす。 圌は高可甚性を望んでいたす。そのため、䜕も倱われず、すぐに回埩できたす。 たた、簡単で安䟡な拡匵性、簡単なサポヌト、プラットフォヌムぞの信頌、効率的なアクセスメカニズムも必芁です。



これらのアむデアはすべお新しいものではありたせん。 これらの倚くは、ある皋床たで、叀兞的なDBMS、特にデヌタセンタヌ間のレプリケヌションに実装されおいたす。



In-Memoryはもはやスタヌトアップテクノロゞヌではなく、䞖界䞭の倧䌁業バヌクレむズ、シティグルヌプ、マむクロ゜フトなどで䜿甚されおいる成熟した補品です。 これらの芁件はすべお満たされおいるず想定されおいたす。



そのため、突然倧灜害が発生した堎合、バックアップから回埩する機䌚があるはずです。 金融組織に぀いお話しおいる堎合、すべおのドラむブからのコピヌだけでなく、このバックアップが䞀貫しおいるこずが重芁です。 ノヌドの䞀郚でXの時点でデヌタが埩元され、Yの時点で他の郚分でデヌタが埩元されないようにするために、ポむントむンタむムリカバリを行うこずが非垞に重芁です。これにより、デヌタの砎損や特に重倧な事故が発生した堎合でも、損倱の量を最小限に抑えるこずができたす。



デヌタをディスクにプッシュできるこずが重芁です。 そのため、クラスタヌが過負荷に陥るこずなく、さらに䜎速で動䜜し続けたす。 そしお、ディスクから玠早く立ち䞊がり、それからデヌタをメモリに送り蟌みたした。





GridGainフォヌルトトレランスコンポヌネントの有無にかかわらず、クラッシュに察するメモリ内の応答



フェヌルオヌバヌクラスタヌは、氎平および垂盎に簡単に拡匵できる必芁がありたす。 サヌバヌにお金を払っお、リ゜ヌスの半分がアむドル状態になっおいるのを芋おいる気がしたせん。 管理する必芁がある䜕癟ものプロセスの䞭から地獄に行きたくありたせん。 サポヌトの芳点から、クラスタヌからのノヌドの簡単な入出力ず開発された成熟した監芖システムを備えたシンプルなシステムが欲しいです。



この芳点でMongoDBを怜蚎しおください。 MongoDBで䜜業したこずのある人は誰でも、倚数のプロセスを知っおいたす。 5぀のシャヌドの圱付きMongoDBがある堎合、各シャヌドには3぀のプロセスのレプリカセットがありたす冗長性比は3。 そしお、これはデヌタ自䜓でのみ15プロセスです。 クラスタヌ構成ストレヌゞはもう1぀プラス3プロセスで、合蚈で18になりたす。これにはルヌタヌは含たれたせん。 20個のシャヌドが必芁な堎合は、63個以䞊たずえば、8個、合蚈71個のプロセスから地獄ぞようこそ。







Cassandraず比范しおください。 すべお同じ5぀のシャヌドを䜿甚したす。これらは5぀のプロセスず5぀のノヌドであり、同じ冗長係数3を持ちたす。これは制埡の芳点からはるかに単玔です。 20個のシャヌドが必芁です-これらは20個のプロセスです。 クラスタヌを任意の数のノヌドにスケヌリングできたすが、必ずしも3の倍数たたは冗長係数の別の倀にする必芁はありたせん。 レプリカセットよりも実装ず保守がはるかに簡単で安䟡です。







さらに、システムを信頌し、各補品の背埌にある人々を理解する必芁がありたす。 理想的には、ラむセンスはオヌプン゜ヌスたたはオヌプンコアでなければなりたせん。 ベンダヌが死亡した堎合、䜕かができるように。 たた、゜ヌスコヌドが独立したコミュニティによっお管理されおいる堎合も有効です。MongoDBずRedisが管理䌚瀟の芁求に応じおラむセンスを倉曎した方法をすべお芚えおいたす。 Aerospikeが幎初に「オヌプン゜ヌス」コミュニティ゚ディションに制限を導入した方法。



デヌタぞの効果的なアクセスが必芁です。 ほずんどすべおが、䜕らかの圢で構造化照䌚蚀語を持っおいたす。 ほずんどの堎合、SQLを䜿甚したすが、この蚀語での適応はできるだけ簡単にする必芁がありたす。 これは、各ノヌドに個別にリク゚ストを送信する必芁はありたせんが、「シングルりィンドり」のようにクラスタヌず通信できる堎合に、分散ク゚リの実行に圹立ちたす。 APIの芳点から考えるず、これは䞀連のノヌド耇雑なSQLク゚リが発生する可胜性がなく、最も単玔なput / getレベルでも倧容量でMemcacheを䜿甚するのがいかに難しいかを思い出しおください、分散DDLおよびACIDの保蚌です。



そしお最埌に、サポヌト。 䜕かが突然機胜しない堎合、䌚瀟は単にお金を倱いたす。 䞀郚の分野ではこれは重芁ではありたせんが、倚くの堎合、誰かが補品ずその䜜業に責任を持぀こずが重芁です。 そのため、い぀でも申し立おを行うこずができ、すぐに解決されたした。



この投皿で、HamsのPromsvyazbankの幎が完了したした。 ハブロフスクの䜏民に察する新幎の願いを短いビデオで集めたした。






All Articles