セロリの50の色合い

Celeryず呌ばれるPython開発者の間で広く知られおいるフレヌムワヌクを飌いならす方法を知りたい堎合は、ここにいたす。 たた、Celeryがプロゞェクトで自信を持っお基本的なコマンドを実行したずしおも、fintechの経隓が未知の偎面を開く可胜性がありたす。 フィンテックは垞にビッグデヌタであり、それに䌎いバックグラりンドタスク、バッチ凊理、非同期APIなどの必芁性があるためです。





モスクワPython Conf ++でのCeleryに関するOleg Churkinのストヌリヌの矎しさは、負荷のかかったCeleryの蚭定方法ず監芖方法に関する詳现な指瀺に加えお、有甚なアむデアを借りるこずができるずいうこずです。





講挔者ずプロゞェクトに぀いお Oleg Churkin Bahusss は8幎間さたざたな耇雑さのPythonプロゞェクトを開発しおおり、Yandex、Rambler、RBC、Kaspersky Labなどの有名䌁業で働いおいたす。 珟圚、techlideはfintech-status StatusMoneyになっおいたす。



プロゞェクトは、アカりント、トランザクション、商人などのナヌザヌの倧量の財務デヌタ1.5テラバむトで動䜜したす。 毎日最倧100䞇のタスクを実行したす。 たぶん、この数倀は誰かにずっおはそれほど倧きくないように思えるかもしれたせんが、適床な容量の小さなスタヌトアップの堎合、これは倧量のデヌタであり、開発者は安定したプロセスに向かう途䞭でさたざたな問題に盎面しなければなりたせんでした。



オレグは仕事のキヌポむントに぀いお話したした





そしお、圌はCeleryに欠けおいる機胜を実装するいく぀かの蚭蚈ナヌティリティを共有したした。 刀明したように、2018幎にはこれが可胜になりたす。 以䞋は、䞀人称レポヌトのテキスト版です。



発行



次のタスクが必芁でした





バックグラりンドタスクには、電子メヌル、プッシュ、デスクトップなど 、あらゆる皮類の通知が含たれたす。これらはすべお、トリガヌによっおバックグラりンドタスクで送信されたす。 同様に、財務デヌタの定期的な曎新が開始されたす。



バックグラりンドでは、たずえばナヌザヌの䞍正行為をチェックするなど、さたざたな特定のチェックが実行されたす。 金融系の新興䌁業では、ナヌザヌが銀行口座をシステムに远加できるようにし、すべおのトランザクションを確認できるため、 デヌタセキュリティに特に倚くの劎力ず泚意が払われおいたす 。 詐欺垫は、たずえば、盗たれたアカりントの残高をチェックするために、私たちのサヌビスを悪甚するこずができたす。



バックグラりンドタスクの最埌のカテゎリは、 メンテナンスタスクです 。䜕かを埮調敎し、確認、修正、監芖などを行いたす。



䞀括通知の堎合、 バッチ凊理が䜿甚されたす。 ナヌザヌから受け取る倧量のデヌタは、次のような特定の方法で蚈算および凊理する必芁がありたす。 バッチモヌド。



同じ抂念には、埓来のExtract、Transform、Loadが含たれたす。





非同期APIが単玔なポヌリングリク゚ストを䜿甚しお実行できるこずは秘密ではありたせん。フロント゚ンドはバック゚ンドでプロセスを開始し、バック゚ンドは定期的に自身を起動するタスクを起動し、結果を「泚ぎ」、デヌタベヌスの状態を曎新したす。 フロント゚ンドは、ナヌザヌにこのむンタラクティブな状態を瀺したす-状態が倉化しおいたす。 これにより、次のこずが可胜になりたす。





私たちのサヌビスでは、今のずころこれで十分ですが、将来はおそらく䜕か他のものを曞き盎す必芁がありたす。



ツヌル芁件



これらのタスクを実装するには、ツヌルに次の芁件がありたした。





どのツヌルを遞択したすか



これらの問題を解決するための2018幎の垂堎の遞択肢は䜕ですか



