This article focuses on some of the best
practices for working with workflows that deploy services. The tenets
are:
·
Reusability – many of the activity from the library of activities for
one workflow can and will be reused for another. Very few workflows might have
differences in doing tasks that were not covered by the global collection of
activities. There should not be any difference between an activity that appears
in bootstrapping and its invocation during redeployment/ rehosting in the new
environment. Only the parameter values will change for this.
·
Dependencies – many of the dependencies will be implicit as they
originate from system components and services information. A workflow might
additionally specify dependencies via the standard way in which workflows
indicate dependencies. These will be on a case-by-case basis for tenants since
it adds overhead to other services, many of whom are standalone. Implicit
dependencies can be articulated in the format specified by the involved
components.
·
Splitting – Workflows are written for on-demand invocation from the
web interface or by the system, so there might be more than one for a specific
deployment scenario. It is best to include both the bootstrapping and the
redeploy in the main workflow for the specific scenario, but they will be
mutually exclusive during their respective phases and remain idempotent.
·
Idempotency – All workflow steps and activities should be idempotent.
If there are conditionals involved, they must be part of activities. The
signaling and receiving notifications of dependent workflows if any must be
specifically called out.
·
Bootstrapping – This phase is common to many services and usually
requires at least a cluster/set of servers to be made ready but there might be
activities that require the service stamp to be deployed even if it is not
configured along with necessary activities to do one time preparation such as
getting secrets. Until the VIPs are ready, the redeployment cannot be kicked
off. Bootstrapping might involve preparations for both primary and
secondary where applicable.
·
Redeployment or rehosting – This phase involves configuration since
the bootstrapping is usually for a stamp and this stage converts it into a
deployment for a service. Since it involves reconfiguration, it can be for both
primary and secondary and typically done inside the new cloud. It is best to
parameterize as much as possible.
·
Naming convention – Though workflows can have any names inside the
package that the owning teams upload, it is best to follow a convention for the
specific scenario of one workflow calling another. Standalone single workflows
do not have this problem. Even in the case when there are many workflows, a
prefix/suffix might be helpful. This applies to both work workflows and
activities.
·
System workflow – Requiring separate workflows for bootstrap and redeployment
via a system defined workflow to allow system to inject system defined
activities between bootstrap and redeploy is a nice-to-have but the less
intrusion into service deployment the better. This calls on the service to do
their own tracking via passing parameter values between workflows and
activities. A standard need not be specified for this, and it can be left to
the discretion of the services.
The above list is not intended to be complete but
focuses on the strengths of those that have worked well.
No comments:
Post a Comment