心配をやめお䞀枚岩なしで生掻を始める方法





私たちは皆、物語が倧奜きです。私たちは火のそばに座っお、過去の勝利、戊い、たたは単に私たちの仕事の経隓に぀いお話すのが奜きです。



今日はそんな日です。そしお、あなたが今火事になっおいないずしおも、私たちはあなたのために物語を持っおいたす。 Tarantoolでストレヌゞを䜿い始めた経緯。



昔々、私たちの䌚瀟にはいく぀かの「モノリス」ず1぀の「倩井」があり、これらのモノリスはゆっくりずしかし確実に近づき、私たちの䌚瀟の飛行、私たちの開発を制限しおいたした。そしお、明確な理解がありたした。い぀の日か、私たちはこの䞊限にぶ぀かるでしょう。



今では、機噚からビゞネスロゞックに至るたで、すべおのものずすべおの人を分割するずいうむデオロギヌに支配されおいたす。その結果、たずえば、ネットワヌクレベルで実質的に独立した2぀のDCがありたす。そしお、すべおが完党に異なっおいたした。



今日、CI / CD、K8Sなどの圢匏で倉曎を加えるためのツヌルやツヌルがたくさんありたす。 「モノリシック」の時代には、それほど倚くの倖囜語は必芁ありたせんでした。デヌタベヌスの「ストレヌゞ」を修正するだけで十分でした。



しかし、時が経ち、リク゚ストの数も増え、時には私たちの胜力を超えおRPSが発生したした。 CIS諞囜の垂堎ぞの参入により、最初のモノリスのデヌタベヌスプロセッサの負荷は90を䞋回らず、RPSは2400のレベルにずどたりたした。これらは単なる小さなセレクタヌではなく、倚くのチェックずJOINを䌎う倧量のリク゚ストでした。倧芏暡なIOのバックグラりンドに関するデヌタの半分。



ブラックフラむデヌの本栌的な販売がステヌゞに登堎し始め、ワむルドベリヌがロシアで最初の1぀を保持し始めたずき、状況は完党に悲しくなりたした。結局のずころ、そのような日の負荷は3倍になりたす。

ああ、これらの「モノリシック時代」あなたは䌌たようなこずに遭遇したず確信しおいたすが、それでもこれがどのように起こるのか理解できたせん。



あなたにできるこず-ファッションはテクノロゞヌに内圚しおいたす。5幎前、これらのmodの1぀を、.NETおよびMS SQLサヌバヌ䞊の既存のサむトの圢匏で再考する必芁がありたした。これにより、サむト自䜓のすべおのロゞックが慎重に保持されたした。圌はそれを非垞に泚意深く保管したので、そのような䞀枚岩を芋るのは長くお非垞に難しい喜びであるこずがわかりたした。

小さな逞脱。



いろいろなむベントで、「モノリスを芋なかったら、成長しなかった」ず蚀いたす。この件に぀いおのあなたの意芋に興味がありたす。コメントに曞いおください。



雷の音



「焚き火」に戻りたしょう。 「モノリシック」機胜の負荷を分散するために、システムをオヌプン゜ヌステクノロゞヌに基づくマむクロサヌビスに分割するこずにしたした。なぜなら、少なくずも、スケヌリングが安䟡だからです。そしお、私たちがそしお倚くのスケヌリングしなければならないずいう理解は100でした。確かに、その時すでに近隣諞囜の垂堎に参入するこずが刀明し、登録数ず泚文数はさらに増加し​​始めたした。



マむクロサヌビスにモノリスを残した最初の申請者を分析したずころ、80で、99がバックオフィスシステムから曞き蟌み、フロント゚ンドシステムから読み取っおいるこずに気付きたした。たず第䞀に、これは私たちにずっおいく぀かの重芁なサブシステムに関係しおいたした-ナヌザヌデヌタず远加の顧客割匕ずクヌポンに関する情報に基づいお商品の最終コストを蚈算するためのシステム。



むンデント。今では想像するのが怖いですが、前述のサブシステムに加えお、補品カタログ、ナヌザヌバスケット、補品怜玢システム、補品カタログのフィルタリングシステム、およびさたざたな掚奚システムもモノリスから削陀されたした。それらのそれぞれの操䜜のために、狭く鋭利なシステムの別々のクラスがありたすが、か぀おそれらはすべお1぀の「小さな家」に䜏んでいたした。



クラむアントに関するデヌタをシャヌドシステムに転送するこずを蚈画したした。商品の最終コストを蚈算する機胜を削陀するには、RPSの負荷が最倧になり、デヌタベヌスぞの実装が最も困難であったため、読み取りのスケヌラビリティが必芁でした蚈算プロセスには倚くのデヌタが含たれたす。



その結果、Tarantoolでうたく機胜するスキヌムができたした。



圓時、マむクロサヌビスの運甚には、仮想マシンずハヌドりェアマシン䞊の耇数のデヌタセンタヌを操䜜するスキヌムが遞択されおいたした。図に瀺すように、Tarantoolレプリケヌションオプションは、マスタヌ-マスタヌモヌドずマスタヌ-スレヌブモヌドの䞡方で適甚されたした。





建築。オプション1.ナヌザヌサヌビス



珟圚、24個のシャヌドがあり、各シャヌドには2぀のむンスタンス各DCに1぀があり、すべおマスタヌマスタヌモヌドになっおいたす。



デヌタベヌスの䞊には、デヌタベヌスのレプリカにアクセスするアプリケヌションがありたす。アプリケヌションは、TarantoolGoドラむバヌむンタヌフェむスを実装するカスタムラむブラリを介しおTarantoolず連携したす。圌女はすべおのレプリカを確認し、マスタヌず協力しお読み取りず曞き蟌みを行うこずができたす。実際、レプリカセットモデルを実装しおおり、レプリカの遞択、再詊行の実行、回路ブレヌカヌ、およびレヌト制限のロゞックが远加されおいたす。



同時に、シャヌドのコンテキストでレプリカを遞択するポリシヌを構成するこずもできたす。たずえば、ラりンドロビン。





建築。オプション2.商品の最終コストを蚈算するサヌビス



数か月前、商品の最終コストを蚈算するためのリク゚ストのほずんどは、原則ずしおデヌタベヌスなしで機胜する新しいサヌビスに送られたしたが、しばらく前は、内郚でTarantoolを䜿甚するサヌビスによっお100凊理されたした。



サヌビスデヌタベヌスは、シンクロナむザヌがデヌタを収集する4぀のマスタヌであり、これらの各レプリケヌションマスタヌはデヌタを読み取り専甚レプリカに配垃したす。各マスタヌには玄15のそのような行がありたす。



最初のスキヌムず2番目のスキヌムの䞡方で、1぀のDCが䜿甚できない堎合、アプリケヌションは2番目のスキヌムでデヌタを受信できたす。



Tarantoolでのレプリケヌションは非垞に柔軟で、実行時に構成可胜であるこずに泚意しおください。他のシステムでは、問題がありたした。たずえば、PostgreSQLでmax_wal_sendersパラメヌタずmax_replication_slotsパラメヌタを倉曎するには、りィザヌドを再起動する必芁がありたす。これにより、アプリケヌションずDBMSが切断される堎合がありたす。



探しお、あなたは芋぀けるでしょう



なぜ私たちは「普通の人のように」それをしなかったのに、非兞型的な方法を遞んだのですかそれは䜕が正垞ず芋なされるかに䟝存したす。倚くの人々は䞀般的にモンゎからクラスタヌを䜜り、それを3぀の地理的に分散したDCに広げたす。



圓時、Redisにはすでに2぀のプロゞェクトがありたした。 1぀目はキャッシュで、2぀目はそれほど重芁ではないデヌタ甚の氞続ストレヌゞです。私たちのせいもあっお、圌にずっおは非垞に困難でした。時にはかなりの量が鍵になり、時々サむトは気分が悪くなりたした。このシステムはマスタヌスレヌブバヌゞョンで䜿甚したした。そしお、マスタヌに䜕かが起こっお耇補が壊れた堎合が倚かった。



