Workflows:
This article focuses on some of the best practices for
working with workflows that deploy services.
The tenets are:
1.
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.
2.
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.
3.
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.
4.
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.
5.
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.
6.
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.
7.
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.
8.
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.
No comments:
Post a Comment