か぀おそれほど野心的ではなかったタスクのために、私はいく぀かのプロゞェクトでただ䜿甚されおいる䟿利なラむブラリを曞きたした。 操䜜は簡単で、バックグラりンドでタスクを実行したす。 しかし、同時に、ブロヌカヌは必芁ありたせん Celeryも他のナヌザヌも、スプヌラヌを備えたuwsgiアプリケヌションサヌバヌのみが、別のワヌカヌずしお開始されたす。 これは非垞に簡単な゜リュヌションです。すべおのタスクは条件付きでファむルに保存されたす。 単玔なプロゞェクトではこれで十分ですが、私たちのプロゞェクトでは十分ではありたせんでした。



どういうわけか私たちは考えたした





有望な候補者2018



ここで、 Dramatiqに泚目したいず思いたす。 これは、セロリのすべおの短所を知っおいお、すべおを非垞に矎しく曞き盎すこずにした熟緎したセロリのラむブラリです。 Dramatiqの利点





しばらく前、Dramatiqにはラむセンスに関する問題がありたした。最初にAGPLがあり、次にLGPLに眮き換えられたした。 しかし、今では詊すこずができたす。



しかし、2016幎には、セロリに加えお、特別なこずは䜕もありたせんでした。 私たちはその豊富な機胜が気に入っおおり、それでも理想的なタスクに適しおいたした。





プロゞェクトの特城



さらなるストヌリヌがより理解しやすいように、私たちの背景に぀いおお話したす。



Redisをメッセヌゞブロヌカヌずしお䜿甚したす 。 私は、Redisがメッセヌゞを倱い、メッセヌゞブロヌカヌに適応しおいないずいう倚くの話ず噂を聞いたこずがありたす。 実皌働環境では、これは確認されおいたせんが、結局のずころ、RedisはRabbitMQよりも効率的に動䜜するようになりたした少なくずも、明らかに、問題はブロヌカヌずの統合コヌドにありたす。 バヌゞョン4では、Redisブロヌカヌが修正され、再起動䞭にタスクが倱われるこずがなくなり、非垞に安定しお動䜜するようになりたした。 2016幎、CeleryはRedisを攟棄しおRabbitMQずの統合に泚力する予定でしたが、幞いなこずに、これは実珟したせんでした。



Redisで問題が発生した堎合、深刻な高可甚性が必芁であれば、Amazonのパワヌを䜿甚するため、Amazon SQSたたはAmazon MQに切り替えたす。



結果を保存するために結果バック゚ンドを䜿甚したせん。必芁な堎所に結果を保存し、垌望する方法でチェックするこずを奜みたす。 Celeryがこれを行うのは望たしくありたせん。



peforkプヌルを䜿甚したす 。぀たり、 䞊行性を高めるためにプロセスの別個のフォヌクを䜜成するプロセスワヌカヌです。



䜜業単䜍



セロリを詊したこずはないが、やろうずしおいる人々を最新のものにするために、基本的な芁玠に぀いお議論したす。 セロリの䜜業単䜍は課題です。 電子メヌルを送信する簡単なタスクの䟋を瀺したす。



シンプルな関数ずデコレヌタヌ



@current_app.task def send_email(email: str): print(f'Sending email to email={email}')
      
      





タスクの開始は簡単です。関数を呌び出すず、タスクはランタむムsend_emailemail = "python@example.com"たたはワヌカヌで実行されたす。぀たり、バックグラりンドでのタスクの効果です。



 send_email.delay(email="python@example.com") send_email.apply_async( kwargs={email: "python@example.com"} )
      
      





高負荷のもずで2幎間セロリず仕事をしおきたしたが、私たちは良い圢の芏則を導き出したした。 たくさんの熊手がありたした、それらを回避する方法を孊びたした、そしお、私は方法を共有したす。



コヌド蚭蚈



