マイクロサービス移行を阻むレガシーとの戦い方:特集:マイクロサービス入門(6)(1/2 ページ)
マイクロサービスアーキテクチャへの移行を進める上で生まれた課題にどう取り組んだのか。オイシックス・ラ・大地の川上徹氏がOisixのマイクロサービス移行のハードルにどう取り組んだのか紹介します。
Oisixは2000年の創業以来、一度も全面的なシステムリプレースを行わず、システムの改修を続けてきたECサイトだ。マイクロサービスアーキテクチャへの転換を検討し始めた2017年時点で、17年以上も創業当時のアーキテクチャのまま、運用を続けてきたというわけだ。
今回はそのOisixをマイクロサービスアーキテクチャに移行する上で生まれた課題にどう立ち向かったのかを解説する。
既存システムの分析と改善
システムアーキテクチャを刷新する上で、まず最優先に取り組むべきなのはそのシステムが構成する業務の分析/再定義になるだろう。
システムの現状分析を基に、開発、運用のプロセスあるいはサービス提供をする上でのボトルネックは何かを見極め、それを解消するためのアプローチを探る必要がある。これは通常のシステムリプレースであっても、マイクロサービスアーキテクチャへの移行であっても変わらない。
しかし、システムの現状を分析するといっても、長期間にわたって運用、改修を続けてきたシステムのアプリケーションやデータベース(DB)の構成は複雑化し、難解なものになっていることは容易に想像が付く。現在の業務プロセスやサービスの仕様が構築されたいきさつを知る担当者も異動や離職などで現場を離れているケースも少なくないはずだ。
Oisixでもそれは例外ではなかった。改修の積み重ねによるアプリケーションコードの難解さはもとより、過去の施策において実験的に導入したサービスのためのコードや一時的な作業データがDBに残っているなど、分析は困難を極めていたのだ。
アプリケーション稼働状況の分析
Oisixのマイクロサービスアーキテクチャ移行に当たっては、まずアプリケーションに対して稼働状況を分析し、モノリシックなアプリケーションの中で実行頻度の高い機能はどれか、あるいは実行されていない機能はどれかを分析する必要があった。
そこで、稼働中のアプリケーションの基本機能部分に対して実行時にログを出力させる実装を行い、その結果を分析できる仕組みを構築した。
稼働中のアプリケーションの動作に性能面で影響を与えないようにするため、非同期にログを出力する実装とし、出力先は各アプリケーションサーバに配置したオープンソースのデータコレクターである「fluentd」を指定した。
fluentdに出力したログは同様にオープンソースのデータ検索/分析エンジンである「Elasticsearch」に集約し、「Kibana」で可視化する方針とした。
この仕組みを用いて、実行頻度の高い機能に対して優先的に移行を行い、その後細部の機能にもログを出力する設定を行って、不要な機能の取捨選択をするアプローチを採用した。
ステートフルなアプリケーションの改善
既存のシステム構成において最も問題視されていたのが、アプリケーションがステートフルであることによりアプリケーションサーバのスケールを阻害していたことだ。
アプリケーションが持つステートの例としては、以下のようなものがある。
- HTTPセッション
- 設定ファイル
- ストレージファイルへのアクセス
Oisixで課題になったのはHTTPセッションだ。
OisixはJavaによるServletベースのWebアプリケーションであり、画面表示にはJSP(JavaServer Pages)を用いているが、HTTPセッションへのアクセスに関しては明確なルールを定めずに行ってきたといういきさつがある。
そのため実態は、JSPを含むアプリケーションの各所でハードコードされたセッションキーによるアクセスや、SerializableでないオブジェクトのHTTPセッションへの格納も行われていた。
特に後者のSerializableでないオブジェクトのHTTPセッションへの格納は、アプリケーション稼働状況の分析を目的に構築したElasticsearchへのログ集約の仕組みを流用し、HTTPセッションへオブジェクトを格納する際にSerializeを行い、エラーとなったオブジェクトの情報をElasticsearchへ送信することで、該当するオブジェクトの情報を収集した。
その上で、以下の2つのアプローチで既存アプリケーションのステートレス化を目指した。
- HTTPセッションで管理されていたショッピングカートなどの主要なオブジェクトへのアクセスをRESTful APIとして切り出す
- SerializableでないオブジェクトのHTTPセッションへの格納を廃止し、HTTPセッションそのものを外部のデータストアへ格納する
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- マイクロサービスを支える「Istio」の実力は? サービスメッシュの利点と課題
マイクロサービスアーキテクチャを適用したアプリケーションは、規模の拡大に伴い運用が煩雑化してしまう。その課題の解決策として登場した「サービスメッシュ」という考え方とその実装として期待が高まっている「Istio」は、どの程度有用なのか。日立製作所の井出貴也氏が、検証の成果をもとに解説した。 - Enjoy Kubernetes――クラウドネイティブを楽しむにはコミュニティーやミートアップへの参加がよい理由
Kubernetesを中心とする「クラウドネイティブ」の世界を対象にさまざまなトピックを取り上げる本連載「Cloud Native Watch」。初回は、クラウドネイティブ周辺のテックコミュニティーやミートアップを紹介します。 - SOMPOの実例に学ぶ、大企業がアジャイル/スクラム、マイクロサービス、コンテナを導入する際の最適解
社会のあらゆる領域で「デジタル化」が進む現在、企業には、社会状況や消費者動向の急速な変化に、デジタル技術を武器としてビジネスを迅速に対応させる「デジタルトランスフォーメーション」(DX)への取り組みが求められている。アイティメディアが、2019年12月11日に開催したセミナー「ITmedia DX Summit 2019年冬・PaaS編」の基調講演では、SOMPOホールディングス デジタル戦略部の西野大介氏が、エンタープライズに「アジャイル」「マイクロサービス」「コンテナ」といった新たな手法や技術を取り入れ、DXを推進していく際のポイントについて、自社での事例を交えつつ紹介した。