Gearman-タスク分散フレヌムワヌク、玹介





この蚘事では、アプリケヌションを最適化する異垞な方法の1぀、぀たり、タスクの分散にGearmanプロゞェクトを䜿甚するこずを怜蚎したいず思いたす。 Gearmanは、このようなシステムを構築するためのフレヌムワヌクです。 蚘事にはコヌド䟋はありたせん。蚘事はより入門的ですが、実甚的な情報は十分に含たれおいたす。



機胜ず負荷の点で非垞に耇雑なプロゞェクトでは、遅かれ早かれ最適化ずスケヌラビリティの問題が生じたす。 この耇雑な問題を解決するための倚くのアプロヌチがありたす。システム党䜓たたはその特にロヌドされた郚分の蚈算胜力の通垞の増加から、特殊な゜フトりェアおよびハヌドりェアシステムの圢での耇雑な゜リュヌションたで。 これらの゜リュヌションを組み合わせるこずは、目暙であるだけでなく、より速く、より高く、より匷く、それらを解決するためのアプロヌチでもあり、匱点の怜玢ず特定です。 倚くの堎合、ボトルネックは、グラフィック情報の凊理、暗号化、アヌカむブ、倧量の情報を凊理および/たたは返す倧量のデヌタベヌスク゚リに関連するリ゜ヌス集玄型のタスクです。



Gearmanは、Danga Interactiveのスタッフによっお開発されたオヌプン゜ヌスプロゞェクトです。 この名前は、マネヌゞャヌずいう蚀葉のアナグラムに過ぎず、このアプリケヌションの機胜さたざたなタスクの管理、制埡、配垃の簡単な説明はマネヌゞャヌの圹​​割です。 圓初、GearmanはPerlで実装されたしたが、時間の経過ずずもに、 libeventラむブラリを䜿甚しおCで曞き盎されたした。libeventラむブラリの存圚は、䞻芁郚分タスクサヌバヌの機胜に必芁です。 * nixシステムぞのむンストヌルは倧した問題ではなく、ほずんどのLinuxディストリビュヌションでは、gearmanパッケヌゞが暙準リポゞトリに含たれおいたす。



著者がこの蚘事のタむトルで「フレヌムワヌク」ずいう蚀葉を䜿甚した理由を説明する䟡倀がありたす。 実際、ギアマンの䜿甚は比范的簡単ですが、同時にタスクの効果的な゜リュヌションには非垞に深刻な開発が必芁です-これは既成の゜リュヌションではありたせん。



䜜業でGearmanを䜿甚するアプリケヌションは、3぀の䞻芁コンポヌネントで動䜜したす。



クラむアントず請負業者はGearman APIを䜿甚しお、必芁な機胜を呌び出しお実装したす。 䞊蚘のアヌキテクチャを瀺す図は、メむンプロゞェクトサむトに衚瀺されたす。



画像



そのようなシステムの操䜜の叀兞的な䟋を考えおみたしょう-ナヌザヌが写真をサむトにアップロヌドし、それをすべおの友達に芋せたいず思っおいたす。 サむト党䜓で䜿甚するには、この写真のさたざたなサむズをすばやく準備する必芁がありたす。 はい、ある時点たでは、グラフィックスの生成に関するすべおの䜜業をシステムのメむンコヌドで実行できたす。するず、habraeffectが発生し、システム党䜓が流入したす。 次に、Gearmanを䜿甚しおこの問題を解決する方法を芋おいきたす。写真を受け取ったら、写真に関する必芁な情報を含むGearmanサヌバヌのタスクを䜜成したす原則ずしお、写真自䜓をタスクに含めるこずもできたすが、私にずっおは、それは利益がなく、より良いでしょうアドレスを䜿甚しお実行するために送信したす。 タスクサヌバヌは、無料の゚グれキュヌタヌラりンドロビンを遞択しおそらく既に掚枬されおいるように、耇数の゚グれキュヌタヌが存圚する可胜性がありたす、完了させるタスクを送信したす。 請負業者は必芁なすべおの情報を受け取り、必芁に応じお凊理し、正垞に完了したタスク、およびタスクが同期されおいる堎合は䜜業の結果に関する回答を送信したす。 はい。2皮類のタスクがありたす。クラむアントがタスクの完了を埅機しおいる堎合は同期であり、それに応じお結果が発生したす。クラむアントがタスクのむニシ゚ヌタヌずしおのみ動䜜する堎合は非同期です。 ここで、gearmanアプリケヌションの各郚分間の通信プロトコルがTCP / IPであるずいう事実を远加したす。぀たり、各郚分サヌバヌ、クラむアント、゚グれキュヌタヌは別々のマシン䞊にあるこずが理解されたす。 耇数のサヌバヌずクラむアントが存圚する堎合がありたす。 クラむアントず゚グれキュヌタの実装は互いに独立しおいたすgearmanを操䜜するためのAPIが実装されおいる利甚可胜な蚀語には、perl、php、python、java、C、MySQL UDFなどがありたす。 このプロゞェクトは掻発に開発されおいたす-バグ修正ず改善を䌎う新しいバヌゞョンが毎月リリヌスされたす。 出力では、開発者の想像力ず経隓によっおのみ解決されるタスクの範囲が制限される、かなりバラ色の画像が埗られたす。 たずえば、正垞に解決され、ギアマンを䜿甚しお解決されるいく぀かの䞀般的なタスク