タスクには異なるロゞックが含たれる堎合がありたす。 䞀般に、Celeryは、タスクをファむルたたはパッケヌゞタスクに保持したり、どこからでもむンポヌトしたりするのに圹立ちたす。 1぀のモゞュヌルで倚数のビゞネスロゞックを取埗するこずもありたす。 私たちの意芋では、アプリケヌションのモゞュヌル性の芳点からの正しいアプロヌチは、タスクのロゞックを最小限に抑えるこずです。 パズルはコヌドの「トリガヌ」ずしおのみ䜿甚したす。 ぀たり、タスク自䜓にロゞックは含たれたせんが、バックグラりンドでコヌドの起動をトリガヌしたす。



 @celery_app.task(queue='...') def run_regular_update(provider_account_id, *args, **kwargs): """...""" flow = flows.RegularSyncProviderAccountFlow(provider_account_id) return flow.run(*args, **kwargs)
      
      





他のクラスを䜿甚する倖郚クラスにすべおのコヌドを配眮したす。 すべおのタスクは基本的に2行で構成されたす。



パラメヌタヌ内の単玔なオブゞェクト



䞊蚘の䟋では、特定のIDがタスクに枡されたす。 䜿甚するすべおのタスクで、 小さなスカラヌデヌタ id のみを転送したす。 Djangoモデルをシリアル化しお送信したせん。 ETLでも、倧きなデヌタBLOBが倖郚サヌビスから送られおくる堎合、たずそれを保存しおから、IDでこのBLOBをすべお読み取っお凊理するタスクを実行したす。



これを行わないず、Redisで消費されたメモリの非垞に倧きな混合が芋られたした。 メッセヌゞはより倚くのメモリを占有し始め、ネットワヌクの負荷が高くなり、凊理されるタスクパフォヌマンスの数が䜎䞋したす。 オブゞェクトが完了しおいる限り、タスクは無関係になり、オブゞェクトはすでに削陀されおいたす。 デヌタをシリアル化する必芁がありたした-すべおがPythonのJSONでシリアル化されおいるわけではありたせん。 タスクを再詊行するずきに、このデヌタをどう凊理するかをすばやく決定し、再床取埗し、それらのチェックを実行する機䌚が必芁でした。



パラメヌタヌでビッグデヌタを転送する堎合は、もう䞀床考えおください 問題の情報量が少ない小さなスカラヌを転送し、タスクのこの情報から必芁なものすべおを取埗するこずをお勧めしたす。



べき等問題



セロリ開発者自身がこのアプロヌチを掚奚しおいたす。 コヌドセクションが繰り返される堎合、副䜜甚は発生せず、結果は同じになりたす。 これは、特に倚くのサヌビスずの盞互䜜甚がある堎合、たたは2フェヌズコミットがある堎合、必ずしも簡単に達成できるずは限りたせん。



しかし、すべおをロヌカルで実行するず、受信デヌタが存圚し関連性があるこずを垞に確認でき、実際に䜜業しおトランザクションを䜿甚できたす。 1぀のタスクに察しおデヌタベヌスぞのク゚リが倚数あり、実行時に問題が発生する可胜性がある堎合は、トランザクションを䜿甚しお䞍芁な倉曎をロヌルバックしたす。



䞋䜍互換性



アプリケヌションをデプロむしたずきに、いく぀かの興味深い副䜜甚がありたした。 䜿甚するデプロむのタむプ青+緑たたはロヌリング曎新に関係なく、叀いサヌビスコヌドが新しいワヌカヌコヌドのメッセヌゞを䜜成する状況が垞に存圚し、その逆も同様です。そしおそこにトラフィックが行きたした。



リリヌス間の埌方互換性を維持する方法を孊ぶたで、バグを芋぀けおタスクを倱いたした 。 䞋䜍互換性ずは、このタスクにどのパラメヌタヌが入力されおも、リリヌス間でタスクが安党に機胜するこずです。 したがっお、すべおのタスクで「ゎム」眲名** kwargsを䜜成しおいたす。 次のリリヌスで新しいパラメヌタヌを远加する必芁がある堎合、新しいリリヌスでは** kwargsから取埗したすが、叀いリリヌスでは取埗したせん-䜕も壊れたせん。 眲名が倉曎され、Celeryがそのこずを知らないずすぐに、クラッシュし、タスクにそのようなパラメヌタヌがないずいう゚ラヌが衚瀺されたす。



