SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2020】セッションレポート (AD)

オンプレからマルチクラウドへ――ZOZOTOWNの事例に学ぶシステム基盤刷新の秘訣【デブサミ2020】

【13-A-4】我々はZOZOTOWNのクラウドジャーニーを通じて何を学んだのか?

  • このエントリーをはてなブックマークに追加

 株式会社ZOZOテクノロジーズは、日本最大級のファッション通販サイト「ZOZOTOWN」のシステム基盤を、オンプレからマルチクラウドを活用したクラウドベースへと刷新するプロジェクトを推進している。このプロジェクトを牽引するのが、川崎庸市氏が所属するリプレースチームだ。本セッションでは、プロジェクトのなかから「ZOZOTOWN」のバックエンド参照系APIシステムの刷新にフォーカス。リプレースに取り組んだ経緯やシステム基盤刷新によって得られた知見について川崎氏が語った。

  • このエントリーをはてなブックマークに追加
株式会社ZOZOテクノロジーズ 開発部 ZOZOTOWNリプレースチーム エンジニア 川崎庸市氏
株式会社ZOZOテクノロジーズ 開発部 ZOZOTOWNリプレースチーム エンジニア 川崎庸市氏

ZOZOTOWNの選択したリプレース戦略

 日本最大級のファッション通販サイト「ZOZOTOWN」ではもともと、オンプレをベースとしてインフラ基盤を構築していた。だが、サービスが成長してユーザー数・リクエスト数が増えるにつれ、徐々に課題が見えてきたという。

 例えばオンプレの場合、リソース調達にはどうしても時間がかかってしまう。インフラの構築・運用にかかる人的コストも大きい。さらに、パフォーマンスやコストの最適化を目的としてサーバーのスケーリングを行いたい場合、オンプレでは対応が難しい。

 こうした課題を解決するため、「ZOZOTOWN」のインフラ環境をオンプレからクラウドベースへと刷新するプロジェクトがスタートした。本セッションのなかで川崎氏が解説したのは、プロジェクトのうち、バックエンド参照系APIシステムの刷新において取り組んだ施策だ。

リプレース対象である参照系APIのアーキテクチャ。図はリプレース後の状態を示す。
リプレース対象である参照系APIのアーキテクチャ。図はリプレース後の状態を示す。

 このインフラ刷新においては、バックエンドの処理でスケーラブルにする必要がある部分を、API化して疎結合にする形をとった。もともとはデータベースにストアードプロシージャでの問い合わせを行っていた処理を、APIを経由してSQL発行する形をとったのだ。リプレース戦略においては、3つの軸を大切にしたという。

1.サブシステムごとに段階的に実施

 全システムのインフラを、一気に切り替えるような形はとらない。サブシステムごとに段階的にクラウドベースに刷新する。

2.NoOps・LessOps

 構築・運用のコストを省力化するため、PaaS、SaaSなどできるだけ抽象化・自動化されたサービスを活用していく。

3.クラウド中立(Cloud Agnostic)

 マルチクラウド、クロスクラウドで構成可能にするため、特定クラウドプラットフォームに過度な依存をしないようにツールやサービスの選定・設計を行う。

 「クラウドプラットフォームとして選択したのは、Microsoft Azureです。認証サービスである『Microsoft Azure Active Directory』の利便性の高さや、『ZOZOWOWN』と相性の良いデータベースマネージドサービスが存在していること、そしてマネージドサービスの種類が豊富であることなどが、決め手になりました」(川崎氏)

 また、クラウドプラットフォームのSingle Point Of Failure(単一障害点)を回避し、安定的にサービスを運用する意図から、Microsoft AzureとAmazon Web Servicesのマルチクラウド構成を選択した。

