レガシーデータを安全にモダナイズする──ストラングラーフィグパターンとサーガパターンによる用語集管理システムのリアーキテクチャ
Mirai Translate Tech Blog は、レガシーデータを持つシステムをモダナイズする際、ストラングラーフィグパターンとサーガパターンを組み合わせた3 つの具体的な移行アプローチとそのトレードオフについて詳述している。
キーポイント
レガシーデータの移行課題
用語集管理システムのように、データベースとファイルストレージが複雑に連携するレガシーシステムでは、データ整合性の維持やフォーマット変換が主要な障壁となる。
アプローチ1:DB 先行移行
既存システムから新システムへデータを同期してからアプリを切り替える方法だが、レガシー側の改修が必要となり、リソース不足の環境では開発スピードが低下する課題がある。
アプローチ2:アプリ先行移行
新システムでレガシーデータを参照しながら並行稼働し、徐々にデータフォーマットを変換して切り替える方法で、レガシー側の改修が不要なためリソース不足の環境に適している。
アプローチ3:同時移行
新旧システムを同時に稼働させ双方向で更新を行う手法だが、データ競合や整合性維持の複雑さから実装難易度が高い。
オーケストレーションベースのサーガによるデータ同期
HTTPリバースプロキシをサーガオーケストレーターとして実装し、モダンシステムとレガシーシステムのトランザクションを一元管理することで、分散環境下でのデータ整合性を確保します。
補償トランザクションによる一貫性の維持
新システムでの処理失敗時にUndo操作(例:用語集の削除)を実行する補償トランザクションを定義し、コマンドパターンを用いてシステム全体の一貫性を保ちます。
ストラングラーフィグとサーガの組み合わせによるリスク低減
レガシーシステムの改修不要かつ設計制約のないモダナイズを実現しつつ、並行処理も視野に入れた分散トランザクション管理で移行リスクを最小化します。
影響分析・編集コメントを表示
影響分析
この記事は、大規模なレガシーシステムのモダナイズにおいて、技術リソースの制約下でもリスクを最小化しながら移行を進めるための実践的な指針を提供しています。特に「新システムが旧フォーマットを一時的に受け入れる」という逆転発想は、多くの組織で直面するスキル不足や改修コストの問題に対する有効な解決策となり得ます。
編集コメント
技術リソースの制約という現実的な課題に対し、設計上の工夫で対応する姿勢は非常に参考になります。特に「新システムが旧フォーマットに依存する」という逆転思考は、実務での応用価値が高いです。

