kenju's blog

About Programming and Mathematics

論文『A Note on Distributed Computing』を読んだ

"論文『Orleans: Distributed Virtual Actors for Programmability and Scalability』を読んで" ( ) を書いたときと同様のきっかけで、"Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems" の Chapter 4 を読んでい。、章末の文献に紹介された一連の論文の中で、面白そうだったので読んでみた文献の一つ。

分散システムを実装するにあたって必要な基本的概念や設計パターンについて書かれている。1994 年執筆なので少し古いが、内容は今のクラウドアーキテクチャが一般的になった現代でも十分通じる、基本的な考え方が書かれていると感じた。




  • Writing a distributed application in this model proceeds in three phases
    • The first phase is to write the application without worrying about where objects are located and how their communication is implemented
    • The second phase is to tune performance by "concretizing" object locations and communication methods
    • The final phase is to test with "real bullets" (e.g., networks being partitioned, machines going down)


  • Communications protocol development has tended to follow two paths.
    • One path has emphasized integration with the current language model.
    • The other path has emphasized solving the problems inherent in distributed computing.


  • The major differences between local and distributed computing concern the areas of latency, memory access, partial failure, and concurrency


  • A more fundamental (but still obvious) difference between local and remote computing concerns the access to memory in the two cases - specifically in the use of pointers


  • While unlikely, it is at least logically possible that the differences in latency and memory access between local computing and distributed computing could be masked.
  • Partial failure is a central reality of distributed computing. ... This is not the case in distributed computing. where one component (machine, network link) can fail while the others continue.