みんな、どうしてる?ミドルウェアのバージョンアップ戦略
はじめに
paiza株式会社で、エンジニアをやっております。yukimuraと申します。
この記事では、どう対処していくか悩ましいテーマである「ミドルウェアのバージョンアップタイミングどうするの?」という点について、paizaで、どう向き合っているのかを伝えたいと思います。
我々の愛するテクノロジーの世界は、技術的な進歩は目まぐるしいもので、「新しいもの好き」が報われるフィールドといえます。基本的には、新しいものほど「便利で」「高速で」「セキュリティ的にも安全」になっており、メリットだけを考えるならば新しくしておくに越したことはありません。
しかし、全てを最新に追従することができるか?という問に対する答えはNoです。
新しいバージョンは、確かに魅力的です。セキュリティが強化されていたり、かっこいい新機能が使えたり、アンテナの高いエンジニアへのアピールになるかもしれません。でも、無闇にバージョンをあげても、思わぬバグに遭遇したり、最悪ではサービスが停止したりとリスクも存在します。
「バージョンアップはするべき!でもちょっと待って、リスクは?」というジレンマに対して、paizaでは、以下のようにバージョンアップ戦略を整理して向き合っています。
3つのバージョンアップ戦略
paizaでは、各種ミドルウェアを3種類に分けて、それぞれの情報収集と対応を行っています。
1. 積極的なバージョンアップ戦略
1つ目は、積極的なバージョンアップ戦略です。
常に最新情報をキャッチして、アップグレードのチャンスを逃さないようにして、極力最新に保ちます。
対象のミドルウェアは、
- リターン(開発メリット・採用メリット/デメリット)が大きいもの
として、RubyやNodeJSを選出しています。
例えば、Ruby主体で開発をしている企業でRubyのバージョンが古いままだと、
「え、まだRuby 2系使ってるの?(採用辞退しよ...)」なんてことになりかねません。
また、開発者という立場からみると、「Rubyの3系から、yjitの効果がRailsでも発揮されやすくなっていて良さそう!!」みたいな会話が生まれると純粋に楽しいですし、アガリます。
この戦略では、バージョンアップを頻繁に実施することになるので、「開発環境をDocker化してバージョンアップを手軽に試せるようにする」「CIでの自動テストを充実化する」といったバージョンを簡単に安全に上げるための改善も合わせて行っています。
この戦略をあてるからこそ、自動化などの投資に対するリターンも得られやすくなりますので、積極的にバージョンアップを楽に/安全にするという活動もしやすくなります。
2. 日和見的なバージョンアップ戦略
2つ目は、日和見的なバージョンアップ戦略です。
この戦略では、バージョンアップのメリットとリスクを天秤にかけて、場合によってはバージョンアップを先送りすることもあります。
- できれば積極的なバージョンアップを狙いたいもの
- でもバージョンアップ自体のリスク・コストが大きいもの
として、MySQLが該当します。
例えば、MySQLは、バージョンをあげるとパフォーマンス(レイテンシーだったり、CPU/Memoryなどのリソース効率だったり)がよくなったり、新しい便利なSQL表記が利用できるようになったりと、大きなメリットがあります。一方で、バージョンアップによって互換性の問題が生じたり、ダウンタイムが発生するなどもあります。
この戦略をあてているものについては、都度調査を行い、メリット/リスクを天秤にかけて、計画的に対応を進めます。
3. 消極的なバージョンアップ戦略
最後は、消極的なバージョンアップ戦略です。
この戦略では、「必要に迫られてのバージョンアップ」を行います。
リスクの高いセキュリティパッチが当たっていなかったり、サポートが終了した古いバージョンを使い続けない程度にバージョンアップを行います。ここの調査に時間をかけるよりは、他の活動に時間をあてて、より付加価値の高い活動にあてようという考え方です。(名前はネガティブに見えますが、考え方はとてもポジティブなものです。)
- 内部のネットワークに閉じられていて、構成上インシデントが発生しにくいもの
- 利用が局所的で、バージョンアップの恩恵が得られにくいもの
として、Redis,OpenSearch,RabbitMQなどが該当します。
まとめ
3つのバージョンアップ戦略をまとめます。
戦略名 | 対象に含める判断軸 | 該当ミドルウェア | どうするか |
---|---|---|---|
積極的なバージョンアップ戦略 | 開発メリットの大きさ 採用メリットの大きさ リスクの小ささ |
Ruby NodeJS |
可能な限り最新情報を入手し、積極的にアップグレードしていく。 |
日和見的なバージョンアップ戦略 | アップグレードリスクとのバランス | MySQL(RDS・Aurora) | なるべく上げていくが、リスクを整理した上で対応時期・対応方針を決める。 |
消極的なバージョンアップ戦略 | 部分的にしか利用していない バージョンアップの恩恵が少ない |
Redis RabbitMQ OpenSearch |
セキュリティリスクが高い場合・EOLを迎えてしまう場合に上げる。 |
以上のように、paizaでは、ミドルウェアのバージョンアップ戦略を明文化することで、「あれ、これ、いつバージョンアップするの?」といった迷いをなくしたり、「これは、消極的なバージョンアップ戦略の対象だから、他の重要度の高いことを進めていこう」とか、「積極的なバージョンアップ戦略にもとづいて、RubyのバージョンをあげてCI通ったのでリリースしていきます〜」といった、アクションに繋げています。
paizaではさまざまな職種のエンジニアを募集しております。
ミッション・ビジョン・バリューに共感できる方、paizaの取り組みに興味/関心がある方からの応募を心からお待ちしております。
Discussion