Andreas Granig of UPC Austria introduced causes for VoIP services downtime and options to solve for them. It is clear that a reliable service cannot resist without high availability. With perfect hardware you will get software failures, with perfect software you will get a hardware crash at a point in time.
Two concept should guide your service as much as possible: simplicity and modularity. Try to keep your deployments as simple as possible for the set of services you want to offer. The maintenance overhead is lowered. Second, try to make the platform as modular as possible -- is very unlikely that all components will fail at the same time -- you will have features downtime, but not service downtime.
Download slides of Managing a Highly Available VoIP System.