Before you begin to develop a fault-tolerant system, you should specify the system requirements. Besides high fault tolerance and performance, the computing system shall be highly available. Such systems include NUMA systems with non-uniform memory access, SMP systems with symmetrical multiprocessing and MPP mass-parallel systems. The ultimate choice of architecture largely depends on whether maximum performance, scalability, or fault tolerance and availability are needed.