According to Wikipedia, a distributed system is a software system in which components located on networked computers communicate and coordinate their actions by passing messages. The components interact with each other in order to achieve a common goal. There are many alternatives for the message passing mechanism, including RPC-like connectors and message queues. Three significant characteristics of distributed systems are: concurrency of components, lack of a global clock, and independent failure of components. An important goal and challenge of distributed systems is location transparency. Examples of distributed systems vary from SOA-based systems to massively multiplayer online games to peer-to-peer applications.
A distributed system may have a common goal, such as solving a large computational problem. Alternatively, each computer may have its own user with individual needs, and the purpose of the distributed system is to coordinate the use of shared resources or provide communication services to the users.
Based on the above guideline, we can classify the distributed systems into various Web Service implementation with Service Oriented Architecture (SOA) and the peer to peer architecture designs. In terms of the message exchanging mechanism, there are synchronous calls and asynchronous communications using message queues with Remote Procedure Call (RPC) and XML technologies.
There are existing Distribute Computing Platforms, such as BOINC (Berkeley Open Infrastructure for Network Computing), which are typicallyused in the science, financial and mathematics fields. They are beyond the topic we are discussing.
1. Web Service Web Service technology evolved from COM, DCOM, CORBA and RMI to SOAP technology to invoke process or method from the remote servers. After the SOAP protocol is widely accepted by the Web Service field, there are various software packages available to build the communication layer and simplify the message exchange synchronously and asynchronously. Some of them are pure RPC call via object serialization, while others are using document literal with XML schema. Existing packages are Apache Axis, JAX_RPC, JAX_WS, JWS, Oracle BPEL, as well as the RESTful web services. All of them provide common interfaces to communicate between remote programs. You may also implement them using the asynchronous message queuing mechanism, such as IBM's MQSeries, Oracle'sTuxedo and Tibco's Enterprise Message Service (EMS), or simply using the message driven bean in Java. 2. Peer to Peer Peer to Peer is another type of system architecture to communicate between any of the two arbitrary nodes in a computational system. It's different from the point to point client-server model that only the server is listening to as a daemon and clients are sending requests to the pre-configured servers. Peer to Peer architecture can meet the challenge of achieving location transparency. Usually the distributed peers have some brokers sitting in the middle to keep the peer information updates. So each peer's information is not pre-configured, but can be dynamically acquired from the broker. The broker only carries a thin layer of information to facilitate the communication among the peers, while each peer carries the data to serve or exchange with other peers. Typical Peer to Peer implementation and applications are: JAT 0.2, Napster, FAROO and BitCoin. FAROO is a type of distributed search engine thatmakes use of every user's computer as a peer node. It shares and exchanges data among all the peers to retrieve search results from various peer search engines, which collect and index data separately.