質問: WEBサービスであるということで、サービス提供後に新機能を追加したい場合やバグフィックスしたい場合が必ず出てくると思っています。 しかし、サブドメイン形式であるとサブドメイン毎(1サイト)にサーバーデータ、DBをデプロイすることになるため、 例えば100サイト運用していく場合は100サイト分デプロイしなければならないのか・・?という点が正直全く分かっておりません。 この手のWEBサービスの開発経験は全く無いため、うまく運用する方法は存在するのではと思っています。 例えば、Backlogはサブドメイン形式でスペースを割り当てる形式だったかと思います。 ・どこかにメインデータ、メインDB(言い方は合っていないと思います)を格納しておき、 スペース作成(サブドメイン作成)時にそこから引っ張る。 ・メインデータ、メインDBをアップデートし、全サイトに適用する何らかの仕組み 少し考えてみて思い浮かぶ方法(実現できるかは別として)は上記です。 恐らく色々と見当違いなのではと思っています。 参考サイトやご助言をいただきたく、何卒よろしくお願いいたします。
回答: 現状の情報から私が設計するなら以下の様なかんじでしょうか。 選定するクラウドサービスはAWS 理由としては色々ありますが、 * フルスタックで比較的安価にサポートしてくれるような業者が複数存在すること * Route53やRDS、ELB、S3などの機能がかなり安価に使い始められること(それ前提で新規に設計出来る場合) あたりを考えると、エンタープライズ用途でのスモールスタートとしては現状、ほぼ一択だと思っています。 その上で構成としては ELB(ロードバランサー) の下にn台のwebサーバを設置し、負荷によってスケールアウトするようにする。(AWSならごく簡単に可能) 展開されるソースコードは1つとし、全てのリクエストはそこで受け付ける。 DBはRDS(MultiAZ)にして冗長性を確保した上で、スナップショットを日時でとる(これも簡単) という感じにし、 DB内のデータベースは顧客毎に分ける(可能であれば一つのデータベースの方がメンテナンス性が高いが、設 計難易度、特にパフォーマンスの確保が大変になる) 顧客別の情報は原則としてDBに格納し、それが難しい場合は非公開のディレクトリに格納して、それを顧客のサブドメインごとに読み出せるような仕組みを作る。 アプリケーション的には virtualhostで[https://userA.ドメイン名/]を全て一つのコントローラーで受けるようにして、userAをGET値としてsymfonyに渡す。 *symfony2でマルチドメイン対応の機能や定石/ライブラリがあるならそれを使う symfonyでは「UserA」を受け取ったらそこからデータベース接続情報を取得し、顧客情報のデータベースを取得して、アプリケーションを動かす。 とすれば、割と色々な要件に柔軟に対応でき、かつ可用性を最大限に高められるかなと思います。