1~2秒止まるだけで数百万円の損失が発生する
システムの話に入る前に星野氏は、現在の楽天市場がどれほどの規模に成長しているのかを簡単に紹介した。楽天ID発行数は1億以上、商品登録数は3.6億点以上、国内EC流通総額は5兆円突破(2021年)。この数字を聞くだけで、絶対に止めてはいけないシステムになっていると感じられる方も多いだろう。実際、「1~2秒止まるだけでも損失が発生する。ユーザーだけでなく出店している店舗にも迷惑をかけてしまう」(星野氏)というくらい、停止させたときの損失が大きくなっている。
その「絶対に止めてはいけないシステム」の全体像として、星野氏はサービス構成図を披露した。サブシステムの名前や機能は消してあるが、サブシステム間の関係などは本物だ。そして、サービス構成図を公開するのはこれが初めてだという。
図を見ると、数十のサブシステムが連携しながら動いていることが分かる。個々のサブシステムは、数十~数百、大きいものでは千台規模のサーバーで動かしているという。そして、「サブシステム1つで、スタートアップ1社の企業システムくらいの規模」になっている。
星野氏は図を見ながら、大部分が疎結合のシステムにできていると語るが、個々のサブシステムを見ていくと「まだモノリシックな部分や、分かりにくい部分が残っている」とも評する。「しっかりと疎結合ができていてコントローラブルな形で小さくなっているべきだが、きちんと設計して作っていくのが非常に難しい」。
楽天市場の開設は1997年。今年で開設25周年となる。成長に合わせるようにシステムを書き換え続けているが絶対に止めてはいけないシステムになっている以上、一度にシステム全体を刷新するというわけにはいかないのだろう。
それでも楽天市場のシステムは、少しずつあるべき姿に向かって変化しているという。とはいえ、古い設計のサブシステムを一気に変えることはできない。古いサブシステムを一つひとつ新しいものに変えていっているそうだ。昨年も、大きなサブシステムを1つ書き換えるプロジェクトを完了させたという。
星野氏は、サブシステムの書き換えには2つの挑戦があるという。1つ目は、移行を前提にしながらもいつでも戻せる状態を作っておくことだ。「新しく作るときは、常に古い方も意識して進めなければならない、データも新しいサブシステムと古いサブシステムの間で常に同期ができているという状態を作っておかなければならない」。
実際、昨年に完了したプロジェクトでは、開発したソフトウェアのうち半分以上が新旧の同期を取るものや、互換性を保つためのものだったという。「サービスを止めずに継続しながら、サブシステムを置き換えていくには、常に戻せる状態を作っておくことが欠かせない」と星野氏は語る。移行をうまく進められないと判断したときは、すべてを古い状態に戻すと決断することもあるそうだ。
2つ目の挑戦は、プロジェクトに関わるメンバー全員に仕様を正しく理解してもらって、正しく実装してもらうことだ。昨年の移行プロジェクトでは、50件以上のドキュメントを作成し、そのドキュメントを、プロジェクトに関わる各チームが正しく理解できるようにサポートしながら、進捗を確認し、同期を取りながら進めていったという。
さらに星野氏は「プロジェクトが大きくなっていくと、仕様、アーキテクチャ、それを作るアーキテクト、プロジェクトマネジメント、開発全体のチームの総合力、全体のチームマネジメント、このようなものが問われる。ソフトウェアを書くだけでは、なかなか成功しない。本当に総力戦だ」と付け加える。