マルチテナントWebアプリの作成について
SaaS事業を提供する会社で働いているとマルチテナント構成について色々悩む事があるんだけど、データの分離、アプリサーバ・DBの利用効率を考えると、こんな構成が取りたい。
- appサーバは全アカウント共通で使いたい
- DBは小さいアカウントについてはできるだけ1台に詰め込みたい
- 大きいアカウントについては少数のアカウントだけを入れたり、1アカウントだけで専有させたい
要するに、この中のF. シャード マルチテナント データベースを利用したマルチテナント アプリっぽい構成が良いなと思う。
こういう構成取る時に悩ましいのが、高度に抽象化されたORM、Web Application Frameworkとの相性が悪い事。だいたい複数DB構成には対応していないので、通常隠蔽されているコネクションを操作するコードを書くか、そのための拡張ライブラリを使う必要がある。Railsだとapartmentとかがそれに当たる。
でも最近はここ数年の個人的なRails疲れもあってバックエンドは別にファットなWeb Application Frameworkを使わなくても良いかなという気がしてきていて、例えばGoでAPIサーバを書くんだったら、コネクションを隠蔽したORMを使わないでこんなんでも良いのかなと。
ほとんどGo書いた事ないので色々突っ込みどころはあると思うんだけど、だいたいこんな感じ。