At Loyalty NZ we already make heavy use of a large number of open source projects, and we feel that it’s only fair that we in turn give back to the community where we have an opportunity to produce re-usable components and frameworks. Having open source components also benefits us as well, because it promotes the leading edge technology we are building - which builds confidence in our technology solutions, and makes Loyalty NZ a more desirable place to work. Building components in the open also helps us maintain a high standard of quality, and enforces better design about whether functionality belongs in a generic component, or is specific to an individual problem. Below are listed some of the more notable open source projects we have produced, and you can always browse LoyaltyNZ on Github.
Hoodoo is the base layer we use for our API framework. Within it we implement resource based CRUD API’s, and hoodoo helps us keep the amount of boilerplate low in our individual services, as well as enforcing a high level of consistency across them all. We use Hoodoo in conjuction with alchemy-flux - the ruby interface to the alchemy framework to run our micro-services architecture.
This framework forms the basis of our micro-services architecture. A full description is available on the projects readme, but general idea is to enable a highly fault tolerant, and service based architecture. The way we achieve this is to make use of an http endpoint (such as alchemy-router) which handles incoming requests (usually from behind an Amazon Elastic Load Balancer) - and places a message onto RabbitMQ. Individual micro-services (which may be implemented in any language) register themselves on a queue within rabbitmq, and pull requests when they are ready to process, and return the response via rabbitmq. Adapters for Node.js and ruby are provided (alchemy-ether and alchemy-flux). Inter-service API calls also route via messages on RabbitMQ, which reduces required configuration for load balancing and service discovery for where other services are running (which may or may not be on the same host).
Components: