Enswitch is made up of a number of components. Some of these are third party free software, some have been written by Integrics:
- Asterisk PBX (free third party): Most telephone features run on Asterisk, which is the most popular soft PBX for Unix platforms.
- The Enswitch routing program, enswitch_routed (Integrics proprietary): Although Asterisk has many telephony features, Enswitch enhances most of them, and adds some new ones. It does this by running a separate program, the Enswitch routing program. The routing program is at the heart of Enswitch; Asterisk asks it how to route calls, it handles billing of calls, and interacts with the database. It normally runs on the same machines as Asterisk.
- Kamailio (free third party): This provides a system for users' SIP telephones to register to. Later when we want send an incoming call to one of these telephones, Kamailio knows where to route the call to. Kamailio also provides a proxy for outbound calls, so that users' telephones only need to know a single address to send to. Kamailio then load balances between the Asterisk machines using an Integrics proprietary plugin to determine which Asterisks are available for the appropriate region (for geographically distributed clusters). This plugin also routes calls which need to go to a specific machine such as call pickup.
- The Enswitch SIP daemon, enswitch_sipd (Integrics proprietary): This runs on the same machines as Kamailio, monitoring the health of the Asterisk machines. Should an Asterisk machine fail, the monitor program will update Kamailio's configuration to avoid routing calls to the dead machine. It also handles SIP presence and messaging.
- MySQL (free third party): Data about users, telephones, features, and so on, is stored in a MySQL database. This can be spread across multiple machines with replication to ensure that data is still available should one machine crash. Housekeeping functions such as monthly billing are also handled on the database machine.
- Apache (free third party) and mod_perl.
- Web and JSON interface (Integrics proprietary): This is the main interface for administering the system. It's written in Perl. Resellers can run their own web servers on their own machines, allowing them to re-brand the web interface and integrate it into their own sites.
- Corosync (free third party) and pacemaker (free third party): In order to allow any single machine to crash, most components can run on more than one server. Pairs of servers then monitor each other's health, and should a machine fail, its IP address will be taken over by its partner. The exception is Asterisk, which can use corosync and pacemaker, but instead it's normal to have Kamailio load balance between Asterisk machines, and detect if any have failed using the Enswitch SIP daemon.
Now that you know which components make up an Enswitch system, you can see how they fit together in various architectures.