(What)分散システムとは?
ネットワークに繋がれた複数のコンピュータを使って、プログラムを同時並行的に実行するシステムのこと。
(Why)なぜ分散システムを使うのか?
以下三つの観点がある
- Scalability
- より多くのPCリソースを使うことで、計算処理をより早く終わらせるため。
- Resilience
- 処理を担当できるPCが複数台あることで、その中のどれかがクラッシュなどで処理不能になった場合でも、処理自体は完遂可能にするため。
- Location
- ネットワーク通信は時間がかかる(特に日本とブラジルのように物理的にも距離が遠いとなおさら)が、物理的にユーザとサーバを近づけることでネットワーク通信の速度を短縮するため。
特徴(分散システムをうまく動作させるために)
個々のプログラムを疎結合にする必要がある。
個々のプログラムはAPI経由で連携を取り合い、それぞれの実装については知っていてはならない。データを重複して持っている必要がある。
それぞれのプログラムが同じデータを参照すると、分散させている効力が発揮できない?
だが、重複してデータを持つことは潜在的なバグの温床になるので、難しいところ。
参考
http://container-solutions.com/what-is-a-distributed-system/
https://ja.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0