- Notifications
You must be signed in to change notification settings - Fork0
Content and Version-based Routing Fabric for Polyglot Microservices
License
liamawhite/amalgam8
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- A quick intro video to Amalgam8
Try the demo applications with acontainer runtime of your choice.
Integrate the sidecarinto your existing application to start using Amalgam8.
In any realistic production deployment, there are typically multipleversions of microservices running at the same time, as you might be testingout a new version, troubleshooting an old version, or simply keeping theold version around just in case.
Content-based routing allows you to route requests between microservicesbased on the content of the request, such as the URL, HTTP headers,etc. For example,
from microservice A, if request has "X-User-Id: QA", route to instance of(B:v2) else route to instance of (B:v1)
Version-based routing allows you to control how different versions ofmicroservices can talk to each other. For example,
from microservice A:v2 route all requests to B:v2from microservice A:v1 route 10% of requests to B:v2 and 90% to B:v1
A simple way to accomplish these functions is to control howmicroservices can talk to each other.
Amalgam8 is a platform for building polyglot microservice applications thatenables you to route requests between microservices in acontent-basedandversion-based manner, independent of the underlying containerorchestration layer(Docker Swarm,Kubernetes,Marathon) or the cloud platform(Amazon AWS, IBM Bluemix, Google Cloud Platform, Microsoft Azure, etc.)
Amalgam8 uses the sidecar model or the ambassador pattern for buildingmicroservices applications. The sidecar runs as in independent process andtakes care of service registration, discovery and request routing tovarious microservices. The sidecar model simplifies development of polyglotapplications.
Through the Amalgam8 Control Plane, you can dynamically program thesidecars in each microservice and control how requests are routed betweenmicroservices. The control plane provides REST APIs that serve as the basisfor building tools for various DevOps tasks such as A/B testing, internalreleases and dark launches, canary rollouts, red/black deployments,resilience testing, etc.
The Amalgam8 Control Plane consists of two multi-tenant components:
The registry and the controller store their state in a Redis backend.
In the data plane, theAmalgam8 sidecar runs alongside eachmicroservice instance. The sidecar is anEnvoy reverse proxy. In addition to proxyingrequests to other microservices, the sidecar is responsible for serviceregistration, heartbeat, service discovery, load balancing, intelligentrequest routing, and fault injection.
Microservices communicate with the sidecar via the loopback socket athttp://localhost:6379 . For e.g., to make a REST API call over HTTP toserviceB, the application would use the following URL:http://localhost:6379/serviceB/apiEndpoint . The sidecar in-turn forwardsthe API call to an instance of service B.
Detailed documentation on Amalgam8 can be found athttps://amalgam8.io/docs.
To get started with Amalgam8, we suggest exploring some of thedemoapplications. The walkthroughsdemonstrate some of Amalgam8's key features. Detailed instructions areavailable for different container runtimes and cloud platforms.
If you have any questions or feedback, you can reach us via our publicSlack channel (#amalgam8). To join this channel, please use the followingself invite URL:https://amalgam8-slack-invite.mybluemix.net
To build from source, clone this repository, and follow the instructions inthedeveloper guide.
Continuous builds are run on Travis CI. These builds use the.travis.yml
configuration.
This section includes instructions for working with releases, and is intended for the project's maintainers (requires write permissions)
Edit the
CHANGELOG.md
file, describing the changes included in this release.Set a version for the release, by incrementing the current versionaccording to thesemantic versioningguidelines. For example,
export VERSION=v0.1.0
Create anannotated tag in your local copy of the repository:
git tag -a -m"Release$VERSION"$VERSION [commit id]
The
[commit id]
argument is optional. If not specified, HEAD is used.Push the tag back to the Amalgam8 upstream repository on GitHub:
git push origin$VERSION
This command automatically creates a release object on GitHub, corresponding to the pushed tag.The release contains downloadable packages of the source code (both as.zip
and.tag.gz
archives).
- Edit theGitHub release object, and add a title and description (according to
CHANGELOG.md
).
Copyright 2016 IBM Corporation
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Contributions and feedback are welcome!Proposals and pull requests will be considered.Please see theCONTRIBUTING.md file for more information.
About
Content and Version-based Routing Fabric for Polyglot Microservices
Resources
License
Stars
Watchers
Forks
Packages0
Languages
- Go92.9%
- Shell4.1%
- HTML1.4%
- Makefile1.2%
- Other0.4%