concurrency: 4 delay: 60 queues: - [test_queue, 1] - [hoge_queue, 1] - [fuga_queue, 1] - [piyo_queue, 1] class TestWorker include Shoryuken::Worker # ... def perform thread_logger.info('perform!') end def thread_logger ActiveSupport::Logger.new("log/worker.thread.#{thread_number}.log") end def thread_number Thread.current.to_s.match(/Thread\:([\da-zA-Z]+)/)[1] end end shoryukenの処理はざっくりと以下のような流れになっ
Rails で非同期処理といえば、 Sidekiq, Resque, DelayedJob あたりが有名かと思います。 DelayedJob は RDS をジョブキューとして利用できる1ため、インフラの準備が不要で比較的ライトに導入できますが、数万件のジョブを登録しようと思うと RDS にかなりの負荷がかかりますし、Insert もそれほど早くないため、ジョブキューとしてはあまり適しているとは言えません。 Redis などのインメモリーデータベースを用いれば、RDS に負荷をかけず、Insert の高速化も見込めますが、万が一 Redis がクラッシュした際には登録されていたキューは全て無くなりますし、そういった障害に対応するためには幾らかの運用コストが発生します。 ところで、 AWS には SQS というキューイングサービスが提供されています。 安価で堅牢な造りになっており、運用コストも
最近、インフラのお仕事をしています Ruby on railsのアプリケーションでよしなにキューを使いたいという用件があり、shoryukenを使っておりました sidekiqでいいんじゃね、というツッコミはなしにして、インフラ担当の自分はデプロイ時下記の要件を満たすインフラを作る必要がありました shoryukenのジョブが立ち上がっていなかったら立ち上げる shoryukenのジョブが落ちたら復旧する 元々Elastic Beanstalkで構成していたのですが、上記の用件を満たすために .ebextensions で実現しようとしましたがなかなかハマったのでメモを残しておきます shoryukenを立ち上げるために shoryukenを立ち上げるために下記のファイルを配置しました files: "/opt/elasticbeanstalk/hooks/appdeploy/post/5
Railsで非同期処理っていったらDelayedJobとかResqueとかSidekiqとかいろいろありますが、 今回はShoryukenにチャレンジしてみます。 ShoryukenはAWS SQSからジョブ取り出すワーカーを簡単に作っちゃおうっていうGemなんですが、 今回は本物のSQSは貧乏なので使わずにFake SQSというSQS(っぽいもの)をローカルで立てることができるGemを使ってローカルのみで動くShoryuken Workerを書いちゃいましょう。 登場人物 AWS SQS: すごく安くキューが使えるニクいやつ AWS-SDK: RubyからAWSを簡単に操作できるニクいやつ Fake SQS: SQSっぽいものをローカルに立てられるニクいやつ Shoryuken: SQSからジョブを取り出すニクいやつ 導入 あらかじめ適当なRailsプロジェクトを作っておきます。 いつも
Rails has lots of solutions for background jobs. One of these is a brilliant Gem called Sidekiq, which we have written about before on Sitepoint. Sidekiq is great and can solve most developer needs. It is especially useful as it takes over the heavy lifting from Rails. However, it has a few shortfalls: If you are not a Pro user ($750 per year) and your process crashes, you will lose your jobs. If
みなさんさようなら、インフラ部の @h3_poteto です。 今日は昇竜拳の話をします。 ↑昇竜拳 クラウドワークス本体のアプリはRailsで作られているのですが、その中にちょいちょい非同期処理が載せられています。 メール送ったり、Elasticsearchとの同期処理だったり、重いスカウト処理だったり。 DelayedJobだと限界が見えてきた その非同期処理として、今までは、DelayedJobを使っていたんですが、ジョブが多くなり、キューが多くなり、ワーカーが多くなるにつれて、どんどん重くなってきました。 ActiveRecordを介してDBにキューを貯めるという方式がどうにもキツイ。 DelayedJobは本当に気軽に非同期処理が出来て良いのですが、キューにRDBを使うところがすごくイケてないです(だから気軽にできるんですけど)。 エンキューが多くなればそれだけ書き込みも、また処
丹内です。 掲題のとおり、SQSを簡単に使うことができるshoryuken gemを使ってみました。 前提 ruby 2.2.4 rails 4.2.5 マネジメントコンソールでSQSの作成 AWSマネジメントコンソールのSQS画面から新規にキューを作成します。 Shoryukenによる負荷が抑えられるよう、Receive Message Wait Timeの設定を忘れないようにしてください。 インストール Gemfileに以下のように書いてbundle installします。 gem 'shoryuken' group :development, :test do gem 'foreman' end あとで解説しますが、railsアプリとは別にworkerプロセスも立ち上げるので、便利になるようforemn gemもインストールしています。 Jobクラスを作成 Shoryuken::Wo
Sidekiq (Redis) vs Shoryuken (AWS SQS) 14 Mar 2015 DISCLAIMER: This post is not intended to compare Sidekiq and Shoryuken implementations. Both are very similar, actually Shoryuken started as a shameless copy of Sidekiq <3 open source. The idea of this post is to compare Sidekiq as a Redis based queue system with Shoryuken as a SQS client. Resque > Sidekiq > Shoryuken Before Sidekiq, Resque was th
Setting up queueing for background jobs is a pretty typical task in Rails. I usually use Sidekiq or Resque to get this done, but I was recently tasked with working with Amazon SQS. Fortunately, there is a gem called Shoryuken that will help us work with it. If you know how to set up Sidekiq and create workers, this will be extremely familiar. In this tutorial, I’ll be fetching and saving some Inst
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く