One of the most well known distributed applications is email. This application has been around for a couple of decades and materializes millions of email messages per hour world wide. See Figure 8 on page .
The email application is the pinnacle of distributed applications. Each computer accomplishes one small step in the process in an autonomous fashion. Individual components may fail while the system remains available to most of the users. The architecture is asynchronous, limited-shared-state, highly available, elaboration tolerance, message passing, with a dynamic protocol.
The big picture of how this works is simple. Each machine has an application server program that understands the email protocol of SMTP. When two machines want to exchange email, first they synchronize to a known initial shared state, then the email message header control information is exchanged. If the second machine agrees to the transfer, the contents of the email is then delivered. The receiving machine places the email in a special spool directory for later reading by the end user. Alternatively, the receiving machine may reject the email message or provide forwarding information.
The next piece of the big picture are the email clients. When the end user wants to send email, a email client hands the email to the machine's email server. The server exchanges the email with another machine's email server. The recipient machine places the email message in the spool file belonging to the recipient. The email is ready for the final delivery stage. When the recipient wants to read email, the email client reads the spool file and displays the message.
If a server is not available the message is queued for later delivery. If an error occurs during transmission, the message is resent. Messages sent to unknown recipients are bounced back to the sender. An email address may include routing information, in which case, the receiver machine accepts the message, removes it's name from the routing list, and then processes the message to the next machine.
Email has survived many major upgrades. MIME extends the simple text message to include other data types. This is accomplished by providing type indicators on the data. When a particular data type appears in a message, and if your email client is MIME smart, the application that understands that data type is evoked and the data is displayed.
The POP protocol groups messages into message boxes. A pop smart email client will acquire all messages in the message box at the same time. The IMAP protocol groups messages into an indexed database. A IMAP smart client can query the index to find the appropriate message.
The email application is not perfect. There is no authentication making the email system autonomous and easily spoofed. There is no data privacy of the message with many opportunities for an outside third party to discover the contents of a message. There is no data integrity of the message allowing for the substitution the message, in transit, without knowledge of the recipient. There is no digital signature on the message that guarantees that the sender really sent this message. There are no guarantees on delivery or performance and no way of specifying different levels of service. In particular, there is no way to verify that a message was delivered and read by the recipient. The recipient could repudiate the receipt of the message.