もう一年以上前の話ですが、エキサイトのWisteriaをAWSに移行した話を書こうと思います。
Wisteriaとは
機械学習を使ったコンテンツレコメンドのシステムです、紹介ページ
システム構成
移行前のシステム構成はこんな感じ、MLの部分が重いのでキューの仕組みを入れて処理をしていました。
移行前の課題
- openstackが暴走する
- cassandraが安定しない
- zookeeperのファイルがよく壊れる
- stormがうまく立ち上がらない
- 色んなミドルウエアのバージョンが古い
- 障害時にサーバーが多すぎて、原因の特定が難しい(ログが色んな場所に点在)、zabbixも入れているがそれだけでは追いきれない
会社ではDevOpsが推奨されていたので、サーバー周りもアプリケションエンジニアが見ないといけない、3ヶ月に一度は障害が起きていたのでしんどい
移行の計画
オンプレでは運用上の色んな問題があり、せっかく移行するので問題を解決しつつ、クラウドに最適化した形で運用のコストを下げたいと言う思いがありました、そこで考えたプランは3つ
-
プランA (色々最適化)
-
Front / Api / Tool / Batch はコンテナ(ECS)
-
MySQLはAurora
-
CassandraはDynamoDB
-
Kafka、StormはKinesis、Lambda
-
AutoScale、自動Deployなど
-
プランB (問題になっている部分をなるべくマネージド)
-
Front / Api / Tool / Batch はEC2
-
MySQLはAurora
-
CassandraはDynamoDB
-
Kafka、StormはMSK、EC2
-
AutoScale、自動Deployなど
-
プランC (ほぼ何もせずそのまま移行)
-
Front / Api / Tool / Batch / Cassandra / Kafka、Storm はEC2
-
MySQLはAurora
-
AutoScale、自動Deployなど
移行期間が2ヶ月と言うこともありプランAは現実的に無理、頑張ればプランBで行けるかもしれないということでプランBで行くことにしました。
メンバー構成
初期メンバーは3名+途中から1名追加になり計4名で行いました、分担は以下の通り
- EC2を構築してアプリケーションを移行するメンバー
- CassandraをDynamoDBに移行するメンバー
- Kafka、Stormを移行するメンバー
- その他は手が開いた人がやる
みんなクラウド移行はほぼ初めてだったので、実際に移行を始めるといろんな問題が発生することになった
移行
EC2編
オンプレ時代からansibleで構成管理していたので、スムーズにくと思っていたが…
- OS古い問題
- Ubuntu16を使っていたがサポートが2021年で切れるため、やもなくUbuntu18へアップデート
→ これにより諸々のパッケージのバージョンが上がる、フロント、APIをphpで書いていたので、アプリケーションのテスト工数が膨らむ、やもなくphpだけダウングレード
Kafka/Storm編
- バージョンがあまりにも古い問題
- Stormのバージョンがv0.9.xだったので、ec2でもこのバージョンをインストール、Amazon MSKと連携してみたが全くうまくいかない
→ チーム内で協議
①stomのバージョンをあげてMLのソースを書き直す
②MSKを使わず、kafkaをec2で構築する
③kafka/stormをやめる
→ ③を選択し、kinesis/Lambdaにすることにしました。理由は、運用で悩まされていたkafka/stormをやめたかった、将来的にStormをやめるのにソースを書き直すモチベーションがわかないなど
Cassandra編
- Cassandraのデータ移行に悪戦苦闘
- マイグレーションツールを使って移行をする予定で進めていたが、Macだとツールが不安定で落ちたり、ツールの使い方も分からなかった部分もあり悪戦苦闘、ようやく進んだと思ったらcassandraとツールのバージョンが合わず、そもそも使えなかったりで1ヶ月溶かす
→ 結局マイグレーションツールを使わず、cassandraのデータをダンプして、データパイプラインで入れることにしました。
移行後の構成
そんなこんなで移行後の構成はこうなりました。
当初想定していた構成とは若干異なりますが、ec2以外はマネージドにすることが出来ました。
感想
大変な部分もありましたが比較的順調に移行が行えました。
クラウドに移行したことにより、運用で問題になっていた部分もほぼ解消し、安定した運用が行えるようになりました。
費用も半分以下に抑えることができてよかったです。
サーバー周りのインフラ的なことから解放され、アプリケーションに専念できることが一番よかったとつくづく思います。