クックパッド開発者ブログスマートフォン用の表示で見るクックパッド開発者ブログ2014-08-28クックパッドにおける最近のActiveRecord運用事情インフラストラクチャー部の成田(@mirakui)です。アクセスできるので、アプリケーションの開発効率という観点ではメリットが大きいです。駆使されているアプリケーションをサーバに配置してプロダクションとして運用する立場からすると、いくつかの問題に突き当たります。運用しているエンジニアという立場から、いくつかの知見を紹介します。系の事情として読んでいただけると幸いです。マイグレーションを使わないクックパッドの本体アプリケーションでは標準のマイグレーションを使っていません。クックパッドでは数十名のエンジニアが、ほとんどの人はお互いにどんな作業をしているかを知らずに、一つの巨大なモノリシックアプリケーションを開発しています。テーブル追加やカラム変更も毎日何回も行われています。1アプリケーションごとに1つしか持てないため、われわれのような状況ではマイグレーションファイルを全員で共有し、互いの作業をブロックせず運用するのはなかなか難しいと考えています。サーバの負荷が高い場合があり、必ずしもデプロイ時に実行するのが好ましいとは限りません。そこで、サーバ負荷をリアルタイムに把握している、私の所属するインフラストラクチャー部のエンジニアが実行タイミングをコントロールしたいという要求もあります。アプリケーションの分割こうした状況を解決する方法のひとつは、1チーム1アプリケーションになるように、マイクロサービスにアプリケーションを分割することです。アプリケーションが単機能であり、それに関わっている開発者も数名という状況であれば、マイグレーションはうまく機能することが分かっています。やり方で開発されています。一部の機能はマイクロサービス化され、クックパッド本体からは分離されましたが、依然としてクックパッド本体については巨大なモノリシックアプリケーションです。弊社の菅原が開発した、スキーマ管理用のコマンドラインツールです。コマンドでそれをデータベースに反映します。優れているのは、カラムを追加したければ、カラム追加のマイグレーションを書くわけではなく、テーブル定義にカラム定義を一行足すだけでいいという点です。上のテーブル定義と比較します。おけるテーブル定義には、冪等性が保証されています。以下のようなフローで運用しています。発行し、スキーマを試行錯誤する。