Distributed Systems

Distributed computing is a field of computer science that studies distributed systems. A distributed system is a system whose components are located on different networked computers, which then communicate and coordinate their actions by passing messages to each other. The components interact with each other in order to achieve a common goal. Three significant characteristics of distributed systems are: concurrency of components, lack of a global clock, and independent failure of components. Examples of distributed systems vary from SOA-based systems to massively multiplayer online games to peer-to-peer applications.

A computer program that runs within a distributed system is called a distributed program (and distributed programming is the process of writing such programs). There are many different types of implementations for the message passing mechanism, including pure HTTP, RPC-like connectors and message queues.

A goal or challenge pursued by some computer scientists and practitioners in distributed systems is location transparency; however, this goal has fallen out of favor in industry. As distributed systems are a different concept from conventional non-distributed systems, the differences, such as network partitions, partial system failures, and partial upgrades, cannot simply be "papered over" by attempts at "transparency" (see CAP theorem).

Interviews

You worked at Capital One first and then switched over to Square. So what were you working on at Capital One?

At Capital One, I was working on the first layer of services that our mobile app and website hit. Any new mobile or web request would first reach the service owned by my team. This service implemented security and customisation logic and then made a server request to the broader Capital one ecosystem. Capital One has a lot of microservices. QCon: And what do you work on now at Square?

Was the stack you worked on at Capital One JVM based or Node?

There were a lot of people at Capital One who worked on Java, but I was working on Node there. At Square I am working on a ruby on rails monolith and we are working towards a microservices based architecture.