Package: taba
<div id="container" align="center"><imgsrc="http://tellapart.com/wp-content/uploads/2012/06/taba-kanji.gif"alt="Taba" /></div>Introduction====================Taba is a service for aggregating instrumentation events from large distributedsystems in near real-time. It was built to handle high throughput and scaleeasily.Check out an overview of Taba's architecture on the TellApart Eng Blog:[http://www.tellapart.com/taba-low-latency-event-aggregation](http://www.tellapart.com/taba-low-latency-event-aggregation)Example====================Taba helps you instrument your services and provide a near real-time view intowhat's happening across a large cluster. For example, you could use it to trackthe winning bid price for a certain type of bid:from taba import client...client.Counter('bids_won', 1)client.Counter('winning_bid_price', wincpm)When those Events reach the Taba Server and are aggregated, they produce anoutput like the following:$ taba-cli agg winning_bid_pricewinning_bid_price: {"1m": {"count": 436, "total": 571.64},"10m": {"count": 5285, "total": 6884.57},"1h": {"count": 34265, "total": 44175.47},"1d": {"count": 569787, "total": 744423.87},"pct": [0.09, 0.47, 2.19, 3.55, 4.37, 14.09, 17.59]}There are many other input data types and aggregation methods available. See theTypes and Handlers documentation.Overview====================A Taba deployment consists of 6 layers, each horizontally scalable. Theselayers are:- Taba Client code integrated into applications- Taba Agent process running locally to the application servers- Taba Server processes in the frontend ('fe') role- Taba Server processes in the backend ('be') role- Redis sentinel processes- Redis database processesThe Taba Client is integrated into the application it is instrumenting, andexposes an API for recording events to different counter types. The Pythondistribution includes a default Client implementation based on threads, anda Gevent engine. There is also a Java Client available([https://github.com/tellapart/taba-java-client](https://github.com/tellapart/taba-java-client))The Client typically sends events to a Taba Agent process running on the sameserver. While the Client will only forward events on a best-effort basis, theAgent provides more robust buffering and failure recovery. It is alsosignificantly smarter about load balancing.The will forward events to one of the Taba Server end-points it has beenconfigured to connect to. Any Server in the cluster can receive any set ofevents.The Taba Server processes are split into two groups: frontend ('fe') and backend('be'). These roles are configured when the process starts. Assigning a processa 'fe' role has no effect on its operation -- it is simply a marker that theprocess will use to advertise its role. (The intention it to allow aload-balancer to use that indicator to route traffic to just the 'fe'processes). Assigning the 'be' role will configure the process to launch abackground worker that processes queued events. There must be at least one 'be'Server process in the cluster.A Server process can be assigned both 'fe' and 'be' roles. For small clusters,this will work well. However, once a cluster becomes large enough to requiremultiple Server processes, separating 'fe' and 'be' processes will performbetter.There is a third role 'ctrl', which essentially marks a Server process asneither 'fe' nor 'be'. This is useful for maintaining a separate set ofprocesses for querying.The Taba Server uses a group of Redis databases and Sentinels. Having at leastone Sentinel is a requirement, as it is used for service discovery of theindividual database processes. Sharding across the databases is accomplished bysplitting the key-space into a large number of virtual buckets, and assigningranges of buckets to each process.Installing Taba====================Taba was designed to run on Python 2.6/2.7. It has the following Python packagedependencies, which should be installed automatically:- gevent (>= 0.13.1)- python-cjson (>= 1.0.5)- cython (>= 0.13)- redis (>= 2.9)- requests (>= 1.2.0)Additionally, building the Python dependencies requires the following. Thesedependencies are _not_ installed automatically:- gcc- make- python-dev- libevent-devThe latest stable release can be installed from PyPi:pip install tabaOr Taba can be installed directly from the repository:git clone https://github.com/tellapart/taba.gitcd tabapython setup.py installInstalling Redis====================The Taba Server uses a group of Redis instances with Sentinels as itsdatabase. It requires at least Redis 2.8. For details about installing Redis,please visit the [Redis Downloads page](http://redis.io/download)Deploying Taba====================There are many ways to deploy Taba, depending on the use case. See`examples/EXAMPLES` for pointers on how to get started.About====================Taba is a project at TellApart led by[Kevin Ballard](https://github.com/kevinballard) to create a reliable, highperformance platform for real-time monitoring. It is used to monitor over30,000 Tabs, consuming nearly 10,000,000 Events per second, and an averagelatency of under 15s.Any questions or comments can be forwarded to[taba@tellapart.com](mailto:taba@tellapart.com)