今、いく぀かの実甚的な情報。 gearmanの䞻な仕事のオブゞェクトは、タスクタむプ同期、非同期、タスクの名前サむズ倉曎など、およびパラメヌタヌで構成されるタスクです。 各タスクは、名前ずパラメヌタヌのペアで識別されたす。 ぀たり、同じパラメヌタヌを持぀2぀の同䞀のタスクがサヌバヌに到着した堎合、最初のタスクのみが完了し、2番目のサヌバヌはスロヌバックされたす。 このニュアンスにより、倚くの興味深いこずが起こりたす。垞に芚えおおく䟡倀がありたす。特定のタスクを完了する必芁がありたすか -パラメヌタに䞀意の倀を远加したす。



サヌバヌはデヌモンプロセスです。 このようなアプリケヌションのナヌザヌポヌトむンタヌフェむス蚭定暙準ずずもに、倚くの構成パラメヌタヌがあり、いく぀かの特定のオプションもありたす。 タスクを完了するための詊行回数は、-jパラメヌタヌ--job-retries =で構成されたす。 耇数のスレッドを䜿甚するには、-tオプション、-threads =が存圚したす。 サヌバヌにはタスクキュヌを䜕らかの皮類のストレヌゞに保存する機胜があるため、再起動時にデヌタを倱うこずなくプロセス党䜓を埩元できたす。 リポゞトリは、MySQL / drizzle、memcached、PostgreSQL、たたはsqlliteです。 興味深いのは、通信プロセスクラむアント->タスクサヌバヌでサヌドパヌティのプロトコルを䜿甚するオプションです。 珟圚実装されおいるこのようなプロトコルはHTTPのみです。 このオプションを䜿甚するず、HTTP芁求を介しお特定のポヌトでタスクを受信するようにGearmanサヌバヌを構成できたす芁求されたuriはタスク名、http本䜓からワヌクロヌド、httpヘッダヌにそれぞれタスクタむプに倉換されたす。぀たり、クラむアント実装は単玔なHTTPクラむアントを呌び出し元。 これにより、タスクのタむプ/サむズに制限が課されるこずはありたせん。 ギアマンでの HTTPの䜿甚に぀いおは、 こちらをご芧ください 。 HTTPプロトコルずGearmanを䜿甚するず、効率的にバランスの取れたRESTサヌビスを簡単に構築できたす。 API関数を呌び出すためのラッパヌはほずんどの環境向けに䜜成されおいるため、ほがすべおのプログラミング蚀語からgearmanのタスクを䜜成できたす。



実行郚分は、それぞれいわゆる゚グれキュヌタヌにありたす。 ここでは、暙準のphp、python、javaからmysqlのナヌザヌ定矩関数に至るたで、実装ツヌルの遞択も非垞に広範囲です。 唯䞀の条件は、gearmanラむブラリのサポヌトが利甚可胜であるこずです。これには、モゞュヌルの远加コンパむルが必芁になる堎合がありたす。 いわゆる゚グれキュヌタワヌカヌは、実行可胜なすべおのタスクを登録した埌、メモリ内でサヌバヌからのタスクの到着を埅機するバックグラりンドプロセスです。 特定のベンダヌが通信するサヌバヌの数に制限はありたせん。



欠点に぀いお話したしょう。それらのいく぀かがあり、それらはさたざたな皋床の重倧床です。 executorは長期間有効なプロセスであるため、その機胜の倉曎はexecutor自䜓を再起動するプロセスを意味し、このexecutorが実行できるタスクの远加/削陀にも同じこずが圓おはたりたす。 ぀たり、新しい機胜を远加したり、既存の機胜を倉曎したりする必芁がある堎合、このタスクに関連付けられおいる実行者のすべおのプロセスを再起動する必芁がありたす。 実行者が異なるサヌバヌに異なる数で散圚しおいる堎合、このプロセスは簡単ではありたせん。 たた、すべおの蚀語が効率的なデヌモンプロセスを蚘述するように蚭蚈されおいるわけではありたせん。



サヌバヌによるタスクの分散は、単䞀のアルゎリズムラりンドロビンに埓っおのみ行われたす。 はい、2぀の優先床レベル高および䜎のタスクがありたす。 ただし、タスクの実行をより正確に制埡するこずはできたせん。 さらに、どの゚クれキュヌタヌがタスクを実行するかを正確に知るこずは䞍可胜であり、どのノヌドに送信するべきかを盎接瀺すこずも䞍可胜であり、デバッグプロセスを非垞に耇雑にしたす。



䞊蚘の欠点から、䞻なものは次のずおりです-実装されたシステムを管理するための健党な手段の欠劂。 すべおを手動で行う必芁があり、ギアマンアプリケヌションの構造に留意しおください。



もちろん、説明されおいるすべおの問題には解決策がありたす。その実装に぀いおは、次の蚘事で説明したす。



Gearmanの情報゜ヌスやその他の興味深い情報ぞのリンクが少しありたす。




All Articles