As in my previous post, Kazoo brings a lot of existing projects together.
Session Border Controller (SBC)
2600hz Kazoo utilizes Kamailio as its session border controller. Public devices and carriers hit the SBC first. The SIP SDP is then processed by Kamailios rules and if not blocked, is told where to dispatch the call to and routes to the Media servers. It also subscribes/listens to the message bus (RabbitMQ) for things like presence tracking.
With the right features enabled, it will mitigate sipvicious attacks, allow SIP SIMPLE messaging, prevent SIP flooding and more.
Freeswitch is the media server of choice here. It does the media codec negotiation, audio leg setup and It publishes/listens to events via RabbitMQ. Most of the call control is done via the ecallmgr Kazoo App.
The glue that binds.
RabbitMQ is the backbone and is what allows these separate components to talk to each other. Each service connects to the RabbitMQ message bus and sends or receives messages from other services. As an example, when Freeswitch loads it subscribes to RabbitMQ and requests ACLs, then the ecallmgr application is listening for that message and in response, sends the list of ACLS back to RabbitMQ. Finally, since Freeswitch is subscribed/listening to that message, it receives the list of ACLs that it needs to configure itself with.
Written in erlang, each app communicates with the rest of the cluster, even other apps, via the Message Bus (RabbitMQ). You can extend Kazoo with other languages, since it all makes use of the RabbitMQ message bus to communicate, but everything I’ve seen so far is in Erlang.
The applications control the logic behind the system, such as how a call is routed, voicemail boxes, fax boxes, how calls are billed and rated, if an account has limits, webhooks, the API and everything else
Originally using BigCouch and officially moving to CouchDB. CouchDB is a json-based, easily clustered and replicated database.
I use CouchDB over the pre-packaged BigCouch for better clustering, but it is a simple JSON document store database. It has a interesting approach to clustering and is very developer friendly, but the user interface leaves a little to be desired. I would highly recommend getting use to the REST-like commands required to manage your CouchDB cluster. The latest version of CouchDB supports resharding, allowing you to more easily scale your cluster as load increases.
HAProxy – TCP Proxy
If you are familiar with NGINX or other load balancers, HAProxy will not present much of a challenge. It is relatively easy to configure and easier to reload with updated configuration. Not pictured above, it is typically used to balance/failover the Kazoo API, SMTP and CouchDB.
Kazoo MonsterUI – The interface that saved Kazoo
In the beginning, there was an API. 2600hz rightly so started with the idea that implementors of Kazoo would design their own UI, but many more wanted to just stand up VoIP infrastructure an manage it without having to deal with the API all the time. At first, KazooUI was developed and later, the much nicer looking and easier to manage MonsterUI came along. This is one of the main reasons I gave Kazoo a shot.