このような問題を回避するためのより厳密な方法は、リリヌス間でタスクキュヌをバヌゞョン管理するこずですが、実装するのは非垞に困難であり、珟時点ではバックログに残しおいたす。



タむムアりト



数が足りないか、タむムアりトが正しくないために問題が発生する堎合がありたす。



タスクにタむムアりトを蚭定しないのは悪です。 これは、タスクで䜕が起こっおいるか、ビゞネスロゞックがどのように機胜するかを理解しおいないこずを意味したす。



そのため、すべおのタスクのグロヌバルなものも含めお、すべおのタスクがタむムアりトでハングアップし、タむムアりトも特定のタスクごずに蚭定されたす。



添付する必芁がありたす soft_limit_timeoutおよびexpires 。



Expiresは、タスクがどれだけ䞊んでいるこずができるかです。 問題が発生した堎合に、タスクがキュヌに蓄積されないようにする必芁がありたす。 たずえば、ナヌザヌに䜕かを報告したいが、䜕かが起こり、明日だけタスクを完了するこずができる堎合-これは意味がなく、明日はメッセヌゞが関連しなくなりたす。 したがっお、通知の有効期限はかなり短くなっおいたす。



etacountdown+ visibility _timeoutの䜿甚に泚意しおください。 FAQでは、Redisのこのような問題、぀たりRedisブロヌカヌのいわゆる可芖性タむムアりトに぀いお説明しおいたす。 デフォルトでは、その倀は1時間です。1時間埌にワヌカヌがタスクの実行を開始しおいないこずがわかるず、ワヌカヌはそれをキュヌに再床远加したす。 したがっお、カりントダりンが2時間の堎合、1時間埌にブロヌカヌはこのタスクがただ完了しおいないこずを怜出し、同じタスクをもう1぀䜜成したす。 そしお2時間で、2぀の同䞀のタスクが完了したす。



予想される時間たたはカりントダりンが1時間を超える堎合、Redisを䜿甚するず、圓然、ブロヌカヌ接続蚭定でvisibility_timeout倀を倉曎しない限り、タスクが重耇したす。



再詊行ポリシヌ



繰り返し実行できるタスク、たたは倱敗する可胜性のあるタスクには、再詊行ポリシヌを䜿甚したす。 ただし、倖郚サヌビスを圧倒しないように慎重に䜿甚したす。 指数関数的なバックオフを指定せずにタスクをすばやく繰り返すず、倖郚サヌビス、たたはおそらく内郚サヌビスがそれに耐えられない可胜性がありたす。



パラメヌタretry_backoff 、 retry_jitterおよびmax_retriesは、特にmax_retriesを明瀺的に指定するず䟿利です。 retry_jitter-少しの混乱をもたらし、タスクが同時に繰り返されないようにするパラメヌタヌ。



メモリリヌク



残念ながら、メモリリヌクは非垞に簡単であり、それらを芋぀けお修正するこずは困難です。


䞀般に、Pythonでメモリを操䜜するこずは非垞に議論の的です。 リヌクが発生する理由を理解するために倚くの時間ず神経を費やしたす。そしお、コヌドにさえ挏れおいないこずがわかりたす。 したがっお、プロゞェクトを開始するずきは垞に、worker_max_memory_per_child ずいうワヌカヌにメモリ制限を蚭定したす。



これにより、OOM Killerがい぀かは登堎せず、すべおのワヌカヌが殺されるこずはなく、すべおのタスクが倱われるこずはありたせん。 セロリは、必芁に応じおワヌカヌを再起動したす。



タスクの優先床



他の誰よりも早く、他の誰よりも早く完了しなければならないタスクが垞にありたす-今すぐ完了しなければなりたせん それほど重芁ではないタスクがありたす-日䞭に完了させおください。 このため、タスクには優先床パラメヌタヌがありたす。 Redisでは、非垞に興味深い動䜜をしたす-優先床が远加された名前で新しいキュヌが䜜成されたす。



私たちは異なるアプロヌチを䜿甚したす- 優先順䜍のために別々のワヌカヌ 、぀たり 昔ながらの方法で、異なる「重芁性」を持぀セロリの劎働者を䜜成したす。



 celery multi start high_priority low_priority -c:high_priority 2 -c:low_priority 6 -Q:high_priority urgent_notifications -Q:low_priority emails,urgent_notifications
      
      





Celery multi startは、1台のマシンで同じコマンドラむンからCelery構成党䜓を実行するのに圹立぀ヘルパヌです。 この䟋では、ノヌドたたはワヌカヌを䜜成したすhigh_priorityずlow_priority、2ず6は同時実行です。



2぀のhigh_priorityワヌカヌは、垞にurgent_notificationsキュヌを凊理したす。 誰もこれらのワヌカヌを䜿甚したせん。圌らはurgent_notificationsキュヌから重芁なタスクのみを読み取りたす。



重芁でないタスクには、low_priorityキュヌがありたす。 他のすべおのキュヌからメッセヌゞを受信する6人のワヌカヌがいたす。 たた、low_priorityワヌカヌがurgent_notificationsにサブスクラむブし、high_priorityワヌカヌが察凊できない堎合に支揎できるようにしたす。



この叀兞的なスキヌムを䜿甚しお、タスクに優先順䜍を付けたす。



抜出、倉換、ロヌド



ほずんどの堎合、ETLは䞀連のタスクのように芋え、各タスクは前のタスクから入力を受け取りたす。



 @task def download_account_data(account_id) 
 return account_id @task def process_account_data(account_id, processing_type) 
 return account_data @task def store_account_data(account_data) 

      
      





この䟋には3぀のタスクがありたす。 Celeryには、分散凊理ぞのアプロヌチず、 チェヌン関数を含むいく぀かの有甚なナヌティリティがあり、3぀のタスクから1぀のパむプラむンを䜜成したす。



 chain( download_account_data.s(account_id), process_account_data.s(processing_type='fast'), store_account_data.s() ).delay()
      
      





セロリはパむプラむンを分解し、最初のタスクを最初に実行し、次に受信したデヌタを2番目に転送し、2番目のタスクが返すデヌタは3番目に枡されたす。 これが、シンプルなETLパむプラむンの実装方法です。



より耇雑なチェヌンの堎合、远加のロゞックを接続する必芁がありたす。 ただし、1぀のタスクでこのチェヌンに問題が発生するず、チェヌン党䜓がバラバラになるこずに泚意しおください 。 この動䜜が望たしくない堎合は、䟋倖を凊理しお実行を継続するか、䟋倖によっおチェヌン党䜓を停止したす。



実際、内郚のこのチェヌンは、すべおのパラメヌタヌを持぀すべおのタスクを含む1぀の倧きなタスクのように芋えたす。 したがっお、チェヌン内のタスクの数を乱甚するず、非垞に高いメモリ消費ずプロセス党䜓のスロヌダりンが発生したす。 数千のタスクのチェヌンを䜜成するのは悪い考えです。



バッチタスク凊理



ここで最も興味深いのは、200䞇人のナヌザヌにメヌルを送信する必芁がある堎合に䜕が起こるかです。



すべおのナヌザヌに察しおこのようなバむパス関数を䜜成したす。



 @task def send_report_emails_to_users(): for user_id in User.get_active_ids(): send_report_email.delay(user_id=user_id)
      
      





ただし、ほずんどの堎合、関数はナヌザヌIDを受け取るだけでなく、䞀般的にナヌザヌテヌブル党䜓を消去したす。 各ナヌザヌには独自のタスクがありたす。



このタスクにはいく぀かの問題がありたす。





タスクフラッドず呌びたす。チャヌトは次のようになりたす。



劎働者がゆっくりず凊理を開始するタスクの流入がありたす。 タスクがマスタヌレプリカを䜿甚し、プロゞェクト党䜓がクラックし始め、䜕も機胜しない堎合、次のこずが起こりたす。 以䞋は、数時間にわたっおDB CPU䜿甚率が100だったプラクティスの䟋です。正盎なずころ、なんずか怖がっおしたいたした。



問題は、ナヌザヌ数の増加に䌎っおシステムが倧幅に劣化するこずです。 スケゞュヌリングを扱うタスク





タスクのフラッディングが発生したす。タスクはキュヌに蓄積され、内郚サヌビスだけでなく倖郚サヌビスにも倧きな負荷がかかりたす。



劎働者の競争力を䜎䞋させようずしたしたが 、これはある意味で圹立ちたす-サヌビスの負荷が軜枛されたす。 たたは、内郚サヌビスをスケヌリングできたす 。 しかし、これはゞェネレヌタヌの問題の解決にはなりたせん。 そしお、倖郚サヌビスのパフォヌマンスぞの䟝存に圱響を䞎えるこずはありたせん。



タスク生成



私たちは別の道を取るこずにしたした。 たいおいの堎合、今すぐ200䞇タスクすべおを実行する必芁はありたせん。 これらの文字がそれほど重芁でない堎合、すべおのナヌザヌに通知を送信するのに通垞4時間かかるこずがありたす。



たず、 Celery.chunksを䜿甚しおみたした 。



 send_report_email.chunks( ({'user_id': user.id} for user in User.objects.active()), n=100 ).apply_async()
      
      





むテレヌタにもかかわらず、すべおのuser_idがメモリにロヌドされるため、これにより状況は倉わりたせんでした。 そしお、すべおの劎働者は䞀連のタスクを取埗し、劎働者は少し䌑みたすが、最終的にはこの決定に満足したせんでした。



ワヌカヌにrate_limitを蚭定しお、1秒あたり特定の数のタスクのみを凊理するようにしたした。実際にタスクに察しお指定されたrate_limitはワヌカヌのrate_limitであるこずがわかりたした。 ぀たり、タスクにrate_limitを指定した堎合、これはタスクが毎秒70回実行されるこずを意味したせん。 これは、ワヌカヌが1秒間に70回実行するこずを意味したす。たた、ワヌカヌに䜕があるかによっお、この制限は動的に倉曎される可胜性がありたす。 実際の制限rate_limit * lenワヌカヌ。



ワヌカヌが開始たたは停止するず、合蚈rate_limitが倉曎されたす。 さらに、タスクが遅い堎合、ワヌカヌが埋めおいるキュヌ内のすべおのプリフェッチがこれらの遅いタスクで詰たりたす。 ワヌカヌは、「ああ、このタスクはrate_limitにありたす。もう実行できたせん。 そしお、キュヌ内の次のタスクはすべおたったく同じです-ハングさせおください」-そしお圌は埅っおいたす。



チャンフィフィケヌタヌ



最終的に、私たちは独自のラむブラリを䜜成するこずを決定し、Chunkificatorず呌ばれる小さなラむブラリを䜜成したした。



 @task @chunkify_task(sleep_timeout=...l initial_chunk=...) def send_report_emails_to_users(chunk: Chunk): for user_id in User.get_active_ids(chunk=chunk): send_report_email.delay(user_id=user_id)
      
      





sleep_timeoutずinitial_chunkを取り、新しいチャンクで自分自身を呌び出したす。 チャンクは、敎数リスト、たたは日付たたは日時リストの抜象化です。 このチャンクを持぀ナヌザヌのみを受け取る関数にチャンクを枡し、そのチャンクに察しおのみタスクを実行したす。



したがっお、タスクゞェネレヌタヌは必芁な数のタスクのみを実行し、倧量のメモリを消費したせん。 写真はこんな感じになっおいたす。



ハむラむトは、スパヌスチャンクを䜿甚するこずです。぀たり、デヌタベヌス内のむンスタンスをチャンクIDずしお䜿甚したす䞀郚はスキップされる可胜性があるため、タスクが少なくなる可胜性がありたす。 その結果、負荷はより均䞀になり、プロセスは長くなりたしたが、誰もが生きおいお、ベヌスは緊匵しおいたせん。



このラむブラリは Python 3.6+甚に実装されおおり、GitHubで入手できたす。 修正する予定のニュアンスがありたすが、今のずころdatetime-chunkにはpickleシリアラむザヌが必芁です-倚くはこれを行うこずができたせん。



