Introduction to Distributed Systems
A distributed system is a collection of independent computers that appears to its users as a single coherent system.
There are two aspects to such a system: hardware and software. The hardware machines must be autonomous and the software must be organized in such a way as to make the users think that they are dealing with a single system. Expanding on these fundamentals, distributed systems typically have the following characteristics; they should:
- be capable of dealing with heterogeneous devices, i.e., various vendors, software stacks and operating systems should be able to interoperate
- be easy to expand and scale
- be permanently available (even though parts of it may not be)
- hide communication from the users.
In order for a distributed system to support a collection of heterogeneous computers and networks while offering a single system view, the software stack is often divided into two layers. At the higher layers, there are applications (and users) and at the lower layer there is middleware, which interacts with the underlying networks and computer systems to give applications and users the transparency they need.
Middleware abstracts the underlying mechanisms and protocols from the application developer and provides a collection of high-level capabilities to make it easier for programmers to develop and deploy their applications. For example, within the middleware layer, there may be simple abstract communication calls that do not specify which underlying mechanisms they actually use, e.g., TCP/IP, UDP, Bluetooth, etc. Such concrete deployment bindings are often decided at run time through configuration files or dynamically, thereby being dependent on the particular deployment environment.
Middleware therefore provides the virtual overlay across the distributed resources to enable transparent deployment across the underlying infrastructures.