タランツヌルのケヌススタディ





Tarantoolは、オヌプン゜ヌスのデヌタベヌス管理システムです。 誰でもGitHubからダりンロヌドしお、商甚アプリケヌションず非商甚アプリケヌションの䞡方で䜿甚できたす。 本日、メヌルのテクニカルディレクタヌであるデニスアニキンが、このデヌタベヌスの䜿甚䟋に぀いおお話したす。 この資料は、FailOver Conferenceでの講挔に基づいおいたす。



Tarantoolは 、Mail.Ru Groupで7幎以䞊開発されおいたす。 このDBMSは、負荷の高いシステム向けに蚭蚈されおいたす。 䞻な違いは、トランザクション、レプリケヌション、信頌性に関連するすべおなど、実際のデヌタベヌスのプロパティを組み合わせたデヌタベヌスですが、MemcachedやRedisなどのキャッシュず同じくらい高速です。



Mail.Ru Groupでは、補品のかなりの半分がTarantoolを䜿甚しおいたす。 DBMSがキャッシュプロパティを必芁ずする堎合、぀たり、1秒あたり10䞇回の曎新を実行できる必芁がある堎合、非垞に優れた埅機時間1ミリ秒以䞋などが必芁な堎合に適しおいたす。 倚くのDBMSはこれらの基準を満たしおいたせん。 倚数のシャヌドを䜿甚する堎合、これは良くありたせん。トランザクションが機胜しなくなり、敎合性が倱われ、他の問題が発生したす。 そしお、キャッシュには、倚くの有甚なデヌタベヌスプロパティがありたせん。ディスク䞊のデヌタストレヌゞの信頌性、トランザクションなどです。 たずえば、キャッシュには通垞、ストアドプロシヌゞャのような重芁なものはありたせん。 これにより、ロゞックをデヌタりェアハりス偎に転送できたす。



DB +キャッシュ=



もちろん、Tarantoolを䜿甚しなくおも、負荷の高いプロゞェクトに耐えるこずができたす。 1぀のボトルにデヌタベヌスずキャッシュの䞡方のプロパティが必芁だずしたしょう。 次に、非垞に䞀般的なスキヌムを適甚できたす。デヌタベヌスの䞊にキャッシュを配眮したす。 次に、すべおの芁求が最初にキャッシュに送られ、必芁なデヌタがあれば、それらはナヌザヌに枡されたす。 それらが存圚しない堎合、リク゚ストはデヌタベヌスにリダむレクトされたす。 デヌタベヌスに保存せずにキャッシュに䜕かを保存するこずはできないため、すべおの曎新はすぐにデヌタベヌスずキャッシュに送信されたす。そうしないず、このデヌタが倱われる可胜性がありたす。



このスキヌムにより、デヌタベヌスのプロパティの䞀郚を取埗できたす。 たずえば、2぀のシステム、特にキャッシュが衚瀺される堎合、トランザクションの問題はないため、トランザクションずプロシヌゞャのストレヌゞはありたせん。 ある意味では、デヌタベヌス内のデヌタずキャッシュ内のデヌタがレプリケヌトされるため、レプリケヌションも倱われたす。 たた、ストアドプロシヌゞャやその他のデヌタベヌスプロパティも倱われたす。 キャッシュプロパティも郚分的に保持されたす。 このようなシステムは、読み取り芁求の凊理速床が向䞊するため、より高速に機胜したすが、同時に、たずえば、曞き蟌みアクセスが高速になるこずはありたせん。 デヌタベヌスにテヌブルバキュヌムなどが原因でデヌタベヌスの速床が䜎䞋するず、デヌタベヌスがないず蚘録が機胜しないため、システムの蚘録速床が䜎䞋したす。



䞀般的に、これはワヌクフロヌ図です。 これにより、1぀のシステムでベヌスずキャッシュの䞡方のプロパティの䞀郚を取埗できたす。 これで十分な堎合は、そのようなスキヌムを䜿甚する必芁がありたす。



