The design and implementation of large distributed fault-tolerant systems in the telecommunications industry is becoming increasingly complex. Traditionally, telecommunications systems have been equipped with fault-tolerant hardware. Recent advances with cheap high-speed off-the-shelf CPUs make an approach with fault tolerance implemented in software more attractive. This typically involves different techniques to replicate data over several computers. The actual implementation of such systems has, however, turned out to be a costly business. Our experiences indicate that traditional software engineering techniques for distributed systems, where typically various interface description languages are used, lead to overly complex systems. The functional programming language Erlang has been designed to ease the design of distributed fault-tolerant applications with massive concurrency. Erlang is currently being employed in a number of applications within the Swedish telecommunications company Ericsson, and the experiences so far are very promising. We describe the ideas behind the support for distributed fault-tolerant programming in the language together with some implementation aspects. The main topic is the idea of dynamic interfaces: symbolic programming languages often have the ability to dynamically identify the type of a data object at runtime. Using this capability, it is possible to implement a general-purpose encoder/decoder which maps data objects from the language to and from a stream of bytes which can be sent on to a network. We show what implications this has on distributed programming techniques.
[1]
Marko C. J. D. van Eekelen,et al.
Guaranteeing Safe Destructive Updates Through a Type System with Uniqueness Information for Graphs
,
1993,
Dagstuhl Seminar on Graph Transformations in Computer Science.
[2]
Claes Wikström,et al.
Concurrent programming in ERLANG (2nd ed.)
,
1996
.
[3]
Per-Åke Larson,et al.
Dynamic hash tables
,
1988,
CACM.
[4]
Andreas Reuter,et al.
Transaction Processing: Concepts and Techniques
,
1992
.
[5]
Joe Armstrong,et al.
Concurrent programming in ERLANG
,
1993
.
[6]
Claes Wikstrom,et al.
Distributed programming in Erlang
,
1994
.
[7]
Hans Nilsson,et al.
Amnesia - A Distributed Real-Time Primary Memory DBMS with a Deductive Query Language
,
1995,
ICLP.
[8]
William G. Griswold,et al.
The design and implementation of dynamic hashing for sets and tables in icon
,
1993,
Softw. Pract. Exp..
[9]
Bogumil Hausman.
Turbo Erlang: Approaching the Speed of C
,
1993,
ICLP-Workshops on Implementation of Logic Programming Systems.