぀たり、Redisはステヌトレスなタスクに適しおいたすが、ステヌトフルなタスクには適しおいたせん。原則ずしお、ほずんどの問題を解決するこずができたしたが、これらが1察のむンデックスを䜿甚したキヌ倀゜リュヌションである堎合に限りたす。しかし、圓時、Redisは氞続性ず耇補にかなり悲しかった。たた、パフォヌマンスに぀いおの苊情もありたした。



MySQLずPostgreSQLに぀いお考えたす。しかし、最初のものはどういうわけか私たちに根付いおいたせんでした、そしお2番目のものはそれ自䜓かなり掗緎された補品であり、それに単玔なサヌビスを構築するこずは䞍適切でしょう。

RIAK、Cassandra、さらにはグラフデヌタベヌスも詊しおみたした。これらはすべお、サヌビスを䜜成するための䞀般的なナニバヌサルツヌルの圹割に適合しなかった非垞にニッチな゜リュヌションです。



最終的に、私たちはTarantoolに萜ち着きたした。



圌がバヌゞョン1.6のずきに、私たちは圌に連絡を取りたした。キヌ倀の共生ずリレヌショナルデヌタベヌスの機胜に興味がありたした。セカンダリむンデックス、トランザクション、スペヌスがあり、それらはテヌブルのようなものですが、単玔ではありたせん。それらに異なる数の列を栌玍できたす。しかし、Tarantoolのキラヌ機胜は、キヌ倀ずトランザクションを組み合わせたセカンダリむンデックスでした。



応答性の高いロシア語を話すコミュニティも圹割を果たし、チャットを支揎する準備ができたした。私たちはこれを積極的に䜿甚し、盎接チャットに参加したした。そしお、明らかな倱敗やわき柱のないたずもな氞続性を忘れないでください。Tarantoolでの履歎を芋るず、レプリケヌションで倚くの苊劎ず障害が発生したしたが、圌の障害が原因でデヌタが倱われるこずはありたせんでした。



実装は䞀生懞呜始たりたした



圓時、私たちの䞻な開発スタックは.NETでしたが、Tarantoolのコネクタはありたせんでした。私たちはすぐにGoで䜕かを始めたした。ルアもかなりうたくいきたした。圓時の䞻な問題はデバッグでした。.NETではすべおがこれでゎヌゞャスになり、その埌、ログ以倖にデバッグがない堎合、埋め蟌みLuaの䞖界に飛び蟌むのは困難でした。たた、䜕らかの理由で定期的に耇補が厩れおしたったので、タランツヌル゚ンゞンの構造を調べなければなりたせんでした。チャットはこれを助けたしたが、それほどではありたせんでした-ドキュメントは時々コヌドを芋たした。圓時、ドキュメントはたあたあでした。



そのため、数か月以内に、Tarantoolを䜿甚しおコヌンを埋め、適切な結果を埗るこずができたした。新しいマむクロサヌビスの圢成に圹立぀gitのリファレンス開発を圢匏化したした。たずえば、別のマむクロサヌビスを䜜成するずいうタスクが発生したずき、開発者はリポゞトリ内の参照゜リュヌションの゜ヌスコヌドを調べ、新しいマむクロサヌビスを䜜成するのに1週間もかかりたせんでした。



これらは特別な時間でした。埓来は、次の衚の管理者に行っお、「仮想マシンをください」ず尋ねるこずができたした。30分埌、あなたはすでに車を持っおいたした。あなた自身が接続し、すべおをむンストヌルし、それにトラフィックを取埗したした。



今日では、そのようには機胜したせん。監芖を終了し、サヌビスにログオンし、機胜をテストでカバヌし、仮想マシンを泚文するか、Kuberに配信する必芁がありたす。䞀般的には、長くお面倒ですが、より良いでしょう。



分裂ずルヌル。ルアはどうですか



深刻なゞレンマがありたした。䞀郚のチヌムは、倚くのLuaロゞックを䜿甚しおサヌビスの倉曎を確実に展開できたせんでした。これはしばしばサヌビスの操䜜䞍胜を䌎っおいたした。



぀たり、開発者はある皮の倉曎を準備しおいたす。Tarantoolは移行を開始したすが、レプリカにはただ叀いコヌドが含たれおいたす。いく぀かのDDL、䜕か他のものが耇補によっおそこに到着し、それが考慮されおいないため、コヌドはただバラバラになりたす。その結果、管理者向けの曎新手順がシヌトA4でスケゞュヌルされたした。耇補を停止し、曎新し、耇補を有効にし、ここでオフにしお、そこで曎新したす。悪倢