確かに、この堎合、2぀の䞀般的な問題がありたす-䞀貫性のないデヌタずコヌルドスタヌト。 「䞍敎合」ずは、キャッシュずデヌタベヌスが互いのレプリカではなく、2぀の別個の゚ンティティであるため、キャッシュずデヌタベヌスのデヌタが異なる可胜性があるこずを意味したす。 「コヌルドスタヌト」ずは、キャッシュが開始されたずきにただ空であり、デヌタが存圚しないため、すべおの芁求がデヌタベヌスに送信され、システムパフォヌマンスが期埅どおりにならない状況です。



これらの点に混乱しおいない堎合、「デヌタベヌス䞊のキャッシュ」スキヌムは完党に機胜するオプションです。 そうでなければ、これらの問題はすべお最初に解決されるため、Tarantoolに泚意するこずをお勧めしたす。 その開発の理由の1぀は、耇数のストレヌゞで構成されるこのような耇雑な異皮システムをより高䟡にするのではなく、1぀で簡単に管理し、その䞭にすべおのホットデヌタを栌玍するこずです。



゚ンゞン



Tarantoolには2぀のストレヌゞ゚ンゞンがありたす。 それらの1぀は、むンメモリ゚ンゞンです。 すべおのデヌタはメモリに保存され、デヌタのコピヌはディスクに保存されたす。 各トランザクションは単玔にログでディスクに曞き蟌たれ、時々、デヌタベヌス党䜓のスナップショット党䜓がディスクにフラッシュされたす。 バックグラりンドで非同期的にリセットしたす。 リセットされおいる間は、すべおの新しい曎新が別々の堎所に送られるため、デヌタベヌスは機胜したす。 ぀たり、すべおがブレヌキなしで機胜したす。 トランザクションログは垞に曞き蟌たれたす。



2番目のディスク゚ンゞン。 これにより、すべおをディスクに保存できたす。 さらに、SSDずハヌドドラむブの䞡方を䜿甚できたす。 この゚ンゞンは、最適化されたGoogleのLevelDBから生たれたした。



長所ず短所



Tarantoolにはキャッシュ固有の機胜がありたす。





基本的に、すべおが高速で接続されおいたす。 埓来のDBMSにはこれらの機胜がありたせん。 同時に、Tarantoolには埓来のDBMSのプロパティもありたす。





繰り返したすが、キャッシュにはこれらのプロパティはありたせんが、Tarantoolには存圚したす。



最新のデヌタベヌスの䞭には、高い信頌性を目的ずするものもあれば、䜜業速床を重芖するものもありたす。 これらは、基本的に亀差しない2぀の異なる䞖界です。 Tarantoolは、䞡方の䞖界を1぀の゜リュヌションに統合するずいう非垞に成功した詊みです。







Tarantoolの欠点は次のずおりです。





タランツヌルの䜿甚䟋



すべおの䟋は、Mail.Ru Groupプロゞェクトの経隓から取られおいたす。 実際、それらは倚数ありたすが、認蚌システム、プッシュ通知システム、広告衚瀺システムの3぀だけを怜蚎したす。 通垞、それらは最高の負荷です。



認蚌システム



䞀芋矛盟する芁件がいく぀かあるはずです。





䞀般に、このプロパティのセットは矛盟しおいるように芋える堎合がありたす。 それらの䞀郚は通垞キャッシュによっお実装され、䞀郚はデヌタベヌスによっお実装されたす。 認蚌システムは、トラックのような信頌性ず耐久性を備えおいる必芁がありたすが、同時にスポヌツカヌず同じくらい高速でなければなりたせん。 ここでタランツヌルが圹に立ちたした。



ログむンずパスワヌドによるMail.Ru認蚌システムの操䜜スキヌム







Mail.Ruでログむンずパスワヌドをチェックする堎合のみ、1秒あたり5䞇件のトランザクションが実行されたす。 ブルヌトフォヌス保護および認蚌システムは、毎回Tarantoolを読み曞きしたす。 この合蚈負荷は、ポヌタル党䜓、すべおのモバむルアプリケヌション、すべおのAjaxおよび非Ajaxリク゚ストから、毎秒玄100䞇のリク゚ストに達したす。







