Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Developer_Summit_2022

kamorisan
February 17, 2022
5.7k

 Developer_Summit_2022

レッドハットのミドルウェアでレガシーアプリケーションを段階的にモダナイズする話

kamorisan

February 17, 2022
Tweet

Transcript

  1. しかし、立ちはだかる壁 4 密に結合したシステム、そ う簡単に分割できそうもな い 中身がブラックボックス 化。手のつけようが無い 気がする。 マイクロサービスだのコ ンテナだのスキルセット

    が足りてない 巨大なシステムをどう やって移行していけば 良いの? 組織も文化もウォーターフォール開 発が前提になっており、 そう簡単に変えられない
  2. 2つの移行方式 6 安い トータルコスト 高い 短い 工期 長い 高い 難易度/リスク

    低い 完成するまで効果が 測定できない 移行効果 (コスト/業務プロセス) 小さな効果を確認しつつ 導入範囲を決定できる 一括移行 段階的移行
  3. イベント駆動型アーキテクチャ(EDA) アプリケーションやサービスがイベント 通知の送受信に対してリアルタイムに 応答するような設計方式 段階的移行に有効なテクノロジーとデザインパターン 7 マイクロサービス 互いに独立した小さなサービスが連動すること で1つのアプリケーションとして 動作するアーキテクチャやそのアプローチ

    ストラングラーパターン 特定の機能を新しいアプリケーションやサービ スに徐々に置き換えることで レガシーシステムを段階的に移行する デザインパターン コンテナ コンテナはアプリケーションとその動作に必要 なライブラリ、依存関係、ファイルが含まれてお り、ホストOS上で独立した アプリケーションとして実行される
  4. マイクロサービス 8 マイクロサービスとは 互いに独立した小さなサービス (機能)が連動することで、 1つのアプリケーションとして動作するアーキテクチャや そのアプローチ マイクロサービスの価値  Fast Time

    To Market  サービスが小さく、自律的であるため、  素早く開発してデリバリーできる  Efficiency  サービスが小さいため、デリバリーの自動化や  モニタリングが容易  Scalability  細かい粒度でスケーラビリティを制御でき、  リソースの利用を最適化しやすい
  5. マイクロサービス とコンテナの親和性 10 移行戦略:ビッグバンではなく段階的な移行 現状の課題:ブラックボックスで肥大 化し改修が困難になっている 結果:技術が古くノウハウの継承が 困難で開発コストが高い 目指す姿:システムの透明性が高く 改修しやすいアーキテクチャー

    目的:ノウハウの継承が容易で 開発コストが低い アプリケーション視点 現状の課題:モノリシックなシステム に最適化された標準化が定着 結果:テクノロジーの変化に適した開 発・運用プロセスではない 目指す姿:小さい単位で頻繁に改修 ができる基盤の確立 目的:ノウハウの継承が容易で 運用コストが低い インフラストラクチャー視点 マイクロ サービス化 コンテナ基盤
  6. ストラングラーパターン 11 Monolith 在庫 通知 配送 注文 決済 Monolith 在庫

    配送 決済 Monolith 通知 決済 Step0 ストラングラーファサード ストラングラーファサード Step1 Step2 Step3 注文
 MS
 通知 注文
 MS
 在庫
 MS
 配送
 MS
 在庫
 MS
 注文
 MS
 配送
 MS
 通知
 MS
 決済
 MS
 特定の機能を新しいアプリケーションやサービスに徐々に置き換えることでレガシーシステムを段階的に移行 既存システムの前段にファサードを設置し新旧にデータを振り分け、ユーザは新旧を意識せずにシステムを利用
  7. マイクロサービス間のデータ連携について 12 マイクロサービス • すべてのサービスが正常に動作していることが前提 ◦ どこかのサービスで障害が発生すると機能不全のサービスが下流 に向かって発生しサービス全体が機能不全 ◦ 別途サーキットブレーカーの導入が必要

    • 処理途中でエラーとなった際のリトライ処理が複雑化 • リクエストとレスポンスがセットになっているため、アクセスが集中すると サーバーが高負荷に REST REST REST REST 障害時の対応(リトライ、巻き戻し)が複雑化 REST(同期通信)のみで構成した場合
  8. イベント駆動型アーキテクチャ(EDA) 13 受注
 発送
 決済
 注文
 配送
 決済
 在庫
 通知


    ポイント
 注文
 イベント
 発送
 イベント
 決済
 イベント
 サービスのAPI呼び出しで連携するのではなく、あるサービスが発行した状態の変化(イベント)をその変化に興味がある サービスが反応することで結果的に連携が行われる
 イベントバス

  9. ログベースメッセージブローカー:Apache Kafka 14 • 2010年に LinkedIn で開発され、2011年にオープンソース化された ◦ ストリーミングデータのための分散システム •

    非常に高いスループットと低レイテンシーで大量データを処理 • 容易に水平スケール • コミットログとしてメッセージを保持 • データパーティショニング (シャーディング) • クラスタリングにより高い耐障害性 • 大量のコンシューマも処理可能 • LinkedInの開発者がApache Kafka を新たに作ったわけ ◦ リアルタイムログのような高いボリュームのイベントストリームをサポートするための高いスループットを実現したい ◦ オフラインシステムからの定期的なデータロードを可能とする大容量バックログを取り扱いたい ◦ 伝統的なメッセージングのユースケースを取り扱うために低遅延である必要がある
  10. CQRS: Command Query Responsibility Segrigation (コマンド-クエリ責任分離) 15 イベント駆動を利用したマイクロサービスデザインパターンのひとつ
 注文サービス
 create,

    update
 delete
 配送サービス
 create, update
 delete
 注文
 イベント 
 発送イベント 
 注文履歴サービス
 query
 Query API 
 Event Handler 
 注文テーブル 
 配送テーブル 
 検索用 注文/配送 
 JOINテーブル 
 C,U,D 
 C,U,D 
 C,U,D 
 R
 CQRSの基本動作:
 • 検索用に予め必要なデータ要素を全て
 含むJOINテーブルを用意する
 • 更新系要求はサービス個別のDBを更新しつ つ、更新イベントを検索サービスに送信する
 • 検索サービスは更新イベントを拾い、
 順次検索用JOINテーブルを更新する
 
 利点:
 • 検索の応答性能向上
 • サービス間の非依存性(separation of concerns)の向上
 
 欠点:
 • 一時的にデータの一貫性が損なわれる
 (結果整合性の許容)
 メッセージ
 ブローカー 
 ex. kafka

  11. CDC: Change Data Capture 16 DBトリガをイベントに変換するミドルウェアを使用することでイベント駆動型サービス間連携を簡単に実現
 注文サービス
 create, update
 delete


    配送サービス
 create, update
 delete
 注文履歴サービス
 query
 Query API 
 Event Handler 
 コミットロ グ
 検索用 注文/配送 
 JOINテーブル 
 C,U,D 
 C,U,D 
 C,U,D 
 R
 DBのコミットログ
 • MySQL: binlog
 • Postgresql: write-ahead log
 • MongoDB: op-log
 トランザクションログ 
 マイナー
 イベント
 発行
 https://www.redhat.com/en/topics/integration/what-is-change-data-capture 

  12. CDC: Change Data Capture 17 Debezium チェンジデータキャプチャ プラットフォーム • Kafka

    Connectを使用した チェンジデータキャプチャ (CDC) のコネクタ ◦ コネクタが指定されたデータベースに接続 し、トランザクションログを読み取り、そ れをKafkaメッセージとしてパブリッシュ • データベースに発生した Create / Update / Delete のイベントを他データソースへ伝播さ せ反映 ◦ キャッシュ ◦ RDBMS ◦ Object Storage ◦ ファイル
  13. 共有データベースを利用する理由 19 • シンプルなインターフェース • RDBMS の強力なトランザクション機能により Consistency の担保が容易 データの

    Consistency(一貫性) を担保するのが容易 データのConsistencyは以下の要素に分解できる • Integrity (整合性): 永続化されたデータに破損や矛盾がないこと • Timeliness (即時性): 参照されたデータが常に最新であることを保証すること Timeliness に対する制約を緩和 (結果整合性を許容)すれば、 トランザクションを使わずにConsistencyを実現できる
  14. CDCとストリームプロセシングの採用 20 RDBMS
 API
 → データの利用側 
 データの生成側 ← 


    トランザクション ログ
 マイナー
 Kibana
 インメモリキャッシュ
 Elasticsearch
 DWH
 ▸ ワークロードに応じたデータソースを選択 
 ▸ なんでもかんでも RDBMS を使用しない 
 ストリーミング 
 プラットフォーム 
 ▸ ストリーミングプラットフォームによる 
 データパイプラインの構築 
 ▸ ストリーミングプラットフォームにより ETL が不要に 
 ▸ クレンジングを実施しながらリアルタイム連携 
 ▸ トランザクションログテーリングで RDBMS からチェンジイベント生成 
 ▸ インテグレーションアプリが 
 プロトコル&データ変換し 
 参照用のリードモデルへリプレイ 
 CDC
 データパイプラインはバッチではなく、リアルタイム処理に

  15. 共有DBを廃止してイベント駆動型データ連携システムへ 21 データハブとなっていた巨大なRDBMSは不要に
 RDBMS
 トランザクショ ンログ
 マイナー 
 ストリーミング 


    プラットフォーム 
 → データの利用側 
 データの生成側 ← 
 ▸ トランザクションが必要なサービスのみ 
 RDBMS に対する書き込みを続ける 
 ▸ イベントに置き換え可能なサービスはイ ベントを書き込むように変更 
 API
 Kibana
 インメモリキャッシュ 
 Elasticsearch 
 オブジェクト 
 ストレージ 
 ▸ オブジェクトストレージに置き換え 
 SQL on Spark / Hadoop 
 API Gateway
 ▸ API Gateway 
 パターンを適用 
 オンライン利用
 オフライン利用
 イベントバス

  16. デモ 23 データパイプラインはバッチではなく、リアルタイム処理に
 RDBMS
 API
 → データの利用側 
 データの生成側 ←

    
 トランザクショ ンログ
 マイナー 
 Kibana
 インメモリキャッシュ
 Elasticsearch
 DWH
 ▸ ワークロードに応じたデータソースを選択 
 ▸ なんでもかんでも RDBMS を使用しない 
 ストリーミング 
 プラットフォーム 
 ▸ ストリーミングプラットフォームによる 
 データパイプラインの構築 
 ▸ ストリーミングプラットフォームにより ETL が不要に 
 ▸ クレンジングを実施しながらリアルタイム連携 
 ▸ トランザクションログテーリングで RDBMS からチェンジイベント生成 
 ▸ インテグレーションアプリが 
 プロトコル&データ変換し 
 参照用のリードモデルへリプレイ 
 CDC

  17. デモ 24 Web アプリ レガシーアプリ CDC ストリーミング・ プラットフォーム データ 形式変換

    データ 編集 注文の受付 を行う CDCの出力から、後 続の処理に必要な部 分を抽出 レガシーにない項目を新 しく編集して追加 - 合計金額 - 送料 etc