Go is used in the Aruba Networks ClearPass Access Management System (http://www.arubanetworks.com/products/clearpass/
). The ClearPass system is deployed as a cluster of nodes providing various access management services. In the past we have used C++/Java reactor based patterns and python eventlet+ZMQ for writing concurrent network services.
Some of the problems we saw with the existing model:
- Reactor/callback based concurrency leads to complex code.
- Dealing with third party libraries that may not provide an asynchronous interface
- Eventlet+ZMQ (to circumvent GIL) is a hacky alternative and has performance issues. Running multiple process means each of the process need to hold a copy of config, caches and other data structures to process requests. Each of these processes also need to be updated on change.
We were looking for a better alternative and found GO. Following are some of the properties which made GO a good choice for our use cases:
- Lightweight language with minimal set of concepts.
- Simple concurrency primitives to efficiently use multiple cores.
- Compilation speed.
- Error handling (No exceptions).
- Low memory usage compared to Java/Python.