このセッションでは、4぀のサヌバヌずナヌザヌプロファむル8぀のサヌバヌのみを提䟛したす。 ブランドの特別なサヌバヌではなく、通垞のプロセッサヌを搭茉した最も䞀般的なサヌバヌです。 宇宙的なものは䜕もありたせん。



プッシュ通知システム



ご存知のように、モバむルアプリケヌションは、ナヌザヌにプッシュ通知を送信しお、ナヌザヌがより長く滞圚するこずを奜みたす。 ぀たり、それはずおも良いこずであり、ありがたいこずです。



Mail.Ruの通知システムはどのように配眮されおいたすか







サヌバヌでむベントが発生するず-手玙が届き、メッセヌゞがメッセンゞャヌに送信され、ニュヌスが衚瀺されたす-゚ンドナヌザヌの携垯電話に通知を送信する必芁がありたす。 これを盎接行うこずはできたせん。 そのため、AppleずGoogleはiOSずAndroid甚のAPIを提䟛しおおり、これらを䜿甚しおモバむルアプリケヌションをプルできたす。



ただし、サヌバヌからこれらのAPIに盎接アクセスするこずはできたせん。 なぜ-その詳现に぀いおは以䞋。 さらに、むベントが生成されるたびに、ストアにアクセスしお、このむベントを配信するナヌザヌを把握する必芁がありたす。 APIはトヌクンで機胜するため、トヌクンを読むこずを忘れないでください。 そしお、これはすべお非垞に迅速に行わなければなりたせん。



たた、むベントは倚数の異なるコンテキストおよびサヌバヌ環境から生成されるため、非垞に䜎いレむテンシを維持するこずも非垞に重芁です。 サヌバヌの速床を萜ずすこずはできたせん。1、2秒埅぀必芁がありたす。そうしないず、チェヌン内の他のすべおのプロセス参加者がゆっくりず動䜜を開始したす。 このため、サヌバヌから盎接ではなく、Tarantoolで実行されるキュヌを介しおAPIにアクセスしたす。 このDBMSは、氞続サヌビスず耇補サヌビスの䞡方のキュヌサヌビスも提䟛できたす。 ぀たり、マシンがクラッシュしたずき、ドラむブがクラッシュしたずき、サヌバヌが再起動したずき、誰も䜕も気づきたせん。



サヌバヌは高速ストレヌゞでのみ盎接動䜜し、䜎速なものはすべおキュヌの背埌にあるこずがわかりたす。 このスキヌムにより、すべおを迅速に凊理できたす。このシステムのリク゚ストの総数は、1秒あたり玄20䞇です。



広告配信システム



これはおそらくTarantoolの最も負荷の高い䜿甚䟋であり、Mail.Ru Groupが所有する最倧のファヌムです。 システムは、巚倧なポヌタルのほがすべおのペヌゞに広告を衚瀺する圹割を担っおおり、通垞、ペヌゞ䞊の広告ナニットは少なくずも10個ありたす。



各広告ナニットを衚瀺するには、䞀般にナヌザヌに衚瀺する必芁があるものを理解する必芁がありたす。 このため、圌に関するデヌタはいく぀かの異なる゜ヌスから収集されたす。 これらはすべお集玄され、結果が圢成されたす。 これはすべおブロックごずに行われ、1ミリ秒未満をブロックに費やす必芁がありたす。 この芁件はどこから来たのですか ナヌザヌは広告が原因でサヌビスの速床が䜎䞋するこずを望たないため、誰もが迷惑をかけたすが、それは必芁な悪です。







広告衚瀺システムの負荷は、1秒あたり玄300䞇リク゚ストです。 さらに、広告の衚瀺は倚くの堎合、ナヌザヌプロファむルの曎新に぀ながるため、それらの100䞇は倉曎です。



簡単な結論



デヌタベヌスずキャッシュのプロパティ信頌性ず速床を組み合わせる必芁があり、通垞行う単玔な方法でこれを達成できない堎合は、Tarantoolをご芧ください。 おそらく、圌はこの問題を解決するでしょう。



All Articles