背景
Symfony2を使い、ある予約システムのクラウドサービス展開を検討しています。
前提
・データは全て当方にて管理(顧客サイトからはリンクで飛んでくるイメージ)
・サブドメイン形式(https://userA.ドメイン名/)
・負荷分散させるため複数サーバーを使用する予定(レンタルサーバー)
上記を実現するため、ドメインはXREAで取得し、DNSレコードをサブドメイン毎に設定し、
複数サーバーに割り当てる方式を検討しています。
疑問
WEBサービスであるということで、サービス提供後に新機能を追加したい場合やバグフィックスしたい場合が必ず出てくると思っています。
しかし、サブドメイン形式であるとサブドメイン毎(1サイト)にサーバーデータ、DBをデプロイすることになるため、
例えば100サイト運用していく場合は100サイト分デプロイしなければならないのか・・?という点が正直全く分かっておりません。
この手のWEBサービスの開発経験は全く無いため、うまく運用する方法は存在するのではと思っています。
例えば、Backlogはサブドメイン形式でスペースを割り当てる形式だったかと思います。
・どこかにメインデータ、メインDB(言い方は合っていないと思います)を格納しておき、
スペース作成(サブドメイン作成)時にそこから引っ張る。
・メインデータ、メインDBをアップデートし、全サイトに適用する何らかの仕組み
少し考えてみて思い浮かぶ方法(実現できるかは別として)は上記です。
恐らく色々と見当違いなのではと思っています。
参考サイトやご助言をいただきたく、何卒よろしくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
現状の情報から私が設計するなら以下の様なかんじでしょうか。
選定するクラウドサービスはAWS
理由としては色々ありますが、
- フルスタックで比較的安価にサポートしてくれるような業者が複数存在すること
- Route53やRDS、ELB、S3などの機能がかなり安価に使い始められること(それ前提で新規に設計出来る場合)
あたりを考えると、エンタープライズ用途でのスモールスタートとしては現状、ほぼ一択だと思っています。
その上で構成としては
ELB(ロードバランサー)
の下にn台のwebサーバを設置し、負荷によってスケールアウトするようにする。(AWSならごく簡単に可能)
展開されるソースコードは1つとし、全てのリクエストはそこで受け付ける。
DBはRDS(MultiAZ)にして冗長性を確保した上で、スナップショットを日時でとる(これも簡単)
という感じにし、
DB内のデータベースは顧客毎に分ける(可能であれば一つのデータベースの方がメンテナンス性が高いが、設
計難易度、特にパフォーマンスの確保が大変になる)
顧客別の情報は原則としてDBに格納し、それが難しい場合は非公開のディレクトリに格納して、それを顧客のサブドメインごとに読み出せるような仕組みを作る。
アプリケーション的には
virtualhostで[https://userA.ドメイン名/]を全て一つのコントローラーで受けるようにして、userAをGET値としてsymfonyに渡す。
*symfony2でマルチドメイン対応の機能や定石/ライブラリがあるならそれを使う
symfonyでは「UserA」を受け取ったらそこからデータベース接続情報を取得し、顧客情報のデータベースを取得して、アプリケーションを動かす。
とすれば、割と色々な要件に柔軟に対応でき、かつ可用性を最大限に高められるかなと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/31 03:34
DBが特に難しそうですね。
共通DBと、個別DBと分けたほうがいいのかもしれませんね。
AWSは確かに、これなのかな、、とは薄々思っていましたが、月数万円はかかると勝手に思っていたため足踏みしてしまっていました。EC2やらS3、RDSなど、結局何があればいいのか?という所で思考がストップしていました。
サーバー周りはド素人ですが、無料期間が1年あるようなので試行錯誤も含め検討してみます。
しがない個人事業主のためAWS業者に依頼する金銭的な余裕がない(相場観が分かりませんが)ので、独学でやってみようと思います。
2016/05/31 04:21
AWS上記の形だと、同じくらいのトラフィックを捌くのに1-2万円はかかってしまいます。
が、これくらいの値段で殆ど何も考えずにかなり固い可用性を確保出来るというメリットは計り知れないので、出来れば最初からAWSで、コスト的に辛ければ最初はVPSでサービスインするが、AWSでの運用/移行を意識した設計をするといいかもしれませんね。