[edit]
Concurrency
Distributed computing implements a kind of concurrency. It interrelates
tightly with concurrent programming so much that they are sometimes not
taught as distinct subjects
[1]
.
[edit]
Multiprocessor systems
A multiprocessor system is simply a computer that has more than one CPU on
its motherboard. If the operating system is built to take advantage of this, it
can run different processes (or different threads belonging to the same
process) on different CPUs.
Over the years, many different multiprocessing options have been explored
for use in distributed computing. Intel CPUs from the late Pentium 4 era
(Northwood and Prescott cores) employed a technology called
Hyperthreading that allowed more than one thread (usually two) to run on
the same CPU. The most recent Sun UltraSPARC T1, AMD Athlon 64 X2,
AMD Athlon FX, Intel Pentium D and Intel Core 2 processors feature
multiple processor cores to also increase the number of concurrent threads
they can run.
[edit]
Multicomputer systems
A multicomputer system is a system made up of several independent
computers interconnected by a telecommunications network.
Multicomputer systems can be homogeneous or heterogeneous: A
homogeneous distributed system is one where all CPUs are similar and are
connected by a single type of network. They are often used for parallel
computing.
A heterogeneous distributed system is made up of different kinds of
computers, possibly with vastly differing memory sizes, processing power and
even basic underlying architecture. They are in widespread use today, with
many companies adopting this architecture due to the speed with which
hardware goes obsolete and the cost of upgrading a whole system
simultaneously.
[edit]
Computing taxonomies
The types of distributed computers are based on Flynn's taxonomy of systems;
single instruction, single data (SISD), single instruction, multiple data (SIMD),
and multiple instruction, multiple data (MIMD). Other taxonomies and
architectures available at Computer architecture and in Category:Computer
architecture.
[edit]
Computer clusters
Main article: Cluster computing
A cluster consists of multiple stand-alone machines acting in parallel across a
local high speed network. Distributed computing differs from cluster
computing in that computers in a distributed computing environment are
typically not exclusively running "group" tasks, whereas clustered computers
are usually much more tightly coupled. Distributed computing also often
consists of machines which are widely separated geographically.
[edit]
Grid computing
Main article: Grid computing
A grid uses the resources of many separate computers connected by a network
(usually the Internet) to solve large-scale computation problems. Most use idle
time on many thousands of computers throughout the world. Such
arrangements permit handling of data that would otherwise require the
power of expensive supercomputers or would have been impossible to analyze.
[edit]
Languages
Nearly any programming language that has access to the full hardware of the
system could handle distributed programming given enough time and code.
Remote procedure calls distribute operating system commands over a
network connection. Systems like CORBA, Microsoft D/COM, Java RMI and
others, try to map object oriented design to the network. Loosely coupled
systems that communicate through intermediate documents that are typically
human readable are XML, HTML, SGML, X.500, and EDI.
Languages specifically tailored for distributed programming are:
Ada programming language
[2]
Alef programming language
E programming language
Erlang programming language
Limbo programming language
Oz programming language
[edit]
Examples
[edit]
Projects
Main article: List of distributed computing projects
A variety of distributed computing projects have grown up in recent years.
Many are run on a volunteer basis, and involve users donating their unused
computational power to work on interesting computational problems.
Examples of such projects include SETI@home, which is focused on analyzing
radio-telescope data to find evidence of intelligent signals from space, and
distributed.net, which is focused on breaking various cryptographic ciphers.
[3]
Distributed computing projects also often involve competition with other
distributed systems. This competition may be for prestige, or it may be a
matter of enticing users to donate processing power to a specific project. For
example, stat races are a measure of the work a distributed computing project
has been able to compute over the past day or week. This has been found to be
so important in practice that virtually all distributed computing projects offer
online statistical analyses of their performances, updated at least daily if not
in real-time.
[edit]
Other examples
An example of a distributed system is the World Wide Web. As you are
reading a web page, you are actually using the distributed system that
comprises the site. As you are browsing the web, your web browser running
on your own computer communicates with different web servers that provide
web pages. Possibly, your browser uses a proxy server to access the web
contents stored on web servers faster and more securely. To find these
servers, it also uses the distributed domain name system. Your web browser
communicates with all of these servers over the Internet, via a system of
routers which are themselves part of a large distributed system.
[edit]
See also
Wikibooks has a book on the topic of
Distributed_Systems
Fallacies of Distributed Computing
Category:Concurrent programming languages
List of distributed computing publications
Parallel computing
Application server
Software componentry
Distributed computing environment
[edit]
References
1. ^ CS236370 Concurrent and Distributed Programming 2002
2. ^ Ada Reference Manual, ISO/IEC 8652:2005(E) Ed. 3, Annex E
Distributed Systems
3. ^ David P. Anderson (2005-05-23). "A Million Years of Computing".
Retrieved on 2006-08-11.
[edit]
Further reading
Tel, Gerard (1994). Introduction to Distributed Algorithms. Cambridge
University Press.
Davies, Antony (June 2004). "Computational Intermediation and the
Evolution of Computation as a Commodity". Applied Economics.
Kornfeld, William (January 1981). "The Scientific Community
Metaphor". MIT AI (Memo 641).
Hewitt, Carl (August 1983). "Analyzing the Roles of Descriptions and
Actions in Open Systems". Proceedings of the National Conference on
Artificial Intelligence.
Hewitt, Carl (April 1985). "The Challenge of Open Systems". Byte
Magazine.
Hewitt, Carl (1999-10-23–1999-10-27). "Towards Open Information
Systems Semantics". Proceedings of 10th International Workshop on
Distributed Artificial Intelligence.