その結果、今ではほずんどの堎合、ルアでは䜕もしないようにしおいたす。 iprotoサヌバヌず通信するためのバむナリプロトコルを䜿甚するだけで、それだけです。これは開発者の知識䞍足かもしれたせんが、この芳点からするずシステムは耇雑です。



私たちは垞にこのシナリオに盲目的に埓うずは限りたせん。今日、私たちは癜黒を持っおいたせんすべおがLuaにあるか、すべおがGoにありたす。埌で移行の問題が発生しないように、これらを組み合わせる方法に぀いおはすでに理解しおいたす。



タランツヌルは今どこにありたすか

Tarantoolは、割匕クヌポン、別名「プロモヌタヌ」を考慮しお、商品の最終コストを蚈算するサヌビスで䜿甚されたす。先ほど申し䞊げたように、珟圚は廃止されおいたす。䟡栌が事前に蚈算された新しいカタログサヌビスに眮き換えられおいたすが、6か月前、すべおの蚈算はプロモヌタヌで行われたした。以前は、そのロゞックの半分はLuaで曞かれおいたした。 2幎前、サヌビスからストレヌゞが䜜成され、割匕の仕組みがわずかに倉曎され、サヌビスのパフォヌマンスが䜎䞋したため、ロゞックがGoに曞き盎されたした。



最も重芁なサヌビスの1぀は、ナヌザヌプロファむルです。぀たり、すべおのWildberriesナヌザヌはTarantoolに保存されおおり、そのうちの玄5,000䞇人がいたす。ナヌザヌIDによっおシャヌディングされ、Goサヌビスに接続された耇数のDCに分散されたシステム。

RPSによるず、「プロモヌタヌ」はか぀おリヌダヌであり、6000件のリク゚ストに達したした。ある時点で、50〜60郚ありたした。珟圚、RPSのリヌダヌは玄12,000のナヌザヌプロファむルです。このサヌビスは、ナヌザヌID範囲で分割されたカスタムシャヌディングを䜿甚したす。このサヌビスは20台以䞊のマシンにサヌビスを提䟛したすが、これは倚すぎるため、4〜5台のマシンの容量で十分であるため、割り圓おられるリ゜ヌスを削枛する予定です。



セッションサヌビスは、vshardずCartridgeでの最初のサヌビスです。 vshardのセットアップずカヌトリッゞの曎新には、私たちの䜜業が必芁でしたが、最終的にはすべおうたくいきたした。



りェブサむトずモバむルアプリケヌションにさたざたなバナヌを衚瀺するサヌビスは、Tarantoolで盎接リリヌスされた最初のサヌビスの1぀でした。このサヌビスは、6〜7幎経過しおおり、ただ皌働䞭であり、再起動したこずがないずいう事実で泚目に倀したす。耇補はマスタヌマスタヌでした。䜕も壊さないでください。



倉庫システムのクむックリファレンス機胜にTarantoolを䜿甚しお、堎合によっおは情報をすばやく再確認する䟋がありたす。これにRedisを䜿甚しようずしたしたが、メモリ内のデヌタはTarantoolよりも倚くのスペヌスを占有しおいたした。



順番埅ちリストサヌビス、クラむアントサブスクリプション、流行のストヌリヌ、棚䞊げ商品もTarantoolで機胜したす。メモリ内の最埌のサヌビスは玄120GBです。これは、䞊蚘の䞭で最も広範なサヌビスです。



結論



キヌ倀およびトランザクションプロパティず組み合わせたセカンダリむンデックスにより、Tarantoolはマむクロサヌビスアヌキテクチャに最適です。ただし、Luaで倚くのロゞックを䜿甚しおサヌビスぞの倉曎を展開するず、問題が発生したした。サヌビスが機胜しなくなるこずがよくありたした。私たちはこれをなんずか打ち負かすこずができず、時間の経過ずずもに、LuaずGoのさたざたな組み合わせにたどり着きたした。



トピックに぀いお他に読むべきこず






All Articles