質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Chef

ChefはRuby等で書かれた構成管理ツールです。 システム構築や、運用作業を自動化してくれます。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

受付中

クラウドで複数のサービスを展開する際に用いるべきプロビジョニングツールとは

yokatone
yokatone

総合スコア0

Chef

ChefはRuby等で書かれた構成管理ツールです。 システム構築や、運用作業を自動化してくれます。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

-1評価

0クリップ

1113閲覧

投稿2018/08/26 02:41

編集2022/01/12 10:55

質問したいこと

なんでもかんでもDockerを使うべきなのか?
といったところが主題です。

CIツールなどを使ってみて、ふと抱いた疑問です。いろんな意見が聞ければと思います。
大規模サービスの経験がないので、そもそもが違っていたらすみません。

前提

変な仮定ですが、本体は同じサービスだけど、
顧客ごとにバージョンが違うような運営がされてるサービスがあるとします。

/var/www/html --[顧客A ver.Oxygen] --[顧客B ver.Luna] --[顧客C ver.Kelper] --[顧客D ver.Luna]

これがapacheないしはnginxによって、
virtualHost機能などで顧客A.example.comとか、
example.com/顧客Aとかで配信されてるとします。

また、ミドルウェアとしてMySQLなどのDBがあって、
一つのDBサーバー上でdatabaseが分かれており、
内部的には区切られた運用がされているとします。

各バージョンごとのhotfixはそこそこ頻繁にされていて、
masterへと統合され次第、各バージョンに対してパッチしていたとします。

これを従来では手作業で新規契約ごとにデプロイしていて、
修正があるたびに各バージョンに対してパッチしていたのを、
一斉にプロビジョニングツールに置換しようという機運が高まったとします。

本題

このとき手法として、大きく

  • Chef, Ansible, Gitで冪等性を保てるように手作業していた部分を置換
    Webサーバー、ミドルウェアの部分は従来通り共通
  • Docker(+private registryサーバー), CIツール, Gitを用いて、
    masterがpushされ次第、ExampleImage/Oxygen:latestのようなイメージを作成し、
    docker-composeを用いてdown/pull/upするようにする。
    Dockerイメージはソフトウェア、ミドルウェア、Webサーバーなんかをひとかたまりにしていて、
    アクセスはnginx-proxyとかでコンテナ内部にリバースプロキシする。
    よってWebやミドルは分割される。

の2つがあると思うのですが、
これをVPSで動かす時、どちらの手法がメリットが大きいんでしょうか?

つまり、Dockerはいろんなリソースをひとかたまりにしている以上
顧客数が100などのオーダーであった場合、メモリの面で費用が嵩むような気がします。
その代わりDockerによって細やかな設定の手間は省くことができます。

対してAnsible,Chefでは運用の実態としては従来通りだが
修正だったり新規契約だったり毎に発生する作業を簡略化できます。
しかしながら都度軽いRecipeの修正が必要になってくるでしょう。

もちろんコンテナ内で動くプロセスの持つ負荷によりますし、
VPSのコストというのも、Recipe修正で動く人の単価やサーバー単価によって変わってきますが、
この二者において、サービスがかなりスケールした時に、
明らかにどちらかの方が優れている、と言えることはあるのでしょうか。

付記

たとえばDockerを使うことでapacheのC10K問題のようなメモリ不足が
100ユーザーくらいできてしまうと目も当てられないですし、
Ansible+Chefで運用するにしても、たとえばnginx+PHPだと
(詳しいことは知りませんが)PHPはシングルスレッドなので、動作の低速化が懸念されるような気がいたします。
(=パフォーマンスが落ちる)

DBが分かれていることで不具合が起きた時に対処しやすそうなのはDockerですし、
でもDockerで--memoryを使うってなんか違う気がしますし、、
一部の顧客が高負荷になったときにAnsible+Chefでは共倒れしてしまいそうですが、
dockerならうまくバランスが取れそうです。
とはいえdockerを使うとベースのメモリ消費量が高いから、
そもそもスケールした時点でコストがものすごくかさんでしまいそうです。

クラウドで負荷に応じてAuto-Scalingできるとはいえ、
Dockerによってベース負荷がそもそもものすごく膨らんでいるのであれば、
同じAuto-Scalingであれば初期構成がAnsible+Chefであるほうが
夜中などのサービスが落ち着いた時間は全然コストがかからないなど、
軍配が上がりそうな気がしています。
とはいえ先ほど申し上げたように一つのWebクライアントに集約的な運用だと
落ちた時の信頼の損失とか、そういったコストが大きくなりそう....

そんなところで、全体のアクセスが集中しても1万くらい/顧客件数が100件程度であればAnsible+Chef,
それより高い負荷がやってくる/顧客数を持ったのであればDockerなのかな、なんて思うに至りましたが、
皆さんどうでしょうか。ぜひご意見お聞かせください!

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Chef

ChefはRuby等で書かれた構成管理ツールです。 システム構築や、運用作業を自動化してくれます。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです