libGlass is a Python library for distributed computing that makes its programming easy.
The Glass framework is a scalable set of components that can be used by applications to perform distributed computing. Applications are built reusing the available components as needed.
One of the major goals of libGlass is to be a user-friendly framework, not only suitable for new applications, but also for legacy code.
This is an important feature, as most available solutions for distributed computing require a substantial amount of rewrite of legacy code; some of them require a complete change of the application design.
libGlass was designed to achieve the following goals:
* User transparency: the library must be as transparent as possible. Any tasks that are repetitive or that can be done automatically should be done by the library, without user intervention.
The API (Application Programmer's Interface) should be simple and intuitive, with a smooth learning curve and provide high level primitives that can be easily used to solve any problems. Legacy code should be easy to port.
* Extensibility: the library must be easily extensible, requiring no recompilation or any other modification to support new features; they must work as plug-ins.
* Performance and efficiency: since the library is for distributed computing, it has to be efficient, consuming as little processing time as possible.
* Network protocol independence: an abstraction layer makes it possible to change the underlying network protocols easily. The application can use the network protocol most efficient for its needs.
* Portability and interoperability: heterogeneous clusters and grid computing being every day more common, the library must be not only portable, but allow different architectures to interoperate seamlessly, something that is not true for most implementations of distributed computing solutions.
* Scalability: there is no use for a distributed solution that does not scale well. Glass has to work well in all sorts of environments, from small clusters to huge grids, and be able to adapt itself to achieve best results.
* Reconfigurable network architecture: most existing solutions are based on a fixed network architecture, usually Master/Slave or Client/Server.
Given the requirements of scalability and performance, and the fact that peer-to-peer applications are everyday more common, it's unreasonable to fix the network architecture: the developer should be free to define how nodes will connect with each other.
* Reliability and fault tolerance: distributed computing often requires reliability. It's not acceptable that the misbehavior or crash of a single node crashes the entire computation.
As clusters grow in size and grid computing becomes more common, the MTBF (Mean Time Between Failures) shrinks to a point that it cannot be ignored.
libGlass must be able to handle node crashes gracefully, keeping the application running and avoiding deadlocks and other problems that could arise from the node crash. Nodes should be allowed to join or leave at anytime.
* Thread support: the library must be completely thread-safe.
With clusters of symmetric multiprocessors (SMP) computers becoming more common and new technologies such as HyperThreadingTM, it's unacceptable for a distributed computing framework to have thread issues.
Here are some key features of "libGlass":
· Synchronous shared memory
· Distributed asynchronous events
· Synchronization barriers
· Remote aliases
· UDP/IP (unfinished)
· Pure peer to peer (planned)
· Hierarchical (planned)
· Anonymous peer to peer (planned)
What's New in This Release: [ read full changelog ]
· Code cleanup.
· More robust.
· TCP/UDP support.
· Unix sockets support.
· Remote variables are working.
· nodeNickNames have been implemented.
· Partial shared memory support.