An Introduction to Fabric8 and Why It's So Important for Integration
It is helpful to understand the history of Fabric before explaining what it is. The use of middleware had changed in recent years; no longer do (most) large organisations have a single ESB / Message Broker with just a couple of instances.
Managing a couple of middleware instances using ssh to remotely connect to them and then manually editing configuration files is a perfectly viable (if not exactly best practice) approach to management when the instance numbers are low.
When organisations start to deploy middleware to their remote sites, especially when there are tens of thousands of them, the simple manual approach traditionally used is no longer viable. This is also true for Cloud hosted elastic systems where the number of instances can be large and infrastructure instances are ‘dynamic’. It is against this more complex environment that Fabric was born at FuseSource, which was acquired by RedHat in 2013.
Fabric8 is the upstream Open Source project for JBoss Fuse. Fabric8 is the underlying technology for the JBoss Integration Platform as a Service, which is currently in beta on OpenShift.
Summary of Fabric
The interested reader can read far more details than I am going to provide in this short blog on the Open Source projects web site: http://fabric8.io
My summary of Fabric is that it:
- Contains a configuration management system for code and configuration files through the use of Git.
- Has the concept of a Profile as a set of folders and configuration files which are then used to instantiate application instances e.g. ActiveMQ brokers, Fuse etc.
- Supports multiple versions of Profiles within the fabric (through git branches) with incremental and rolling upgrades support and simple rollback as expected through the use of Git.
Provides Scalability and High Availability
- Is scalable and resilient through the use of Apache Zookeeper: configuration Profiles are actually stored on each Fabric instance.
- Handles the complexity of IP addresses and port mappings for you through the Service Registry (stored in Zookeeper).
- Is able to perform load balancing to services through the Service Registry.
- The Service Registry enables service location transparency – for ActiveMQ the Camel connector provided offers zero client configuration ‘it just works’.
- Manages the ‘split brain’ problem caused by network failures by requiring a odd number of Zookeeper instances in the Fabric.
- Supports Docker: this will be the recommended deployment technology for Fuse 6.2.
Allows Management of the Fabric
- Is manageable through a Web Console (by default on port 8181) which uses Jolokia and Hawtio. The console provides a easy way to manage the Fabric and the inbuilt Wiki allows Profiles to be documented.
- Provides an interactive shell for Fabric management for people who don’t want to use the Web GUI. This shell supports the usual Linux command line auto-completion and history.
- Maven plugins can be used to install and deploy Java code to the Fabric. Using the maven plugin you can include profiles in the release process; so existing projects can release their profile configuration files (e.g. links to the various jars/wars etc). Each multi-module project can create a single zip file with all the profiles (folders) and config files; which can then, in Fuse 6.2 (or fabric8 1.1.x) be imported into any fabric via a command line.
- Fabric provides a local Maven repository which acts as a cache of any required artefacts loaded from whatever public/internal maven repositories are used.
Designed for and Includes Integration and Messaging Middleware
- Apache Karaf OSGI container.
- Apache Camel integration technologies supporting the standard Enterprise Integration Patterns .
- Fuse ESB with Apache CFX to support REST and SOAP web services.
- ActiveMQ message broker that supports common wire protocols.
- The Web Console can be extended through the use of Hawtio plugins.
- The Fabric (from Fuse 6.2) can deploy pretty much any Java program with a Main Class.
- The version of Fabric currently in development (to be released as Fuse version 6.2 this year) supports not just ApacheMQ and Karaf OSGI container but, JBoss EAP, Wildfly and Tomcat.
Fabric is a relatively new and very promising technology that enables organisations to deploy and manage in a repeatable and controllable way middleware components or long running Java programs running on Cloud like infrastructure.