From: Jeff Duzak (jduzak_at_exchange.microsoft.com)
Date: Wed Feb 25 2004 - 13:30:00 PST
This paper describes Porcupine, a distributed email server. The goal of
the system is to be highly scalable, which the authors define as
consisting of manageability, availability, and performance. The system
runs on a cluster of commodity machines, the advantages of which were
described by the previous paper (Fox et al). The paper describes the
architecture of the system, talks about the handling of events such as
node adds and drops, and evaluates the performance of the system.
Porcupine is very similar to the TranSend system described by Fox et al.
The main distinction between the two systems is that Porcupine is
homogenous, in the sense that each node performs all of the tasks of the
system. In TranSend, nodes were delegated specific tasks.
Since there is no specific machine responsible for backing storage, hard
state is fragmented and distributed between multiple machines. Soft
state is used to improve performance. Soft state is defined as state
that, if lost, can be reconstructed from hard state. So, the soft state
is essentially a cache of the hard state. An example of soft state is a
user's profile. When a user is connected to a node in order to send or
receive mail, that user's profile is requested from the machine
responsible for its storage, and is retained as soft state on that node
to which the user is connected.
Scalability is aided by the fact that mail messages can be stored and
retrieved at any of several nodes. A user's mailbox is split between
several nodes. The count of these nodes depends on a system parameter
called the spread. An incoming message can be stored at any node on
which a fragment of the user's mailbox is stored, and then the remaining
nodes will (asynchronously) be notified of the existance of the message.
This can cause some consistency problems. For example, the contents of
a user's mailbox may differ depending on the node to which the user is
connected. However, these consistency problems are acceptable.
The performance of Porcupine was compared to that of a standard SMTP
server. Without replication, the Porcupine system performed better than
the standard SMTP server. However, the authors postulated that the
standard SMTP systems could, with some optimizations, match the
performance of the Porcupine system without replication.
Where the Porcupine system really wins is with skewed load and
heterogeneous equipment. A standard SMTP server statically assigns a
mailbox to a particular machine. Therefore, if user mail is unbalanced,
the load between machines is unbalanced. Porcupine, on the other hand,
distributes load dynamically based on the backlog of work on each
machine. Therefore, it can handle non-uniform distribution of mail.
The same mechanism also allows the system to distribute load based on
the capabilities of each machine, and to automatically redistribute when
a new machine is added or new hardware is added to a machine.
To have a system such as Porcupine automatically adjust to the equipment
on which it runs seems a really good idea, and it seems necessary in
order to take advantage of the relative cheapness of commodity
equipment. Further, it seems as though self-management will be a
requirement of future systems, simply because their scale makes manual
configuration and management prohibitive.
This archive was generated by hypermail 2.1.6 : Wed Feb 25 2004 - 13:30:02 PST