Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
13. parallel processing
1. Camel In Action 2nd edition 読書会
2020年9⽉29⽇
13. ParallelProcessing
2. l 逐次処理
l 複数の処理A,B,Cがあるとき、Exchangeを単⼀スレッドでA,B,Cの順に⾏う
l Exchangeの処理時間は、A,B,C処理時間の合計となる
l 並列処理
l 複数の処理A,B,Cを(ほぼ)同時に⾏うこと
l Exchangeの処理時間は、A,B,Cの何れかの⼀番⻑い処理時間となる
逐次処理/並列処理
20202
Camel Route
連携元
システム
A B C
Consumer
Endpoint
Camel Route
連携元
システム
A
B
C
Consumer
Endpoint
- Multicast
- Split
- Threads
- Wiretap
- など(※)
※ 並列処理をサポートするEIPの⼀覧は、本の「Table 13.4 EIPs in Camel that support parallel processing」を参照
thread1 thread1 thread1
thread1
thread2
thread3
9. l 同期処理
l 呼び出し元(例: Jetty Consumer)が呼び出
し先(例: ERP)の処理結果返すまで待つ
(Camel内の)同期処理/⾮同期処理
20209
l ⾮同期処理
l 呼び出し元(例: Jetty Consumer)が呼び出し先
(例: ERP)の処理結果返すを待たず別の処理を進
⾏し
l 呼び出し先の処理結果が返ってきたら、元の処
理を継続する
10. l AHC Camel 2.8: (only producer)
l AWS Camel 2.11: (only consumer) for S3 and SNS.
l Avro Camel 2.10: (only producer)
l CXF Camel 2.5: (both consumer and producer)
l CXFRS Camel 2.5: (only consumer)
l Direct-VM Camel 2.10.5/2.11.0: (both consumer and producer)
l File - (only consumer)
l FTP - (only consumer)
l Guava EventBus Camel 2.10: (only consumer)
l JBI (both consumer and producer)
l Jetty (both consumer and producer)
l JGroups Camel 2.10: (only consumer)
l JMS Camel 2.5: (only producer for Request Reply messaging over
JMS). Camel 2.9: (consumer, if option asyncConsumer=true is used).
l JMS Camel 2.9: (also consumer)
l NMR (both consumer and producer)
l Netty only producer (Camel 2.10: also consumer)
l SEDA (both consumer and producer) SEDA was mistakenly in this list until
November 3rd 2012. As of Camel 2.10.x, it still does not leverage the Async
Routing Engine, but support is planned for Camel 3.0.
l Timer Camel 2.12: (only consumer)
⾮同期処理のサポートするCamelコンポーネント
202010
※ https://camel.apache.org/manual/latest/asynchronous-routing-engine.html
11. l Processorの実装
l AsyncProcessorインタフェースを実装する
l 詳細は、https://camel.apache.org/manual/latest/async.html
l カスタムコンポーネントの実装
l DefaultAsyncProducer抽象クラスを継承する
l サンプル: https://github.com/camelinaction/camelinaction2/tree/master/chapter13/scalability
⾮同期処理の実装
202011
※ https://www.javadoc.io/doc/org.apache.camel/camel-core/2.23.0/org/apache/camel/AsyncProcessor.html
※ https://www.javadoc.io/doc/org.apache.camel/camel-core/2.23.0/org/apache/camel/impl/DefaultAsyncProducer.html
12. l 並列処理の使⽤を積極的に
l 並列処理は処理時間を⼤幅に短縮できます。しかし、並列処理をを使う場合、以
下の点を注意してください。
1. スレッドセーフな変数を使うこと
2. 呼び出し先のロジックも並⾏して処理できるのが必要
3. 処理の順序性が失うこと
l ThreadPoolの調整は慎重に
l 多くの場合、デフォルト設定をお勧めします。
l ThreadPool調整後の変化が測定できる場合のみ、ThreadPoolを微調整します。
l スケーラビリティ性が求められる場合、⾮同期処理を使⽤する
l この場合、⾮同期処理モデルをサポートするCamelコンポーネントを使⽤してみ
てください。
l 独⾃の⾮同期コンポーネントを実装する場合は、Camelコンポーネントの実装
ルールに従って構造化する必要があります。これにより、メッセージを受信した
時、またはタイムアウトが発⽣した時でも、Camelがメッセージをルーティング
できるようになり、スレッドがスタックするという潜在的な問題が回避されます。
l リアクティブシステム
l リアクティブストリームとフレームワークの⼈気が⾼まっています。これらを
Camelで使⽤する⽅法については、第20章(オンラインで⼊⼿可能)を参照して
ください。
並列処理・⾮同期処理のベストプラクティス
202012