Background
If you follow libcloud maillist, you probably aware that I've started working on adding load balancers support. If not, please give it a quick view.
Current status
At this point I have implemented almost all features I've planned, namely:
- Defined a common interface
- Implemented drivers for Rackspace and GoGrid
- Covered basic functionality with unit tests
- Implemented load balancer support in lc-tools and run-time tested it
Currently interface is pretty basic and supports only main operations, like: CREATE/READ/DELETE for balancers and ADD/LIST/REMOVE operations for their nodes. Obviously, there are far more operations on load balancers that could be useful such as balancing algorithm and session handing options, but I need some time to play around with these things to understand how to plug it better.
One more thing I'm considering is adding support for blocking operations. It's quite common situation when you find balancer in immutable state: for example, when you add new node to balancer it needs some time to perform initial configuration and during that period you cannot perform operations on it, such as removing or adding more nodes. My current implementation just throws and exception in such case so user can figure out that object is immutable and try after some time.
However, it might be not very convenient for user to wrap any call to catch such situations, so I'm thinking about adding support for blocking mode, where function will block until operation succeeds or timeout reaches; blocking/non-blocking mode could be specified at driver init time. Most likely it's the way things will be done.
Examples
Meanwhile, take a look at this example to understand how things look like at the moment:
example_lb.pyAlso, as I've mentioned above, I've added basic support for balancer manipulation to lc-tools. Will cover this topic a bit later when things settle down a little, but here's a quick overview how it feels like:
Giving it a try
To give it a try checkout balancers branch of my libcloud fork on github:
git clone git://github.com/novel/libcloud.git --branch balancers
and then install it like you usually do. The example file mentioned above would be useful to get started. Additionally, it might be useful to look at lb-* scripts in lc-tools lb branch.
Further reading
- Original announce on the maillist
- GoGrid Balancers API (part of their main API) reference
- Rackspace Balancers API reference (PDF)
No comments:
Post a Comment