https://twitter.com/ccc_privacy_bot 作った経緯 Tカードが個人情報を提携企業に提供開始 個人情報提供の停止 手続きガイド|CCC カルチュア・コンビニエンス・クラブ株式会社 ツタヤTカード、勝手に個人情報を第三者へ提供?規約改定炎上騒動の真相 CCCに聞く | ビジネスジャーナル 個人情報提供の中止はいつでもできるが、「提供先企業は随時増える」「提供先企業が増えてもCCCからは通知は来ない」「新規企業は何もしないとデフォルトで個人情報提供する設定」というユーザフレンドリーじゃない仕様 毎日PDFをチェックしにいくほど暇じゃないのでボット作るか という感じ ボット自体は半月くらい前にはできてたのですが、2回目以降のCCCの更新が取得できるまで公開を控えていました。 【追記】「個人情報」について 語弊あったようなので捕捉 「個人情報」とは言っても、個人情報そ
Redisの作者antirez氏自らによる、memcachedとRedisの長所短所の比較。特に、Redisを単なるキャッシュ用アプリケーションとしてmemcachedと比較することの間違いと、それぞれの向いている使用方法についての私見。 あなたが私と面識があるなら、私が競合製品があることが悪いと考える人間でないことはご存知でしょう。ユーザーに選択肢があることは本当にいいことだと思っていますし、だからこそ他の技術とRedisを比較するようなことはほとんどしませんでした。 しかし、最適なソリューションを選ぶためには、ユーザーは正しく情報を持たねばならないのも確かです。 この記事を書くのは、有名なライブラリであるSidekiqの作者として知られるMike Perhamが、Redisのバックエンドストレージとしての使い方を書いた記事を読んだのがきっかけです。従って、私はMikeがRedisに「反
この記事はSmartHR Advent Calendar 2020 11日目の記事です。 僕のお手伝いしているSmartHRでは、毎週バックエンドエンジニアが集まり、技術的なトピックについて共有、相談しあうミーティングを開催しています。そのミーティングでは僕がTipsなどを共有するコーナーが常設されています*1。 このエントリでは、そのコーナーで共有した内容をひとつ紹介します。 APIに制限をかける方法について APIを外部に提供するとき、一定の制限をかけてユーザがAPIを乱用するのを防ぐことはよくあることではないでしょうか。素直に考えると「1時間に5000回までAPIを実行できる」のようなやり方を思いつきますね。GitHubのAPIもそのやり方ですし、SmartHRのAPIも同様です。 じゃあそれでいいのでは。となるかもしれませんが少し待ってください。いろんなクライアントがAPIを大量に
リサーチ・アンド・イノベーションの浜田(hamadu)と申します。 いつものお買い物がちょっとお得に、家計簿にもなるポイントアプリ「CODE」のサーバサイド、およびAndroidアプリの開発を担当しています。 序 CODE ではバックグラウンドジョブシステムとして、Sidekiq を採用しています。その作者、Mike Perham 氏が新しい仕組みを作っていました。その名も Faktory。Sidekiq と違いワーカーが言語に依存せず、また本体はGoで書かれているためスケールするのがウリのようです。まだまだ開発中で、プロダクションで使うには厳しい印象を受けますが、今後Sidekiqを置き換えうるプロジェクトになるのではと思います。 本稿では簡単に仕組みの紹介をして、Rubyでジョブを投げるClientと、ジョブを処理するワーカーをそれぞれ実装してみました。 ソースコードは faktory
以下、ざっくり説明していきたいと思います。 > Web Server/Workerの移行Web Server/Workerの移行 従来はHeroku(US region)にサーバがあったため、日本からのアクセスの場合チューニングをどう頑張っても数百msの遅延がありました。これをAWS(Tokyo region)に移行することで、ページを表示するのに要する時間が1/2 ~ 1/3まで改善されました。 > DockerDocker 移行開始直後は自分が不慣れなこともあり、このタイミングでDockerを採用する気はありませんでした。しかし、実際にECS上でのデプロイを検証したり、Dockerについて学習するうちに移行のイメージが掴めてきたのでDockerを採用することにしました。 もともとHerokuで動いていて The Twelve-Factor App にほぼ沿っていたので、やってみるとDo
この記事はiCARE Dev Advent Calendar 2022 第1レーン24日目の記事です。 Railsの基本原則の一つに「メニューはおまかせ」があり、デフォルトで設定を良い感じにしてくれています。しかし、本当に自分のユースケースでも問題ない設定だと自信を持って言うためには、なぜこの設定になっているのかの背景知識が必要になります。例えばrails newをするとpumaのスレッド数はデフォルト5、データベースのコネクションプール数も5になっています。これは自分のユースケースで適切な値なのでしょうか?どういうときにいくつに設定するのが正しいのでしょうか? pumaのスレッド数をどうやって決めるのか pumaはRailsのデフォルトのアプリケーションサーバであり、複数プロセス、複数スレッドで動くアプリケーションサーバです。この記事を執筆している時点で最も利用率の高いアプリケーションサ
この記事は tech.kayac.com Advent Calendar 2014 22日目です。 こんにちは。Rubyを書いている @yumiyon です。 今回は、Railsプロジェクトで「○○がしたい!」と思った際に、自分がよく利用するGemを機能ごとに分けて10個ほどご紹介します。日頃からRailsで開発を行なっている方は既知のものばかりかもしれませんが、Railsを始めたばかりの方や、自分のための備忘録として。 目次 Gemとは 1、画像をアップロードしたい(CarrierWave) 2、管理画面を作成したい(ActiveAdmin) 3、環境毎に定数を管理したい(rails_config) 4、crontabを管理したい(Whenever) 5、スプレッドシートにアクセス(google_drive) 6、ページャーを実装したい(kaminari) 7、非同期処理を使いたい:ジョ
MERY のサーバーサイドエンジニアの @saidie です。 MERY では画像アップロードや記事投稿による検索インデックス作成などなど、ユーザからのリクエスト起因で起こる時間のかかる処理の多くを非同期に行うことでレスポンスタイムの向上に努めています。また、重複した非同期処理が並行して走ることによる スループット の劣化を分散ロックを用いた 排他制御 で緩和する取り組みなども行っています。 MERY は Ruby on Rails を用いて開発されており、非同期処理には Ruby 製の フレームワーク である Sidekiq を採用しています。この記事では Sidekiq と Redis による分散ロックを使って、同一の非同期処理が(あまり)重複しないような MERY の非同期処理システムについてご紹介します。 Sidekiq Sidekiq はクライアントサー バモ デルのマルチスレッ
平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識
はじめに 実際に運用していた時に非同期にしていた主な処理は下記のようなものがあります。 iOS Android の push 通知の送信処理 ログの作成 様々な外部 API の呼び出し 非同期で更新しても問題ないデータの更新 Sidekiq is なに sidekiqは非同期処理を実現する gem 他にも Ruby で非同期処理を実現できる有名な gem には resque や delayed_job 等がある。 sidekiq.org Enterprise版等もありますが、 今回はOSS版を使用している前提でのお話しです。 他の非同期処理が可能な gem との簡単な比較 FAQ · mperham/sidekiq Wiki · GitHub この内容は結構真実を語っていることを最近知った Sidekiq Redis マルチスレッド リトライ処理あり おしゃれなダッシュボード Resque
For full functionality of this site it is necessary to enable JavaScript. Here are the instructions how to enable JavaScript in your web browser.
こんにちは。Ruby化をすすめるメドピアをお手伝いしている@willnetといいます。 メドピアではPHPからRubyに移行するにあたり、単純に言語を置き換えるだけではなく、言語以外の仕組みについても適宜見直しを行っています。今回はそのうちジョブスケジューラを見直した件について書いていきます。 言語を置き換えた話はこちらを参考にしてください。 レガシーな独自フレームワークから脱却してRailsへ徐々に移行している話 - メドピア開発者ブログ そもそもジョブスケジューラってなに 「毎日1時になったら前日のアクセスログを集計して統計データとしてまとめる」などといった定期的に実行するジョブを登録するためのものです。 ウェブサービスを作るときのジョブスケジューラといったらやっぱりcronですよね。メドピアでもこれまでcronを活用していました。しかしサービスが小さいうちはcronでもそれほど問題な
mixiグループアドベントカレンダー2016 1日目です。 今回は、自分が今まで利用したRubyでの並列処理を書くためのgemとか知見を紹介します。 機運 先日のRubyKaigi 2016で、Ruby3ではGuildという新しい並列処理のモデル*1が、導入されるというセッションがあったり、concurrent-rubyというgemの開発が流行り初めて居たりと、Ruby界隈でも何となく並列処理がブームきているように感じます。 マルチプロセス/スレッド しかしRubyで並列処理するのは言語の仕様としてそれなりに制限があり、他の言語のようにThreadをバンバン立ててマルチコアで計算!爆速化!!みたいなのは難しいです。 というのも、Ruby1.9からネイティブスレッドは導入されたものの多くのC拡張を使ったgemのスレッドセーフ性が問題となるため、GIL(Global interpreter l
Sidekiq とは Sidekiq とは Rails アプリで非同期処理を行うためのライブラリです。複数のジョブを同時に実行することができ、メモリを節約することができます。 ということで今回は Sidekiq の基本と使いかたをざっくりと学んでいきたいと思います。 Sidekiq を使ってみる インストール まず前提条件として Redis が必要なのでインストールしましょう。Redis はジョブの管理に使われています。 brew install redis インストールは Gemfile に追加して bundle install するだけです! vim Gemfile # gem 'sidekiq' を追加 bundle install Worker を実装する 非同期処理を行うクラスは Sidekiq::Worker を include してつくります。あとは perform メソッド
要約 メモリ断片化は測定や診断が困難ですが、驚くほど簡単に修正できることもあります。マルチスレッドのCRubyプログラム(mallocのスレッド単位メモリアリーナ)におけるメモリ断片化の原因を追ってみましょう。本記事のボリュームは3343語、20分程度です。 単純な設定変更だけで問題を完全に解決できることはめったにありません。 私の顧客のSidekiqプロセスが大量のメモリを消費していたことがありました(1プロセスあたり1 GB程度)。開始当初の各プロセスは300MB程度でしたが、時間の経過とともにじわじわと肥大化してほぼギガバイトレベルにまで達したところで落ち着き始めました。 私は顧客にMALLOC_ARENA_MAXというたった1つの環境変数の変更を依頼しました。「2に設定してください」と。 プロセス再起動後、「じわじわ肥大化」現象はピタリと止みました。プロセスのメモリ使用量は以前の半
Railsで非同期処理:キュー。Sidekiq(+ActiveJob)がResqueよりも、とても簡単便利。RubyRailsResquesidekiqActiveJob メール送信や、重い処理、バッチなどでキューイングってよくやると思うんですが、Rubyではそれらを簡単に実現できるライブラリがいくつかあります。有名所だと、Sidekiq / Resque / Delayed Jobとか。僕はSidekiq / Resqueこの2つを使ったことがあるんですが…最近ではSidekiqの方が設定も簡単で使いやすかったので、Sidekiqにまつわる設定などもろもろまとめておきます。 ActiveJobについて Rails4.2からActiveJobというキュー操作のフレームワークが導入されました。これを使用することで、書き方が統一されるため、バックグラウンドのキューライブラリがSidekiqだろ
トレタのAPI開発を担当している芹沢です。 トレタでは、長時間かかるバッチ処理を複数台のサーバ上で処理させて短時間で処理できるバッチ処理基盤をAWS上で構築しました。この仕組みについて説明します。 目的 短期的には以下の課題を解決するため、長期的には似たような要件が再度発生した時に、同じ手法で解決できることを目的に作りました。 非同期でDBをデータソースとしたデータを加工してCSVファイルとして出力してS3にputしたい データソースはDBに入っているリアルタイムのデータであることが求められる CSVファイルの作成は決められた時間内に完了する必要がある 対象となるデータソースの量は日々増加し続けるが、常に決められた時間内にCSV作成が完了している必要がある 難点 今回の要件で技術的に難しい点は以下の2点です。 DBを直接参照しながら大量のデータを処理する 例えば、データソースとしてDBから
Looks like this domain has not been routed yet or is suspended. If it's your domain and you have questions, contact your service provider. Request ID: 98b227b42162d63c1ee2aba4736c2b67
まとめ sidekiqを2つのRailsアプリケーションで使ってみて、テストの書き方と残し方について思うところがあったので書いてみます。 特別な事情がなければsidekiq/testingを使うべき(sidekiq/testing/inlineは使わない) 非同期処理そのもののユニットテストはMyWorker.new.performで書けばよい 非同期処理をキックする側のユニットテストはMyWorker.jobs.sizeを検証するだけにする エンドツーエンドテストでは「全ての非同期ジョブを実行する」というようなstepやメソッドを作ってそれを呼ぶ sidekiq/testingとsidekiq/testing/inlineについて sidekiqのwikiには、テストのための仕組みとしてsidekiq/testingとsidekiq/testing/inlineの2つがあり、**「どちら
はじめに 先日、Ruby on Rails 4.2がリリースされました。このリリースで新たに追加された機能にActive Jobがあります。今回はActive Jobについての簡単な説明と、実際に動かしてみたソースについて書きたいと思います。 Active Jobとは Active Jobについて、Rails Guideより以下の文を引用します。 Active Job is a new framework in Rails 4.2. It is a common interface on top of queuing systems like Resque, Delayed Job, Sidekiq, and more. Ruby on Rails 4.2 Release Notes Active Jobは一言で表すと、「キューを実現するためのインターフェース」と言えると思います。あくまで
ホスティング事業部の CTL(Chief Technical Lead)の@pyamaです。本記事では先日盛大にリリースいたしましたロリポップの無料独自SSL機能の裏側について関わったメンバーのリレー形式で紹介したいと思います。 Let's Encrypt提供の背景 ロリポップ!のディレクターをしています@fuchinoです。ロリポップ!のリブランディングプロジェクトやプロモーション、プロダクト周り、イベントなどを担当する、ディレクターという名の何でも屋です。 Let's Encrypt提供の背景について、少し書かせていただきます。 2014年ごろから、急激に独自SSLの需要が増加しました。Googleが常時SSL化への取り組みを強化し、推奨したことが大きな理由です。2016年、Let's Encryptが正式に提供開始されてからは、その流れは一気に加速します。 ロリポップ!では、もともと
Railsで定時処理をやろうと思って色々トライしました。Sidekiq+Sidetiqを使ってHerokuの無料分で動作させることができたのでその手順を紹介します。 Railsでの非同期処理 古いものから新しいものまでいろいろ選択肢があります。 collectiveidea/delayed_job resque/resque mperham/sidekiq そしてRails4.2で実装される(された)ActiveJobというアダプタのような仕組みがあります。 以前開発したのアプリケーションではResqueを使っていたことと、3つのgemのなかではSidekiqが一番新しいということでSidekiqを使いました。 Sidekiqでの定時処理 本来Sidekiqは非同期処理のためのgemなので、Sidekiq単体では定期的に処理を実行するような仕組みはありません。X時間後に実行とかはありますが
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Use Sidekiq Directly, Not Through Active Job - Andy Croll 原文公開日: 2021/10/04 著者: Andy Croll 参考: 週刊Railsウォッチ20211018: SidekiqをActive Job経由ではなく直接使う 参考: Active Job の基礎 - Railsガイド Webアプリケーションを構築する場合は、ユーザーごとのレスポンスに要する時間を最小限に留めるべきです。Webサイトが速ければ速いほど、その分ユーザーも幸せになれます。 そのための方法の1つは、重くなる可能性のある処理(実行に長時間かかる、パラレル化可能な処理)を、イミディエイトなWebリクエストの外で非同期実行することです。メール送信、計画的なクリーンアップ、長時間かかる計算、外部API
小気味良いインターフェースのメタ検索エンジン『sidekiq』 January 6th, 2007 Posted in 便利ツール(ウェブ) Write comment 検索エンジンが増えてきた。従来のテキスト検索から画像検索、映像内言葉検索なんてものも出てきたぐらいだ。 そうなると検索エンジンを切り替えて求めるものを探す作業になるが、検索エンジンが増えてくるとそれも面倒だ。 そこで登場したのがsidekiqである。 このサイトはいわゆるメタ検索エンジンであるが、そのインターフェースがなかなか心地よい。 Ajaxで邪魔にならないようにサイドバー式に検索エンジンが選択でき、いらないときはもちろん隠しておくことができる。もちろん検索語を入力しなおす必要もない。 またさまざまな検索エンジンもカテゴリー別に分類されていて使いやすい。 面倒になってきた作業をまとめてみる。検索以外にも応用できそうな発
Railsで非同期処理を行う際にデファクトになりつつあるSidekiqですが、実際の運用ノウハウや少し踏み込んだトラブルシューティングは意外とまだウェブ上にリソースが不足しているという印象があります。そこでいくつか、基本的なことから少し踏み込んだ話まで、いくつか紹介したいと思います。 Sidekiqの導入・運用 Sidekiqの導入にはRedisが必要であるということはよく説明されるのですが、もう少し正確に言うとRedisをデータ保存先としてSidekiqというプロセスがスレッドベースで動きます。したがって正常にSidekiqが動くためには通常のRailsのプロセス(unicornやpassenger)のほかに、redis-serverのプロセス、Sidekiqのプロセスが動き続けていることが必要になります。(厳密に言えばSidekiqだけ動けばいいならRailsプロセスは不要です) re
なお上記の「大量配信」とは、「1~3月分の四季版を4月15日から配信開始し、1週間で全家族に配信完了する」などのように、「新しい期間の1秒動画をはじめて配信してから、その時点で条件を満たす全家族への配信が完了するまで」の期間を指します。1秒動画の生成・配信の大部分はこの大量配信期間に行っていることから、これを「大量配信」と呼んでいます。 生成・配信の流れ 1秒動画の生成・配信は、図1のとおり(1)対象家族抽出、(2)素材選択、(3)動画エンコード、(4)配信、の4段階で実現しています。以下ではその詳細を説明します。 図1 1秒動画の生成・配信の流れ (1)対象家族抽出 1秒動画の生成・配信処理は、基本的にはバッチ処理として毎日実行しています。そのはじめに行うのは、「その日、どの家族に、どのバージョン・どの期間の1秒動画を生成・配信するか」を取り出す対象家族抽出です。この処理は四季版
Ruby で非同期処理をするのに Sidekiq を使い始めた 基本的な使い方については Rails - sidekiqの使い方 - Qiita を見れば分かる 上記記事に書かれてないことについてつらつらと自分用にメモを残しておく いちいちワーカクラス書かないといけないの ActiveRecord と ActionMailer に便利メソッドが自動的に生える Delayed extensions · mperham/sidekiq Wiki スケジューリングしたい Scheduled Jobs · mperham/sidekiq Wiki 3時間後に実行したい場合こんな感じ MyWorker.perform_in(3.hours, 'mike', 1) MyWorker.perform_at(3.hours.from_now, 'mike', 1) どうせ Sidekiq のデーモン起動し
前置き:Rubyのキューイングシステム Rails(Ruby)で非同期にキューイングしてくれるライブラリといえばSidekiqですよねっていうくらいSidekiqが好きなんですが、世の中のシェア的にはResqueなのかな。でも、Sidekiqの方が安定的に動かせているので僕は好きです(delayed_jobは知らない)。 ShoryukenというAWS SQSを使ったキューイングシステムもあり、RedisじゃなくてSQS使いたいっていう場合は、これも良いのかもしれないですね。まぁ、ローカルの場合面倒そうな感じもありますけど。 phstc/shoryuken まぁともかくSidekiqを導入してキューイングするっていうのは、もう超絶簡単にできるわけです。できるんですけど、実際にラフに運用していくと、キューがいつの間にかこけて処理待ちで埋まってたり、レアなケースで例外投げて死んでたりするわけで
応答に500ms以上掛かる外部APIに依存するサービスを作ってて、Unicornのworker数だと簡単に詰まって死ぬという現象が起きていたのでしばらく前にPumaに置き換えました。 既に Nginx + Unicorn で運用しているサーバのUnicorn部分をPumaに置き換えるのは割と簡単で、これを参考にしたらほぼうまくいきました。(*) coderwall.com : establishing geek cred since 1305712800 (*) ただし、capistranoを set :pty, true にすると capistrano-sidekiqが効かずにsidekiqが動かなくなって死ぬというknown issueを踏んだので注意 それ以降、順当に運用できていたのですが、負荷がかかったときに500エラーが出るという現象はUnicornよりマシになったものの出続けて
概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Limit Rails memory usage, fix R14 and save money on Heroku 原文公開日: 2018/01/15 著者: Paweł Urbanek 理論的には、Herokuの512MB dynoが1つあればRails webサーバーとSidekiqプロセスを両方とも動かせます。トラフィックの少ないサイドプロジェクトで月7ドルを節約できればとても助かります。残念なことに、1つのdynoでRubyプロセスを2つ動かすとメモリの問題が生じることがあります。本記事では、Railsアプリのメモリ使用量を制限する方法について説明します。 最近読んだBilal Budhaniの良記事では、1つのHeroku dynoでSidekiqプロセスとPumaを同時に実行する方法について説明していました。私のサブ
「Sidekiq のワーカーノードが稼働する EC2 インスタンスをオートスケールしたい」という依頼人の願いを、匠が叶えます。 このストーリーの登場人物は以下の2人です。 依頼人 = アプリケーションエンジニア or マネジメント層(適宜文脈によって読み替えてください) 匠 = インフラエンジニア Before まずは依頼人が抱えるお悩みについて話を聞いてみることにします。 インフラ構成 依頼人のサーバ構成は、 Sidekiq では標準的な構成を採用していました(図1, 2)。 Web ノードでタスクを Redis 登録し、 Worker ノードで Redis からタスクを取り出し実行します。 Web ノードは API として外部に公開されているほか、 Sidekiq の GUI として利用しています。 各ノードは AutoScalingGroup を構成していますが、台数固定で稼働してい
少し前にRails4.2のActiveJobのバックエンドについて調べました。 Resque、SidekiqからSucker PunchまでActiveJobのバックエンドについてひと通り調べてみた このときSidekiqのコードを読んで、Celluloidによるアクターモデルで並行処理を実装していることを知りました。 ちょうどScalaやErlangでアクターを使う方法を調べていたところだったので興味がわき、Celluloidを利用したアプリケーションのサンプルとして読んでみることにしました。 その時見つけた愉快なメソッドを紹介します。 今回読んだSidekiqのバージョンは3.3.3です。 注意事項 本エントリはSidekiqやアクターの解説記事ではありません。 記事に機種依存文字が含まれています。 OSXのChromeとFirefox、iOSのSafariとChromeでのみ表示を確
お久しぶりです。サーバーサイドエンジニアの花井です。 みなさんは非同期処理に何をお使いですか? ActiveJobでしょうか? Resqueでしょうか? Sidekiqでしょうか? 弊社では歴史的経緯から、上記全てのgemをプロダクトで使っていますが、 この度Sidekiq Enterpriseを導入して非同期処理の統一に着手しました。 Sidekiq Enterpriseの日本語記事があまりなかったので、利用の検討や実際に使う際の注意点などを紹介できればと思います。 What is Sidekiq SidekiqはRuby製の非同期処理フレームワークです。 resqueを使うと、ジョブのリトライとユニーク性の担保のために自前で実装が必要でつらいので、sidekiqの採用に至りました。 また、非同期処理の流量を制限したい(特に外部サービスへの問い合わせが発生する所)という意図があり、Ent
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く