[ 
https://issues.apache.org/jira/browse/STRATOS-123?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Imesh Gunaratne resolved STRATOS-123.
-------------------------------------

    Resolution: Fixed

Changes have been committed with commit revision: 
57cccfbf83c3c3b7a322cd6b3124a74eae08ce29.

How it works:
- According to the discussions had on Multi-Tenancy support, Stratos Manager 
publishes tenant information to the message broker via a topic. 
- A sample complete tenant event message:
{"tenants":[{"tenantId":1,"tenantDomain":"foo.org","serviceNameMap":{"app-server":true}},{"tenantId":2,"tenantDomain":"abc.org","serviceNameMap":{"app-server":true}}]}
- Events: CompleteTenantEvent, TenantCreatedEvent, TenantUpdatedEvent, 
TenantRemovedEvent, TenantSubscribedEvent, TenantUnSubscribedEvent.
- These event messages are received by load balancer and a corresponding tenant 
data model is maintained.
- Multi-tenancy is enabled in load balancer and tenant identifier is specified 
either as tenant-id or tenant-domain. 
- Then tenant identifier regular expression is defined: default: t/([^/]*)/. 
This is used to scan the request URL and find the tenant identifier value.
- Load balancer maintains two hash maps:
  - Map<HostName, Cluster>: map hostname to cluster
  - Map<HostName, Map<TenantId, Cluster>>: map hostname, tenant id to cluster
- When a request is received if multi-tenancy is disabled it will use 
Map<Hostname, Cluster> map to identify the service cluster and forward the 
request to the next available member.
- If multi-tenancy is enabled: it will scan the request URL using the regular 
expression given and find the tenant identifier value.
- Then the matching cluster will be identified using Map<HostName, 
Map<TenantId, Cluster>>.

> Implement Support for Multi-Tenancy
> -----------------------------------
>
>                 Key: STRATOS-123
>                 URL: https://issues.apache.org/jira/browse/STRATOS-123
>             Project: Stratos
>          Issue Type: Sub-task
>            Reporter: Imesh Gunaratne
>            Assignee: Imesh Gunaratne
>             Fix For: 4.0.0 M5
>
>
> To provide support for multi-tenant applications, the load balancer needs to 
> identify the host name (or mapped domain name if available) and the tenant id 
> from the incoming request and delegate that request to the next available 
> member in the relevant cluster.
> Tenant Definition:
> - A tenant could be partitioned into clusters by defining tenant ranges for 
> each cluster.
>   Example: (Cluster 1 - Tenant Range: 1-100, Cluster 2 - Tenant Range: 
> 101-200, Cluster 3: Tenant Range: 201-*)
> - Each tenant needs to define an id and a domain name.
> Properties found in the Request URL:
> - Host name
> - Tenant id or tenant domain name
> Required Functionality:
> 1. If tenant id is found in the request URL identify the cluster and delegate 
> the request to the next available member.
> 2. If tenant domain is found in the request, find the tenant id using the 
> available tenant information and execute 1.
> Tenant Information:
> Stratos Manager (SM) needs to publish tenant information to a message broker 
> topic so that coupling between the load balancer and SM is less. As a result 
> the load balancer could operate in isolation just by communicating with the 
> message broker.



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Reply via email to