Closed jacopen closed 3 years ago
何を使って非同期にする?
どこまで可用性を担保するか
Active Job のアダプターとしては現状公式にはここで紹介されています
https://api.rubyonrails.org/classes/ActiveJob/QueueAdapters.html
SQS とか Saas を使えれば Que の可用性については心配しなくて良くなるけど、SQS のアダプターは https://github.com/phstc/shoryuken という gem のみで、これはメンテナーがほぼ一人しかいないのでちょっと保守性が心配という懸念点があります。
どこまで可用性を担保するか
この話が重要なことには変わりないと思いますが、おそらくこの数値が Elasticache Redis cluster のマルチAZ構成の可用性を上回ることってないんじゃないかとも思います。dreamkast-infra の cfn を見た感じでは現状のアーキテクチャって Elasticache Redis cluster のマルチAZ
を採用していますよね(cfn 初見なので雰囲気しかわからないですが)?
これが真ならバックエンドは sidekiq で問題なさそうな気がします。コネクションの試行回数を制限するとかの運用上の課題が他の機能とバッティングしないか、もしくは棲み分けられるのかとか具体的な話はいっぱいあるかもですけど。
2020/12 に AWS-SDK-Rails の new feature release で SQS が使えるようになっているっぽいのでこれが最適解なような気がしました。 https://aws.amazon.com/jp/blogs/developer/introducing-new-features-for-the-aws-sdk-rails-gem/
Railsだと使いづらいらしい?(oshiroさんいわく)
完全に嘘をついてしまいました。
今の実装ではメールを同期で実装している。 もしSESで送信エラーが起きた場合はエラーを握りつぶすワイルドな実装になっている。
理想としては非同期でメールを送信しつつ、エラーが起きた場合は適切に再送信を行えるようにするべき。
非同期で送れるようにするには何を使ってどう実装するか検討する