Home

Awesome

One micro-service, multiple deployment options

This project contains one simple micro-service that gets deployed:

Watch this Youtube video that walks you through the deployment of the service and test the behavior of the deployment options when the service crashes:

<center> <a href="https://youtu.be/Bdl9s2LxUZo"><img src="youtube.png" width="600" /></a> </center>

Requirements

About the micro-service

The micro-service used in this project computes Fibonacci numbers.

From Wikipedia: In mathematics, the Fibonacci numbers are the numbers in the following integer sequence, called the Fibonacci sequence, and characterized by the fact that every number after the first two is the sum of the two preceding ones:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

The implementation of the Fibonacci sequence is done in service/lib/fibonacci.js. The same implementation is used across all deployment options.

Deploy the services in IBM Cloud with the toolchain

  1. Identify an IBM Cloud region, Cloud Foundry organization and space where to deploy the services.

  2. Create a standard Kubernetes cluster

  3. Create a registry namespace

And then

Deploy To IBM Cloud

  1. Select the GitHub box.

    1. Decide whether you want to clone or fork the repository.
    2. If you decide to Clone, set a name for your GitHub repository.
  2. Select the Delivery Pipeline box.

    1. Specify the IBM Cloud API key to use or create one
    2. Select the region, organization and space where you want to deploy the web application. A random route will be used for the application. :warning: Make sure the organization and the space have no space in their names.
    3. Select the Kubernetes cluster where to deploy the service, together with the Docker registry name where to store the Docker image
  3. Click Create.

  4. Select the Delivery Pipeline.

  5. Wait until all stages complete.

  6. Open the Deploy log for the CLOUD FOUNDRY, CLOUD FUNCTIONS and KUBERNETES stages. Each log has a link at the end pointing to the location where the services have been deployed. Click on the links to add the service to the visual tester.

  7. The services are ready. Review the Service API to call the services.

Service API

Once deployed, the service implements 3 API calls:

Depending on which compute option you are using, use the following cURL calls:

Endpoint TypeEndpointURL
Cloud Foundryiterationcurl -v http://fibonacci-service-<random-string>.mybluemix.net/fibonacci?iteration=1000
durationcurl -v http://fibonacci-service-<random-string>.mybluemix.net/fibonacci?duration=5000
crashcurl -v -X POST http://fibonacci-service-<random-string>.mybluemix.net/fibonacci?crash=true
Kubernetesiterationcurl -v http://<cluster-ip>:30080/fibonacci?iteration=1000
durationcurl -v http://<cluster-ip>:30080/fibonacci?duration=5000
crashcurl -v -X POST http://<cluster-ip>:30080/fibonacci?crash=true
Cloud Functionsiterationcurl -v https://openwhisk.ng.bluemix.net/api/v1/web/<namespace>/default/fibonacci?iteration=1000
durationcurl -v https://openwhisk.ng.bluemix.net/api/v1/web/<namespace>/default/fibonacci?duration=5000
crashcurl -v -X POST https://openwhisk.ng.bluemix.net/api/v1/web/<namespace>/default/fibonacci?crash=true

Code Structure

Cloud Foundry application

FileDescription
app.jsMain application, start the express web server and expose the service API
lib/fibonacci.jsThe implementation of the Fibonacci sequence, shared by all deployment options
package.jsonList the packages required by the application
manifest.ymlDescription of the application to be deployed
.cfignoreList files to ignore when deploying the application to Cloud Foundry

Kubernetes deployment

FileDescription
app.jsMain application, start the express web server and expose the service API
lib/fibonacci.jsThe implementation of the Fibonacci sequence, shared by all deployment options
package.jsonList the packages required by the application
DockerfileDescription of the Docker image
fibonacci-deployment.ymlSpecification file for the deployment of the service in Kubernetes

Cloud Functions action

The Cloud Functions action is deployed as a zip action where several files are packaged into a zip file and the zip file is passed to Cloud Functions as the implementation for the action. deploy.js takes care of packaging the zip file.

FileDescription
handler.jsImplementation of the Cloud Functions action
lib/fibonacci.jsThe implementation of the Fibonacci sequence, shared by all deployment options
package.jsonSpecify the action entry point (handler.js)
deploy.jsHelper to deploy and undeploy the Cloud Functions action

Tester web app

Under the tester directory is a simple web application to register and test the deployed micro-services. It can be pushed to IBM Cloud with cf push or simply executed locally with python -m SimpleHTTPServer 28080 as example.

Contribute

Please create a pull request with your desired changes.

Troubleshooting

Cloud Foundry

Use

ibmcloud cf logs fibonacci-service

to look at the live logs for the web application.

Kubernetes

Use

kubectl proxy

and look at the status of the resources in the console.

Cloud Functions

Use

ibmcloud cloud-functions activation poll

and perform an invocation of the action.

License

See License.txt for license information.