レガシーアプリケーションの段階的モダナイズに必要なテクノロジーとデザインパターン【デブサミ2022】
【17-E-7】レッドハットのミドルウェアでレガシーアプリケーションを段階的にモダナイズする話
イベント駆動型アーキテクチャの採用で、巨大な共有データベースを解体する
この課題に対する回答として、レッドハットが用意しているのが「イベント駆動型アーキテクチャ」の採用である。イベント駆動型のアーキテクチャとは、サービスのAPI呼び出しで連携するのではなく、あるサービスが発行した状態の変化(イベント)を、その変化に興味のあるサービスが反応することで結果的に望ましい連携が行われるというアーキテクチャである。このアーキテクチャを採用するメリットは、「新しい機能やサービスを追加する際に、既存の実装部分にインパクトを与えることなくできること」と森氏は説明する。
こうしたイベント駆動型のアーキテクチャに使えるソリューションとして、最近、注目されているのが「Apache Kafka(以下、Kafka)」である。KafkaはLinkedInで開発され、2011年にオープンソース化されたストリーミングデータのための分散システムである。その特徴は非常に高いスループットと低レイテンシーで大量データを処理できることや、水平スケールがしやすく障害に強いなどが挙げられる。
Kafkaの登場により、イベント駆動型のアーキテクチャの構築が非常に容易になったという。イベント駆動型アーキテクチャを利用した、マイクロサービスのデザインパターンであるCQRS(Command Query Responsibility Segregation:コマンド・クエリ責任分離)もその一例である。CQRSでは検索用にあらかじめ必要なデータ要素をすべて含むJOINテーブルを用意することで、サービスごとに個別のデータベースを実現しつつ、データ連携が可能になる。CQRSの利点は、検索性・応答性と、サービス間の非依存性が向上することだ。
「このCQRSのデザインパターンを発展させる形として、Change Data Capture(CDC)というミドルウェアを活用する考え方もある」と森氏は語る。CDCに対応したミドルウェアを使えば、データベースのコミットログをベースに更新イベントをメッセージブローカーで発行できる。「各サービスは単純に自分が管理する責務のデータベースの更新だけでよくなり、更新イベントを発行するコードを書く必要がなくなる。これによりCQRSのシステムを容易に実現できるのです」(森氏)
CDCにはいくつかの製品が登場している。レッドハットが提供するのが「Debezium」である。DebeziumはKafka Connectを使用したCDCコネクタである。接続したデータベースのトランザクションログを読み取り、それをKafkaメッセージとしてパブリッシュする仕組みとなっている。「データベースで発生したCreateやUpdate、Deleteなどのイベントを他のデータソースに反映させていくことができます」(森氏)
ここで森氏はレガシーシステムの移行の際に課題となる、巨大な共有データベースを解体していく方法を紹介した。
共有データベースを利用する最大の理由は、「強力なトランザクション機能によりデータの一貫性(Consistency)を担保するのが容易であること」と森氏は言う。データの一貫性は整合性(Integrity)と即時性(Timeliness)という2つの要素に分解できる。即時性に対する制約を緩和できれば、トランザクションを使わずにデータの一貫性を担保できるようになるというわけだ。イベント駆動型データ連携システムを用いれば、このような仕組みを実現できるという。
まずはCDCとストリームプロセッシングを採用することで、データパイプラインをバッチ処理ではなく、リアルタイム処理にする。日々更新されるデータはCDCを通してイベントに変換され、一旦、ストリーミングプラットフォームに蓄えられる。そしてこの更新にイベントを使って、逐次データモデルの変更をしながら、そのデータを使用する部署に合わせたデータベースを更新していくという流れにするのである。
「更新されたデータを蓄積するデータベースは必ずしもRDBMSを使う必要はない。検索のために使いたいのであれば、検索に特化したElasticsearchを使うなど、目的に応じて自由に選択できるようになる」と森氏。このような方法でモダナイズを段階的に進めていくことで、最終的に共有データベースは不要になり、イベント駆動型データ連携システムに移行できるという。
最後に森氏はDebezium、Red Hat Fuse、Red Hat AMQ Streamsを使って、イベント駆動型データ連携システムのデモを実施。リアルタイムにデータが連携される様子を披露した。
「モノリシックなレガシーアプリケーションはマイクロサービス化して小さな機能単位に分割し、ストラングラーパターンで徐々に置き換えることで段階的な移行が実現できるのです。そしてイベント駆動型アーキテクチャとCQRSやCDCというデザインパターンを適用することで、巨大な共有データベースと解体すると共に、リアルタイムにデータ連携できるシステムに転換できます」森氏はこう語り、セッションを締めた。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Developers Summit 2022 レポート連載記事一覧
- この記事の著者
-
中村 仁美(ナカムラ ヒトミ)
大阪府出身。教育大学卒。大学時代は臨床心理学を専攻。大手化学メーカー、日経BP社、ITに特化したコンテンツサービス&プロモーション会社を経て、2002年、フリーランス編集&ライターとして独立。現在はIT、キャリアというテーマを中心に活動中。IT記者会所属。趣味は読書、ドライブ、城探訪(日本の城)。...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
