JADE  Environment Development Ideas

Cloud Deployment

Overview 

The purpose of this initiative is to facilitate an approach for packaging and deploying JADE applications using light-weight virtualization technology called Containers. Deployment of JADE services as Containers enables the use of Cloud-Native technology and potentially integration with a Cloud-Native enterprise architecture.  

The first phase of the initiative is to make it easier to containerize JADE application server and database server nodes. 

Concepts 

Containers 

A container is a standard unit of software that packages up code and all its dependencies, so the application runs quickly and reliably from one computing environment to another. Containers start and stop quickly, making them ideal for applications that need to rapidly adapt to changing demand.  

When your application services are packaged as light-weight containers, you can scale up and scale down your services more easily. This approach can also save on infrastructure cost, because you are scaling containers rather than virtual or physical machines. 

Enter Docker 

Docker became available for Linux in 2013. Starting in 2016, however, Microsoft and Docker partnered to bring the same framework to Windows 10, Windows Server 2016, and later. A Docker container image is a light-weight, standalone, executable package of software that includes everything needed to run an application: code, run time, system tools, system libraries, and configuration. 

Cloud Native 

Cloud native is a twofold term. It is the name for an approach to building applications and services specifically for a cloud environment. It is also used to describe the characteristics of those applications and services. 

Cloud Native Computing Foundation (CNCF) Definition 

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach. 

Source: https://github.com/cncf/toc/blob/master/DEFINITION.md  

 

Deliverables 

Minimum Scope 

  • Removal of non-essential GUI dependencies from back-end components.  
  • Packaging of JADE components in a NuGet package format with several package bundles to suit various physical deployment layers: database server, application server, presentation layer (for example) 
  • Sample Dockerfile specifications published on the JADE Github repository. These can be used as a base for building application containers that host application server and database server nodes 

Extended Scope 

Container Platform Integration  

Container platform integration includes extensions that help a container management / orchestration platform such as Kubernetes (K8s) to observe and manage JADE containers in the best possible way. This includes: 

  • Support for observability APIs for health and liveness checks 
  • Logging extension 

Logging  

We want to make it easier to integrate JADE’s logging subsystem with log collection tools such as Fluentd or Logstash, and integrate with tracing and metrics-gathering libraries such as OpenTracing, Prometheus, and others.  

Key to this is a logging architecture that supports a pluggable logging back-end. A default logging implementation that preserves existing JOMMSG logging behavior will be provided. 

  • Hugh McColl
  • Aug 8 2019
  • Planned
  • Attach files
  • Owen Winsloe commented
    12 Nov 20:19

    Sounds like a sweet concept. It would be great if the deployment could offer interaction with a management process that can control and monitor the deployment using api’s or similar.

    The “Management process” would be responsible for scheduling the deployment, progress notifications, exception handling (eg. JSM). There could also be a series of prerequisite conditions that may need to be satisfied prior the deployment starting, using customization (eg. You may require some processing of unrelated tasks to complete prior proceeding, check that available resources are present)

    During the deployment it may be necessary to perform other customized steps between deploy functions. Eg. You may to start\stop services, mess around with web sites or .net services.

    Cheers

  • Kevin Saul commented
    13 Nov 04:56

    Perhaps the term 'deployment' needs to be clarified in this context - Are we talking about the ability to download/install JADE binaries during the build of a container (i.e. dockerfile commands) or the ability to deploy & install JADE schema files to an environment already running within a container?

  • Admin
    Hugh McColl commented
    13 Nov 08:57

    Thanks for the valuable feedback Owen.

    Regarding your tools / monitoring suggestion.  The scope of the capability, as currently proposed, is to make it easier to package and deploy JADE components in the form of containerised services. We prefer to remain both platform and tool-chain agnostic as far as possible so that we don’t limit our client’s options. One of our larger clients (one that has provided the most input to the feature set so far) has indicated they are considering Kubernetes / Helm and Prometheus for monitoring and alerting.

    Provision of APIs for the different kind of health checks such as readiness and liveness are in scope. Please let us know if there are any specific additional  APIs and provider / tool specific features you would like us to consider. 

    Kevin,
    It appears your question is directed at deployment as  used in the comment not the feature description.  One of the goals, from a feature perspective, is to make it easier to build a container image.