SlideShare a Scribd company logo
1 of 18
Download to read offline
Copyright (C) 2018 OGIS-RI All rights reserved.
株式会社オージス総研
齋藤伸也
Mule Runtime のアーキテクチャコンセプト紹介
~EIP、Conversation Patterns、SEDA、Non-blocking~
Copyright (C) 2018 OGIS-RI All rights reserved.
ご注意
本スライドの記述は MuleSoft, Inc. の公
式見解ではありません。
2
Copyright (C) 2018 OGIS-RI All rights reserved.
自己紹介
• 齋藤伸也 (Saito_Shinya@ogis-ri.co.jp)
• 株式会社オージス総研
– クラウドインテグレーションサービス部所属
• インテグレーションアーキテクト / APIテクニカルコンサルタント
• Mule 2.x 時代(約10年前)からMuleを利用したシステム連携や
API構築プロジェクトに参画
Copyright (C) 2018 OGIS-RI All rights reserved.
今日の話
• システム連携のパターン
– Enterprise Integration Patterns
– Conversation Patterns
• Mule engine の処理モデル
– Muleのスレッドモデル(Mule3)とNon-blocking IO(Mule4)
– Muleのチューニング(Mule3)とセルフチューニング(Mule4)
Copyright (C) 2018 OGIS-RI All rights reserved.
システム連携は簡単?
システムA システムB
システム連携は線で
結べばOK
Copyright (C) 2018 OGIS-RI All rights reserved.
システム連携は簡単・・・じゃない
• 同期/非同期、リアルタイム/バッチ、1:1/N:1/N:N
• データサイズ、連携頻度
• プロトコル、データ形式
• 経路の信頼性、エラー処理
• ・・・・などなど
システムA システムB
Copyright (C) 2018 OGIS-RI All rights reserved.
Enterprise Integration Patterns
• 著者:Gregor Hohpe氏 and Bobby Woolf氏. 2005
• 企業におけるシステム連携のパターンを65種類網羅
したパターン本
• Mule、Camel、Spring Integrationなど様々な連携ミドルウェアがリ
ファレンスしている
• メリット
– システム連携の共通言語、連携アーキテクチャの議論の出発点
http://www.enterpriseintegrationpatterns.com より
Copyright (C) 2018 OGIS-RI All rights reserved.
EIPとMule
https://docs.mulesoft.com/mule-user-guide/v/3.9/understanding-enterprise-integration-patterns-using-mule より
Pattern Mapping to a Mule Object
File Transfer File Transport
Shared Database JDBC Transport
Messaging Mule is all about Messaging
Message Channel Mule provides a message channel that
connects the message processors in a flow.
Pipes and Filters A Flow implements a pipe and filter
architecture
Message Router Message Routers
Message Translator Message Transformer
Message Endpoint Inbound & Outbound Endpoints
Pattern Mapping to a Mule Object
Point-to-Point Channel The default channel within a flow.
Message Bus Mule is a message bus.
Content-Based Router Choice
Message Filter Filters
Recipient List Recipient List
Splitter Collection Splitter, Message Chunk Splitter &
Plain Splitter
Aggregator Collection Aggregator, Message Chunk
Aggregator & Custom Aggregator
Resequencer Resequencer
Idempotent Receiver Idempotent Message Filter
Copyright (C) 2018 OGIS-RI All rights reserved.
Conversation Patterns
• EIP本の第2弾
– Gregor Hohpe氏が執筆中(2019.1.19に発売予定? Amazonより)
• EIPは、メッセージとそれが通るコンポーネントに着目していたが、
Conversation Patternsでは時間の経過に伴うメッセージの流れ相互作用に着目
http://www.enterpriseintegrationpatterns.com/patterns/conversation/ より
Copyright (C) 2018 OGIS-RI All rights reserved.
基本的な会話のパターン
• システム連携の相互通信を検討する際のパターン
• REST APIの設計時にも役に立つ考え方
Pattern 概要
Fire-and-Forget 発信者はメッセージを送信し、受信者からの応答は期待しません
Asynchronous Request-Response 発信者と受信者はリクエスト-レスポンスを非同期で行います。リク
エストが送信された順序とは異なる順序で応答が到着する可能性が
あります
Request-Response with Retry Asynchronous Request-Response において、発信者と受信者の両方を
重複しないようにして重複したメッセージを処理できるようにする
Polling 受信者が即時に応答ができない場合、発信者が結果を要求するリク
エストを発行する
Subscribe-Notify Subscriber は Providerが提供するデータへの関心を示すメッセージを
送信することで購読します。その後、Providerは通知メッセージを
Subscriberに送り続けます
Quick Acknowledgment 受信者はリクエストを処理するのに時間がかかる場合でも、
Acknowledgmentメッセージを返信し、後でリクエストの結果を返信
する
Copyright (C) 2018 OGIS-RI All rights reserved.
一貫性に関するパターン
• API-let ConnectivityやApplication Networkを実現する上で重要なREST APIのエラー
とリトライ、べき等性に関連するパターン(齋藤理解)
• 一部のパターンはHohpe氏のブログ記事「スターバックスは2フェーズコミットを
使わない(Starbucks Does Not Use Two-Phase Commit)」に実例が掲載されている
Pattern 概要
Ignore Error エラーを無視する。エラー処理のコストが処理全体のコスト
に見合わないケース
Compensating Action 補償行為。エラーにより不整合が発生した場合、元に戻す。
処理を行うことで一貫性を担保する
Tentative Operation 仮の操作を実行し、その後確認を行うことで処理を完結させ
る
Coordinated Agreement 仲介者が各参加者の状況・回答を確認し、その結果を判断し。
参加者と共有する
Copyright (C) 2018 OGIS-RI All rights reserved.
Mule のアーキテクチャコンセプト
イベントドリブンとパイプ&フィルタ
• Mule は様々なシステム連携に対応するために抽象化された処理モデルを
採用している
• イベントドリブンアーキテクチャとパイプ&フィルタモデルである
イベント
(メッセージ)
Flowの処理モデル
データ
変換
API
呼出
DB
アクセス イベント
(メッセージ)
API
DB
Copyright (C) 2018 OGIS-RI All rights reserved.
Mule3のスレッドモデル
• 同期の場合は、すべてが同じスレッドで動作する
• 非同期の場合は、RECIVER、Flow、DESPACHTERが別々のスレッドで動作する
https://docs.mulesoft.com/mule-user-guide/v/3.9/tuning-performance
Copyright (C) 2018 OGIS-RI All rights reserved.
Mule4のNon-blocking IO
• I/O(HTTPリクエストなど)の処理を待たずに別の処理を開始することができる
• Mule 3.7 からHTTPなど一部のConnectorで適応可能だった
• 基本的にすべてのFlowでNon-blocking IO方式が適用される
Copyright (C) 2018 OGIS-RI All rights reserved.
Mule3におけるチューニング
• Muleのパフォーマンスチューニングは、スレッドに関するパラメータの調整になる
– maxThreadsActive
– maxThreadsIdle
• 以下の要素を考慮しなければならない
– Flowのスレッドパーン
– 利用している Connectorの性質
Copyright (C) 2018 OGIS-RI All rights reserved.
Mule4のセルフチューニングとは
• CPUリソース状況を確認しながら処理のスケジュール
• Muleの各コンポーネントに ProcessingTypeが割与えられている
– CPU INTENSIVE
• 計算処理や変換処理など
– CPU LITE
• ルーティング、フィルタリング
non-blocking IOなど
– IO_RW
• ストリーミングデータ処理 など
Mule 4.1.2 org.mule.runtime.core.api.processor.ReactiveProcessor より
https://www.mulesoft.com/whitepaper/api/what-is-new-mule-4 より
Copyright (C) 2018 OGIS-RI All rights reserved.
で、結局Mule4になったら何が変わるのか?
• 新しくMule4を使う人
– 非常に難しいスレッド回りの概念やチューニングからサヨナラで
きて Happy!
• Mule3からマイグレーションする人
– (おそらく)Muleが利用するリソース(CPU、メモリ)の使い方が変わ
るので注意
• 処理によるがMule(3まで)は高負荷時メモリの消費が多くなる(スレッドを多く生成するため)が、
non-blockingになったことによりメモリの消費が少なくなり、CPUの負荷が上がると考えられる
• セルフチューニングにより、どこまで最適化されるかは実際のFlowを高負荷環境で動作させな
いとわからないため要検証
Copyright (C) 2018 OGIS-RI All rights reserved.
Thank you 

More Related Content

What's hot

WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホン
You_Kinjoh
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
Ryota Watabe
 

What's hot (20)

5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ
 
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
WebSocketのキホン
WebSocketのキホンWebSocketのキホン
WebSocketのキホン
 
CloudHubのログバックアップについて
CloudHubのログバックアップについてCloudHubのログバックアップについて
CloudHubのログバックアップについて
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
AWSで作る分析基盤
AWSで作る分析基盤AWSで作る分析基盤
AWSで作る分析基盤
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
バッチ処理にバインド変数はもうやめません? ~|バッチ処理の突発遅延を題材にして考えてみる~
 
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発 #jsug #sf_h1
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #1320210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
 
堅牢な国内システムへの導入でも安心!実践的Mulesoft設計テクニック(NTTデータ テクノロジーカンファレンス 2020 発表資料)
堅牢な国内システムへの導入でも安心!実践的Mulesoft設計テクニック(NTTデータ テクノロジーカンファレンス 2020 発表資料)堅牢な国内システムへの導入でも安心!実践的Mulesoft設計テクニック(NTTデータ テクノロジーカンファレンス 2020 発表資料)
堅牢な国内システムへの導入でも安心!実践的Mulesoft設計テクニック(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 

Similar to Mule Runtime のアーキテクチャコンセプト紹介

Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
kounan13
 
Hadoop conferencejapan2011
Hadoop conferencejapan2011Hadoop conferencejapan2011
Hadoop conferencejapan2011
Ichiro Fukuda
 

Similar to Mule Runtime のアーキテクチャコンセプト紹介 (20)

DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2DataEngConf NYC’18 セッションサマリー #2
DataEngConf NYC’18 セッションサマリー #2
 
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
 
Sumo Logic活用事例とその運用
Sumo Logic活用事例とその運用Sumo Logic活用事例とその運用
Sumo Logic活用事例とその運用
 
Machine learning 15min TensorFlow hub
Machine learning 15min TensorFlow hubMachine learning 15min TensorFlow hub
Machine learning 15min TensorFlow hub
 
Wg for ai_dev_ops_20180713
Wg for ai_dev_ops_20180713Wg for ai_dev_ops_20180713
Wg for ai_dev_ops_20180713
 
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & Robot
 
ログについて改めて考えてみた
ログについて改めて考えてみたログについて改めて考えてみた
ログについて改めて考えてみた
 
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
 
グリーにおけるSumo Logic活用事例
グリーにおけるSumo Logic活用事例グリーにおけるSumo Logic活用事例
グリーにおけるSumo Logic活用事例
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
【2018/09/11】PAYでのReact Nativeにおける APIクライアント実装 について
 
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
 
Swagger jjug ccc 2018 spring
Swagger jjug ccc 2018 springSwagger jjug ccc 2018 spring
Swagger jjug ccc 2018 spring
 
JTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoTJTF2018 FIWARE x robot x IoT
JTF2018 FIWARE x robot x IoT
 
Hadoop conferencejapan2011
Hadoop conferencejapan2011Hadoop conferencejapan2011
Hadoop conferencejapan2011
 
IntalioのChemistry Of ProcessコンセプトとIntalio|BPPの動向021609
IntalioのChemistry Of ProcessコンセプトとIntalio|BPPの動向021609IntalioのChemistry Of ProcessコンセプトとIntalio|BPPの動向021609
IntalioのChemistry Of ProcessコンセプトとIntalio|BPPの動向021609
 
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
[CTO Night & Day 2019] よくある課題を一気に解説!御社の技術レベルがアップする 2019 秋期講習 #ctonight
 
2018年12月15日 AITC女子会 会話の記録と分析
2018年12月15日 AITC女子会 会話の記録と分析2018年12月15日 AITC女子会 会話の記録と分析
2018年12月15日 AITC女子会 会話の記録と分析
 

Recently uploaded

Recently uploaded (11)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

Mule Runtime のアーキテクチャコンセプト紹介

  • 1. Copyright (C) 2018 OGIS-RI All rights reserved. 株式会社オージス総研 齋藤伸也 Mule Runtime のアーキテクチャコンセプト紹介 ~EIP、Conversation Patterns、SEDA、Non-blocking~
  • 2. Copyright (C) 2018 OGIS-RI All rights reserved. ご注意 本スライドの記述は MuleSoft, Inc. の公 式見解ではありません。 2
  • 3. Copyright (C) 2018 OGIS-RI All rights reserved. 自己紹介 • 齋藤伸也 (Saito_Shinya@ogis-ri.co.jp) • 株式会社オージス総研 – クラウドインテグレーションサービス部所属 • インテグレーションアーキテクト / APIテクニカルコンサルタント • Mule 2.x 時代(約10年前)からMuleを利用したシステム連携や API構築プロジェクトに参画
  • 4. Copyright (C) 2018 OGIS-RI All rights reserved. 今日の話 • システム連携のパターン – Enterprise Integration Patterns – Conversation Patterns • Mule engine の処理モデル – Muleのスレッドモデル(Mule3)とNon-blocking IO(Mule4) – Muleのチューニング(Mule3)とセルフチューニング(Mule4)
  • 5. Copyright (C) 2018 OGIS-RI All rights reserved. システム連携は簡単? システムA システムB システム連携は線で 結べばOK
  • 6. Copyright (C) 2018 OGIS-RI All rights reserved. システム連携は簡単・・・じゃない • 同期/非同期、リアルタイム/バッチ、1:1/N:1/N:N • データサイズ、連携頻度 • プロトコル、データ形式 • 経路の信頼性、エラー処理 • ・・・・などなど システムA システムB
  • 7. Copyright (C) 2018 OGIS-RI All rights reserved. Enterprise Integration Patterns • 著者:Gregor Hohpe氏 and Bobby Woolf氏. 2005 • 企業におけるシステム連携のパターンを65種類網羅 したパターン本 • Mule、Camel、Spring Integrationなど様々な連携ミドルウェアがリ ファレンスしている • メリット – システム連携の共通言語、連携アーキテクチャの議論の出発点 http://www.enterpriseintegrationpatterns.com より
  • 8. Copyright (C) 2018 OGIS-RI All rights reserved. EIPとMule https://docs.mulesoft.com/mule-user-guide/v/3.9/understanding-enterprise-integration-patterns-using-mule より Pattern Mapping to a Mule Object File Transfer File Transport Shared Database JDBC Transport Messaging Mule is all about Messaging Message Channel Mule provides a message channel that connects the message processors in a flow. Pipes and Filters A Flow implements a pipe and filter architecture Message Router Message Routers Message Translator Message Transformer Message Endpoint Inbound & Outbound Endpoints Pattern Mapping to a Mule Object Point-to-Point Channel The default channel within a flow. Message Bus Mule is a message bus. Content-Based Router Choice Message Filter Filters Recipient List Recipient List Splitter Collection Splitter, Message Chunk Splitter & Plain Splitter Aggregator Collection Aggregator, Message Chunk Aggregator & Custom Aggregator Resequencer Resequencer Idempotent Receiver Idempotent Message Filter
  • 9. Copyright (C) 2018 OGIS-RI All rights reserved. Conversation Patterns • EIP本の第2弾 – Gregor Hohpe氏が執筆中(2019.1.19に発売予定? Amazonより) • EIPは、メッセージとそれが通るコンポーネントに着目していたが、 Conversation Patternsでは時間の経過に伴うメッセージの流れ相互作用に着目 http://www.enterpriseintegrationpatterns.com/patterns/conversation/ より
  • 10. Copyright (C) 2018 OGIS-RI All rights reserved. 基本的な会話のパターン • システム連携の相互通信を検討する際のパターン • REST APIの設計時にも役に立つ考え方 Pattern 概要 Fire-and-Forget 発信者はメッセージを送信し、受信者からの応答は期待しません Asynchronous Request-Response 発信者と受信者はリクエスト-レスポンスを非同期で行います。リク エストが送信された順序とは異なる順序で応答が到着する可能性が あります Request-Response with Retry Asynchronous Request-Response において、発信者と受信者の両方を 重複しないようにして重複したメッセージを処理できるようにする Polling 受信者が即時に応答ができない場合、発信者が結果を要求するリク エストを発行する Subscribe-Notify Subscriber は Providerが提供するデータへの関心を示すメッセージを 送信することで購読します。その後、Providerは通知メッセージを Subscriberに送り続けます Quick Acknowledgment 受信者はリクエストを処理するのに時間がかかる場合でも、 Acknowledgmentメッセージを返信し、後でリクエストの結果を返信 する
  • 11. Copyright (C) 2018 OGIS-RI All rights reserved. 一貫性に関するパターン • API-let ConnectivityやApplication Networkを実現する上で重要なREST APIのエラー とリトライ、べき等性に関連するパターン(齋藤理解) • 一部のパターンはHohpe氏のブログ記事「スターバックスは2フェーズコミットを 使わない(Starbucks Does Not Use Two-Phase Commit)」に実例が掲載されている Pattern 概要 Ignore Error エラーを無視する。エラー処理のコストが処理全体のコスト に見合わないケース Compensating Action 補償行為。エラーにより不整合が発生した場合、元に戻す。 処理を行うことで一貫性を担保する Tentative Operation 仮の操作を実行し、その後確認を行うことで処理を完結させ る Coordinated Agreement 仲介者が各参加者の状況・回答を確認し、その結果を判断し。 参加者と共有する
  • 12. Copyright (C) 2018 OGIS-RI All rights reserved. Mule のアーキテクチャコンセプト イベントドリブンとパイプ&フィルタ • Mule は様々なシステム連携に対応するために抽象化された処理モデルを 採用している • イベントドリブンアーキテクチャとパイプ&フィルタモデルである イベント (メッセージ) Flowの処理モデル データ 変換 API 呼出 DB アクセス イベント (メッセージ) API DB
  • 13. Copyright (C) 2018 OGIS-RI All rights reserved. Mule3のスレッドモデル • 同期の場合は、すべてが同じスレッドで動作する • 非同期の場合は、RECIVER、Flow、DESPACHTERが別々のスレッドで動作する https://docs.mulesoft.com/mule-user-guide/v/3.9/tuning-performance
  • 14. Copyright (C) 2018 OGIS-RI All rights reserved. Mule4のNon-blocking IO • I/O(HTTPリクエストなど)の処理を待たずに別の処理を開始することができる • Mule 3.7 からHTTPなど一部のConnectorで適応可能だった • 基本的にすべてのFlowでNon-blocking IO方式が適用される
  • 15. Copyright (C) 2018 OGIS-RI All rights reserved. Mule3におけるチューニング • Muleのパフォーマンスチューニングは、スレッドに関するパラメータの調整になる – maxThreadsActive – maxThreadsIdle • 以下の要素を考慮しなければならない – Flowのスレッドパーン – 利用している Connectorの性質
  • 16. Copyright (C) 2018 OGIS-RI All rights reserved. Mule4のセルフチューニングとは • CPUリソース状況を確認しながら処理のスケジュール • Muleの各コンポーネントに ProcessingTypeが割与えられている – CPU INTENSIVE • 計算処理や変換処理など – CPU LITE • ルーティング、フィルタリング non-blocking IOなど – IO_RW • ストリーミングデータ処理 など Mule 4.1.2 org.mule.runtime.core.api.processor.ReactiveProcessor より https://www.mulesoft.com/whitepaper/api/what-is-new-mule-4 より
  • 17. Copyright (C) 2018 OGIS-RI All rights reserved. で、結局Mule4になったら何が変わるのか? • 新しくMule4を使う人 – 非常に難しいスレッド回りの概念やチューニングからサヨナラで きて Happy! • Mule3からマイグレーションする人 – (おそらく)Muleが利用するリソース(CPU、メモリ)の使い方が変わ るので注意 • 処理によるがMule(3まで)は高負荷時メモリの消費が多くなる(スレッドを多く生成するため)が、 non-blockingになったことによりメモリの消費が少なくなり、CPUの負荷が上がると考えられる • セルフチューニングにより、どこまで最適化されるかは実際のFlowを高負荷環境で動作させな いとわからないため要検証
  • 18. Copyright (C) 2018 OGIS-RI All rights reserved. Thank you 