A computer cluster is a group of loosely coupled computers that work together closely and can be viewed as a single computer. Clusters have evolved to improve speed and support applications like e-commerce and databases. The first commodity clustering product was ARCnet in 1977, and now Microsoft, Sun, and others offer clustering packages. Clusters significantly reduce the cost of processing power, eliminate single points of failure through availability, and can grow in capacity as nodes are added. They are commonly used for web services, databases, and computationally or data-intensive tasks. Programming clusters requires messaging between nodes since memory cannot be directly accessed between nodes.