システム刷新から得られたクラウド活用の知見

 このシステム基盤刷新で、川崎氏をはじめとしたリプレースチームはどのような学びを得てきたのだろうか。

 まず、「クラウドは不安定(であるという前提で考える)」という観点だ。「クラウドは永遠のベータ版」といわれるように、常に機能のアップデートがくり返されている。これは、利便性が向上し続けることを意味する一方で、対象リソースの挙動が不安定になることとも隣り合わせである。

 また、多くの場合クラウド環境のリソースは完全専有型ではなく、共有型・相乗り型である。ゆえに、他の利用者のアプリケーション高負荷などが原因となって「うるさい隣人問題(Noisy Neighbors)」が発生しうることは意識しておかなければならない。

 「クラウドは共有責任モデル」だという前提もある。これはクラウドベンダーと利用者の管理権限に応じた責任分担の考え方だ。「あるレイヤーまではクラウドベンダーが責任を保つが、他のレイヤーに関してはユーザーも責任を持つ必要がある」という思想である。利用者たちは、多かれ少なかれ管理責任が自分たちにもあることを認識し、オーナーシップを持って対策を行うことが肝要となる。

 「これらの前提を踏まえてシステム基盤を構築するには、『堅牢性より回復性(Design for Resiliency)』を意識することが重要です。つまり、落ちないシステムをつくるのではなく、落ちることを前提として回復しやすいシステムを設計する、ということです。

 どのような要件を満たすべきかについては、マイクロソフトが『アプリケーション回復性パターン』というドキュメントを公開していますから、ぜひ参考にしてみてください。『ZOZOTOWN』の参照系APIシステムの刷新においては、APIに以下のような機能を持たせることで、回復性の担保に努めました」(川崎氏)

参照系APIに持たせた回復性機能。
参照系APIに持たせた回復性機能。

 「クラウドリソースは有限」だと意識するのも大切である。クラウドリソースはあくまで物理資源をソフトウェアで仮想化・抽象化しているものである。いつでも期待通りにリソースが確保できるとは限らない。Virtual Machineの作成やスケール変更に失敗することもある。

 とりわけ、クラウドベンダーの需要予測を上回るような高負荷が発生する際には、トラブル発生を警戒すべきだ。大量のリソースが必要だと事前にわかっている場合には、クラウドベンダーにあらかじめリソース確保の相談をするのが有効な策である。

 また、運用において「不確定要素(Chaos)」が生じることもある。

 「かつて、『ZOZOTOWN』の主要なセールイベントにおいて、事前に十分な準備を行ったにもかかわらず、想定通りの結果が得られなかったことがありました。想定を超えるアクセス数・アクセスパターンや、想定外のボトルネックなど、不確定要素が発生することを考慮し、問題が発生してもサービスを継続できるように備えておきましょう。『不確定に備える』という意味においては、『カオスエンジニアリングの5原則』の考え方が非常に参考になります」(川崎氏)

カオスエンジニアリングの5原則
  1. 定常状態における振る舞いの仮説を立てる
  2. 実世界の事象は多様である
  3. 本番環境で検証を実行する
  4. 継続的に実行する検証の自動化
  5. 影響範囲を局所化する

 また、「クラウドは決して安くない」と理解することも重要である。オンプレは減価償却モデルであり、クラウドは従量課金モデルだ。長期的に見れば、クラウド移行がコスト削減にはつながらないケースも多い。

 クラウドの本来の強みはそこではなく、可用性の担保やセキュリティ対応の省力化、サービスの市場投入速度の短縮化、自動化との相性の良さといった点にある。「クラウドの導入によって、自分たちは何を解決したいのか」を考えるべきなのだ。

 川崎氏は最後に、クラウドを利用する場合の「学習の基本姿勢」について言及した。

 「クラウドプラットフォームでは新しい機能が次々に登場しますから、それらの技術を使いこなすには利用者が着実にキャッチアップしていく姿勢が必要です。SIerやベンダーサポートへの丸投げ方式では、開発のスピード感を保つことは難しくなります。

 グローバルの潮流としても、自社で知識のキャッチアップを行い、内製型のサービス開発を行うような成功モデルが確立されつつあります。クラウドネイティブの世界においては『自分たちで闘う』という基本姿勢を持つことが重要です」(川崎氏)

 クラウドは決して銀の弾丸ではない。多大なる利点がある一方で、欠点も持ち合わせている。その前提を踏まえて、導入を進めることが肝となる。クラウドネイティブの現代において、「クラウドの特性を正しく理解し、正しく活用すること」の重要性が伝わるセッションとなった。

お問い合わせ

 日本マイクロソフト株式会社

  • 【Microsoft Learn】
    • Microsoft Azureについて学習できる無料のオンライン トレーニング コンテンツ一覧

 株式会社ZOZOテクノロジーズ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11990 2020/03/13 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング