Coursera Software Architecture Week2 Learning Objectives-3
Data Flow Architecture
Pipe and Filter Architecture
Filter: データの変換 Pipe: データの通り道
Filterは『どのようなデータが入ってきて』『どのようなデータが出ていくのか』だけに集中することで、疎結合になる。 また、Filterの内部をブラックボックスとすることができ、Filterは再利用が可能である。
しかし、Filterを増やすと、そのぶんオーバーヘッドが増える。 また、このPipe & Filter Architectureはインタラクティブなアプリケーションには向かない。レスポンスに時間がかかるからである。
Event Based
Event Based Architectureでは、イベントはシステム内の主要要素である。シグナルやユーザー入力、メッセージ、データなどがイベントになりうる。イベントが発生することにより、何かしらの機能が動作する。 Event Based Architectureでは、イベントジェネレータ(イベントを作成する)とイベントコンシューマ(イベントを受け取り処理する)の二つの役割のものがある。
イベントによって起動される機能は、サブルーチンを実行するときのように明示的に実行されるのではなく、イベントバスを通じて暗黙的に実行される。イベントバスはイベントジェネレータとイベントコンシューマをつなぐ役割をする。イベントジェネレータがイベントを作成すると、イベントバスがそれを検知しイベントコンシューマに通知する。つまり、すべてのイベントはイベントバスを通じてイベントコンシューマに届けられる。これはデザインパターンのオブザーバーパターンと同じである。
このようにすると、イベントジェネレータはどのコンシューマがイベントを受け取るのかを気にしないし、イベントコンシューマはどのジェネレータがイベントを作成したのかを気にしなくて良くなる。
しかし、イベントバスを使うと、複数のコンシューマが同時に同じイベントを受け取り処理することで、データ更新で競合するということが発生する。競合を防ぐため、セマフォという仕組みが考えられた。値が使用されているかどうかを示すことで、競合を防ぐ。
Event Based Architectureでは、事前に機能が実行される順番を予測することはできない。
Process Control
フィードバックループ
- センサー:状態を監視する
- コントローラー:ロジック
- アクチュエーター:プロセスを操作する
- プロセス:操作したい対象 センサーがプロセスの状態を取得し、コントローラーに送る。コントローラーのロジックが状態をあるべき状態の差を計算し、アクチュエーターに操作をリクエストする。アクチュエーターはプロセスを操作する。そしてその状態をセンサーが取得する。
コントローラーは常に動いていなければいけない(状態はつねに変化するので)。
フィードフォワードループ
フィードバックループに、外的要因を排除するための修正操作を追加したもの。