This is a continuation of series of
articles on hosting solutions and services on Azure public cloud with the most
recent discussion on Multitenancy here This article discusses the resource
migration considerations in using CosmosDB for multitenant solutions.
A multitenant application solution can involve multiple
resources across multiple tenants and the application might be responsible to
support: 1) Partitioning, 2) Managing request units from tenant workloads, 3)
Customer-managed keys and customizations per tenant, 4) isolation models and 5)
hybrid approaches. The multitenant application does not control how many
tenants or the direct ownership of a resource to its tenant and the customer
has the complete say in this. They may want to reassign a resource to another
tenant. For example, if they decide to join a machine to a different tenant, they
need to disconnect from the first tenant and then register again with the new
tenant. The single sign-on (SSO) option
for password hash synchronization and pass-through authentication can be used
with only one Azure AD tenant.
Resource organization helps a multi-tenant
solution with tenant-isolation and scale. There are specific tradeoffs to
consider with multi-tenant isolation and scale-out across multiple resources.
Azure’s resource limits and quotas and scaling the solution beyond these limits
will be discussed.
When there is an automated deployment process and
there is a need to scale across resources, the way to deploy and assign tenants
must be decided. As we are approaching the number of tenants that can be assigned
to a specific resource, we must detect the threshold. When we plan to deploy
new resources, it must be decided whether they will be ready just in time or
ready ahead of time.
When assumptions are made in code and
configuration, they can limit the ability to scale. There might be a need to
scale out to multiple storage accounts, but the application tier might be
assuming a single storage account for all tenants.
Azure resources are deployed and managed through
a hierarchy. Most resources are deployed into resource groups which are
contained in subscriptions. This hierarchy pertains to a tenant. When we deploy
the resources, we have the option to isolate them at different levels.
Different models can be used in different components of the same solution.
Resources that are shared across multiple
instances can still achieve isolation in a single instance for all the
workloads from the tenants. When we run a single instance of resource, the
service limits, subscription limits and the quota apply. When these limits are
encountered, the shared resources must be scaled out.
Isolations within a shared resource requires the
application code to be fully aware of multitenancy, and to restrict the data
for a specific tenant. An alternative to this is to separate resources in
resource groups. These help to manage the lifecycles of resources. Those
resources that are in a resource group can be deleted all at once by deleting
the resource group. A naming convention, strategy and resource tags or a tenant
catalog database is required in this case. Resource groups can also be
separated into subscriptions. This enables us to easily configure policies and
access control by putting resource groups into a shared subscription. There is
a limit to the maximum number of resource groups that can be put in a
subscription so they must spill over to a new subscription upon exceeding.
Separate subscriptions help achieve complete isolation of tenant specific
resources and they can be programmatically created. Azure reservations can also
be used across subscriptions. The only difficulty is to request quota increases
when there are many subscriptions. The Quota API is helpful to some resource
types and quota increases must be requested by initiating a support case.
Tenant specific subscriptions can be put into a management group hierarchy so
that it enables easy management of access control rules and policies.
No comments:
Post a Comment