こんにちは。プラットフォーム開発部 のthorです。以前の記事では、Strangler Fig Pattern(ストラングラーフィグパターン)を用いて、レガシーな翻訳基盤システムの一部分だけをリアーキテクチャする方法について説明しました。今回は、レガシーデータを持つサービスのリアーキテクチャに焦点を当て、その具体的なアプローチを紹介します。
ストラングラーフィグパターンとは?
ストラングラーフィグパターンは、既存のシステムを徐々に新しいシステムに置き換えていく手法です。既存の機能を新システムで実装しその機能を段階的に移行していくことで、リスクを最小限に抑えつつシステム全体をモダナイズできます。
前回の記事でのテキスト翻訳のリアーキテクチャ
前回の記事では、以下のような構成のレガシー翻訳システムの一部を新しいマイクロサービスに置き換える例を紹介しました。
レガシー翻訳システムの構成
上記のレガシーシステムの中で、テキスト翻訳のリクエストの一部を新しいマイクロサービスで処理するように変更しました。
一部をモダナイゼーションした結果
用語集というレガシーデータの課題
次に用語集管理システムのリアーキテクチャを考えるにあたり、ストレージに保存された用語集データ(レガシーデータ)に関する課題を整理します。レガシーデータを持つサービスのリアーキテクチャにおいては、以下のような課題が存在します。
データの整合性: 新旧システム間でデータの一貫性を保つ必要があります。
データ移行の複雑さ: 大量のデータを安全に移行するための計画が必要です。
既存のデータフォーマット: レガシーシステムのデータフォーマットが新システムと異なる場合、変換が必要です。
用語集データは以下のような構成のシステムで管理されています。
レガシー用語集管理システムの構成
ユーザから入力された用語集データは、用語集データベースと用語集ファイルストレージの両方に保存されます。用語集データベースには、用語のID、原文、訳文、作成日時、更新日時などのメタデータが保存され、用語集ファイルストレージには、テキスト翻訳システムで利用しやすいように前処理されたバイナリ形式の用語集ファイルが保存されます。
レガシー用語集管理システムでのデータベースのスキーマやファイルストレージのパス構成は、モダン用語集管理システムでは改善したいものになっています。そのため、用語集データベースと用語集ファイルストレージの両方を新しい構成に移行する必要があります。
用語集管理システムのリアーキテクチャのアプローチ
レガシーデータを含むシステムの移行のアプローチとして、以下の3つの方法が考えられます。
データベースののみ移行してからアプリケーションを移行する
アプリケーションを移行してからデータベースを移行する
アプリケーションとデータベースを同時に移行する
- データベースのみ移行してからアプリケーションを移行する
このアプローチでは、レガシー用語集管理サーバがまず用語集データベースと用語集ファイルストレージを新しいシステムに同期します。
レガシー用語集管理システムによるデータの同期処理
用語集のデータの同期が完了したら、新しい用語集管理システムで用語集を利用できるようになり、テキスト翻訳システムでも新しい用語集管理システムを利用できるようになります。(注: ファイル翻訳システムの記述は省略しています)
モダン翻訳システムでの用語集の利用
このアプローチの場合、レガシー用語集管理システムが新しい用語集管理システムのフォーマットに合わせてデータを変換しながら同期する必要があります。弊社のシステムでは技術者の少ないScala言語で実装されたシステムを改修する必要があり、開発スピードが遅くなる課題があります。
- アプリケーションを移行してからデータベースを移行する
このアプローチでは、まず新しい用語集管理システムを構築し、レガシー用語集管理システムと並行して稼働させます。新しい用語集管理システムは、レガシー用語集管理システムのデータベースとファイルストレージを読み取り専用で参照します。(注: ファイル翻訳システムの記述は省略しています)
モダン翻訳システムがレガシー用語集のデータを利用する
その後、レガシー用語集管理システムのデータベースとファイルストレージを新しいフォーマットに変換しながら新しい用語集管理システムに移行し、モダン用語集管理システムが用語集の更新を行うように切り替えます。(レガシー用語集管理システムの用語集はファイル翻訳でのみ利用されます。)
モダン翻訳システムによるデータの同期処理
このアプローチの場合、レガシー用語集管理システムの改修が不要であり、Scalaの技術者が不足している弊社の状況に適しています。ただし、モダン用語集管理システムがレガシーデータのフォーマットに依存するため、リアーキテクチャが完了するまでモダン用語集管理システムの設計が制約される可能性があります。
- アプリケーションとデータベースを同時に移行する
このアプローチでは、レガシー用語集管理システムとモダン用語集管理システムの両方を同時に稼働させ、両方のシステムが用語集データの更新を行います。
リバースプロキシによる用語集データの同期
両方のシステムで更新を開始した後で、それ以前にレガシー用語集管理システムで作成されたデータをモダン用語集管理システムに同期します。両方のシステムでデータが同期された後で、全てのテキスト翻訳リクエストをモダン用語集管理システムに切り替えます。
モダンテキスト翻訳システムへの完全移行
このアプローチの場合、Scala言語で書かれたレガシー用語集管理システムの改修は不要であり、モダン用語集管理システムの設計も制約される可能性がなくなります。ただし、両方のシステムでデータの一貫性を保つために、HTTPリバースプロキシが両方のシステムに対してデータの整合性を保つように更新する必要があります。
サーガ(Saga)パターンを用いたデータ同期の実装
弊社では、3つ目のアプローチを採用し、用語集管理システムのリアーキテクチャを進める予定です。両方のシステムでデータの一貫性を保つために、サーガパターンを用いてデータ同期を実装します。
サーガパターンは、分散トランザクションを管理するためのパターンであり、一連のローカルトランザクションを定義し、それぞれのトランザクションが成功した場合に次のトランザクションを実行します。もしどれかのトランザクションが失敗した場合、補償トランザクションを実行してシステムの一貫性を保ちます。
サーガパターンの実装には、以下の2つの方法があります。
コレオグラフィー(Choreography)ベースのサーガ
オーケストレーション(Orchestration)ベースのサーガ
今回のリアーキテクチャでのサーガパターン
今回のリアーキテクチャではオーケストレーションベースのサーガを用いたデータ同期の実装例を採用予定です。オーケストレーションベースのサーガでは、サーガオーケストレーターが各サービスのトランザクションを管理します。このオーケストレーターは、今回はHTTPリバースプロキシの一部として実装され、用語集管理システムのデータの整合性を保つ役割を果たします。以下の図のようなシーケンスでデータ同期を実装します。
サーガパターンによる用語集の同期のシーケンス
もし、モダン用語集管理システムでの用語集管理リクエストが失敗した場合、サーガオーケストレーターは以下の図のようにレガシー用語集管理システムに対して補償トランザクションを実行します。
補償トランザクションのシーケンス
補償トランザクションはUndo操作として実装されます。例えば、用語集の作成が失敗した場合、補償トランザクションはその用語集を削除する操作になります。Undo操作の実装にはコマンドパターンを用いることが一般的です。
今回の例では、逐次的にトランザクションを実行していますが、パフォーマンスの観点から並行してトランザクションを実行することも可能です。ただし、並行してトランザクションを実行する場合、補償トランザクションの設計がより複雑になる可能性があります。
レガシーデータを持つサービスのリアーキテクチャには、データの整合性や移行の複雑さなどの課題があります。ストラングラーフィグパターンを用いることで、リスクを最小限に抑えつつシステム全体をモダナイズできます。さらに、サーガパターンを用いたデータ同期の実装により、分散トランザクションの管理が容易になります。
原文を表示

こんにちは。プラットフォーム開発部 のthorです。以前の記事では、Strangler Fig Pattern(ストラングラーフィグパターン)を用いて、レガシーな翻訳基盤システムの一部分だけをリアーキテクチャする方法について説明しました。今回は、レガシーデータを持つサービスのリアーキテクチャに焦点を当て、その具体的なアプローチを紹介します。
ストラングラーフィグパターンとは?
ストラングラーフィグパターンは、既存のシステムを徐々に新しいシステムに置き換えていく手法です。既存の機能を新システムで実装しその機能を段階的に移行していくことで、リスクを最小限に抑えつつシステム全体をモダナイズできます。
前回の記事でのテキスト翻訳のリアーキテクチャ
前回の記事では、以下のような構成のレガシー翻訳システムの一部を新しいマイクロサービスに置き換える例を紹介しました。
レガシー翻訳システムの構成
上記のレガシーシステムの中で、テキスト翻訳のリクエストの一部を新しいマイクロサービスで処理するように変更しました。
一部をモダナイゼーションした結果
用語集というレガシーデータの課題
次に用語集管理システムのリアーキテクチャを考えるにあたり、ストレージに保存された用語集データ(レガシーデータ)に関する課題を整理します。レガシーデータを持つサービスのリアーキテクチャにおいては、以下のような課題が存在します。
データの整合性: 新旧システム間でデータの一貫性を保つ必要があります。
データ移行の複雑さ: 大量のデータを安全に移行するための計画が必要です。
既存のデータフォーマット: レガシーシステムのデータフォーマットが新システムと異なる場合、変換が必要です。
用語集データは以下のような構成のシステムで管理されています。
レガシー用語集管理システムの構成
ユーザから入力された用語集データは、用語集データベースと用語集ファイルストレージの両方に保存されます。用語集データベースには、用語のID、原文、訳文、作成日時、更新日時などのメタデータが保存され、用語集ファイルストレージには、テキスト翻訳システムで利用しやすいように前処理されたバイナリ形式の用語集ファイルが保存されます。
レガシー用語集管理システムでのデータベースのスキーマやファイルストレージのパス構成は、モダン用語集管理システムでは改善したいものになっています。そのため、用語集データベースと用語集ファイルストレージの両方を新しい構成に移行する必要があります。
用語集管理システムのリアーキテクチャのアプローチ
レガシーデータを含むシステムの移行のアプローチとして、以下の3つの方法が考えられます。
データベースののみ移行してからアプリケーションを移行する
アプリケーションを移行してからデータベースを移行する
アプリケーションとデータベースを同時に移行する
- データベースのみ移行してからアプリケーションを移行する
このアプローチでは、レガシー用語集管理サーバがまず用語集データベースと用語集ファイルストレージを新しいシステムに同期します。
レガシー用語集管理システムによるデータの同期処理
用語集のデータの同期が完了したら、新しい用語集管理システムで用語集を利用できるようになり、テキスト翻訳システムでも新しい用語集管理システムを利用できるようになります。(注: ファイル翻訳システムの記述は省略しています)
モダン翻訳システムでの用語集の利用
このアプローチの場合、レガシー用語集管理システムが新しい用語集管理システムのフォーマットに合わせてデータを変換しながら同期する必要があります。弊社のシステムでは技術者の少ないScala言語で実装されたシステムを改修する必要があり、開発スピードが遅くなる課題があります。
- アプリケーションを移行してからデータベースを移行する
このアプローチでは、まず新しい用語集管理システムを構築し、レガシー用語集管理システムと並行して稼働させます。新しい用語集管理システムは、レガシー用語集管理システムのデータベースとファイルストレージを読み取り専用で参照します。(注: ファイル翻訳システムの記述は省略しています)
モダン翻訳システムがレガシー用語集のデータを利用する
その後、レガシー用語集管理システムのデータベースとファイルストレージを新しいフォーマットに変換しながら新しい用語集管理システムに移行し、モダン用語集管理システムが用語集の更新を行うように切り替えます。(レガシー用語集管理システムの用語集はファイル翻訳でのみ利用されます。)
モダン翻訳システムによるデータの同期処理
このアプローチの場合、レガシー用語集管理システムの改修が不要であり、Scalaの技術者が不足している弊社の状況に適しています。ただし、モダン用語集管理システムがレガシーデータのフォーマットに依存するため、リアーキテクチャが完了するまでモダン用語集管理システムの設計が制約される可能性があります。
- アプリケーションとデータベースを同時に移行する
このアプローチでは、レガシー用語集管理システムとモダン用語集管理システムの両方を同時に稼働させ、両方のシステムが用語集データの更新を行います。
リバースプロキシによる用語集データの同期
両方のシステムで更新を開始した後で、それ以前にレガシー用語集管理システムで作成されたデータをモダン用語集管理システムに同期します。両方のシステムでデータが同期された後で、全てのテキスト翻訳リクエストをモダン用語集管理システムに切り替えます。
モダンテキスト翻訳システムへの完全移行
このアプローチの場合、Scala言語で書かれたレガシー用語集管理システムの改修は不要であり、モダン用語集管理システムの設計も制約される可能性がなくなります。ただし、両方のシステムでデータの一貫性を保つために、HTTPリバースプロキシが両方のシステムに対してデータの整合性を保つように更新する必要があります。
サーガ(Saga)パターンを用いたデータ同期の実装
弊社では、3つ目のアプローチを採用し、用語集管理システムのリアーキテクチャを進める予定です。両方のシステムでデータの一貫性を保つために、サーガパターンを用いてデータ同期を実装します。
サーガパターンは、分散トランザクションを管理するためのパターンであり、一連のローカルトランザクションを定義し、それぞれのトランザクションが成功した場合に次のトランザクションを実行します。もしどれかのトランザクションが失敗した場合、補償トランザクションを実行してシステムの一貫性を保ちます。
サーガパターンの実装には、以下の2つの方法があります。
コレオグラフィー(Choreography)ベースのサーガ
オーケストレーション(Orchestration)ベースのサーガ
今回のリアーキテクチャでのサーガパターン
今回のリアーキテクチャではオーケストレーションベースのサーガを用いたデータ同期の実装例を採用予定です。オーケストレーションベースのサーガでは、サーガオーケストレーターが各サービスのトランザクションを管理します。このオーケストレーターは、今回はHTTPリバースプロキシの一部として実装され、用語集管理システムのデータの整合性を保つ役割を果たします。以下の図のようなシーケンスでデータ同期を実装します。
サーガパターンによる用語集の同期のシーケンス
もし、モダン用語集管理システムでの用語集管理リクエストが失敗した場合、サーガオーケストレーターは以下の図のようにレガシー用語集管理システムに対して補償トランザクションを実行します。
補償トランザクションのシーケンス
補償トランザクションはUndo操作として実装されます。例えば、用語集の作成が失敗した場合、補償トランザクションはその用語集を削除する操作になります。Undo操作の実装にはコマンドパターンを用いることが一般的です。
今回の例では、逐次的にトランザクションを実行していますが、パフォーマンスの観点から並行してトランザクションを実行することも可能です。ただし、並行してトランザクションを実行する場合、補償トランザクションの設計がより複雑になる可能性があります。
レガシーデータを持つサービスのリアーキテクチャには、データの整合性や移行の複雑さなどの課題があります。ストラングラーフィグパターンを用いることで、リスクを最小限に抑えつつシステム全体をモダナイズできます。さらに、サーガパターンを用いたデータ同期の実装により、分散トランザクションの管理が容易になります。
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み