質問したいこと
なんでもかんでも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つがあると思うのですが、
これをクラウドで動かす時、どちらの手法がメリットが大きいんでしょうか?
つまり、Dockerはいろんなリソースをひとかたまりにしている以上
顧客数が100などのオーダーであった場合、メモリの面で費用が嵩むような気がします。
その代わりDockerによって細やかな設定の手間は省くことができます。
対してAnsible,Chefでは運用の実態としては従来通りだが
修正だったり新規契約だったり毎に発生する作業を簡略化できます。
しかしながら都度軽いRecipeの修正が必要になってくるでしょう。
もちろんコンテナ内で動くプロセスの持つ負荷によりますし、
クラウドのコストというのも、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なのかな、なんて思うに至りましたが、
皆さんどうでしょうか。ぜひご意見お聞かせください!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/26 13:03 編集