いく぀かの修蟞的な質問-これらの情報はどこから来たのですか 問題があるこずをどのようにしお発芋したのですか 問題がたもなく重芁になり、すでに解決し始める必芁があるこずをどのように知っおいたすか



答えは、もちろん監芖です。



モニタリング



私はモニタリングが本圓に奜きです。私はすべおをモニタヌし、脈拍に指を圓おるのが奜きです。 パルスに指を眮かない堎合、レヌキを垞に螏むこずになりたす。



暙準的な監芖の質問





いく぀かのオプションを詊したした。 CeleryにはCLIむンタヌフェヌスがあり、非垞に豊富であり、以䞋を提䟛したす。





しかし、実際に䜕かを監芖するのは難しいです。 ロヌカルのフリルや、実行時にrate_limitを倉曎したい堎合に適しおいたす。



泚 CLIむンタヌフェヌスを䜿甚するには、実動ブロヌカヌにアクセスする必芁がありたす。



Celery Flowerを䜿甚するず、CLIず同じこずができたすが、Webむンタヌフェヌスを䜿甚する必芁がありたすが、それだけではありたせん。 ただし、いく぀かの単玔なグラフを䜜成し、その堎で蚭定を倉曎できたす。



䞀般に、セロリフラワヌは、小さなセットアップですべおがどのように機胜するかを確認するのに適しおいたす。 さらに、HTTP APIをサポヌトしおいたす。぀たり、自動化を蚘述しおいる堎合に䟿利です。



しかし、私たちはプロメテりスに萜ち着きたした。 圌らは珟圚の゚クスポヌタヌを奪いたしたそれのメモリリヌクを修正したした。 タむプ䟋倖別にメトリックを远加。 キュヌ内のメッセヌゞ数のメトリックを远加。 Grafanaのアラヌトず統合し、喜ぶ。 GitHubにも投皿されおいたす 。 こちらで確認できたす 。



Grafanaの䟋





䞊蚘はすべおの䟋倖の統蚈ですどのタスクのどの䟋倖。 以䞋は、タスクを完了する時間です。



Celeryには䜕が欠けおいたすか



これは緑豊かなフレヌムワヌクであり、倚くのものがありたすが、欠萜しおいたす 次のような十分な小さな機胜がありたせん。





結論



Celeryは倚くの実皌働環境で䜿甚されるフレヌムワヌクであるずいう事実にもかかわらず、3぀のラむブラリCelery、Kombu、およびBilliardで構成されおいたす。 これら3぀のラむブラリはすべお共同開発者によっお開発されおおり、1぀の䟝存関係を解攟しおアセンブリを砎壊する可胜性がありたす。



したがっお、䜕らかの方法で既に敎理し、アセンブリを決定論的にしたこずを願っおいたす。



実際、結論はそれほど悲しいものではありたせん。 セロリは、圓瀟の負荷䞋でフィンテックプロゞェクトのタスクに察応しおいたす。 私たちはあなたず共有した経隓を埗たした。あなたは私たちの解決策を適甚したり、それらを改良したり、あなたのすべおの困難を克服したりするこずができたす。



監芖はプロゞェクトの重芁な郚分であるべきであるこずを忘れないでください 。 監芖によっおのみ、どこに問題があるのか​​、䜕を修正、远加、修正する必芁があるのか​​を芋぀けるこずができたす。



コンタクトスピヌカヌOleg Churkin  Bahusss 、 facebook 、 github 。



次の倧きなモスクワPython Conf ++は、4月5日にモスクワで開催されたす。 今幎は、実隓モヌドですべおのメリットを1日で満たそうずしたす。 これに劣らないレポヌトがあり、ストリヌム党䜓が、有名なラむブラリず補品の倖囜の開発者に割り圓おられたす。 さらに、金曜日はアフタヌパヌティにずっお理想的な日であり、ご存知のように、これはコミュニケヌション䌚議の䞍可欠な郚分です。



専門のPythonカンファレンスに参加しおください。 ここでレポヌトを送信し、チケットを予玄しおください。 それたでの間、準備が進行䞭です。モスクワPython Conf ++ 2018に関する蚘事がここに衚瀺されたす。




All Articles