MT Internals - Alfresco Devcon 2012

advertisement

MT Internals

(enabling multi-tenant SaaS “in the cloud”)

Jan Vonka

Core Repository - Cloud / Hybrid Services

Agenda

• Multi-Tenant (MT) Overview

• MT Core

• MT 4.x and “in the cloud”

• What ’s new in Alfresco 4.x ?

• How does Alfresco “in the cloud” differ ?

• Summary and Feedback (Q & A)

MT Overview

MT Overview

4.x instance – example 1

Share APIs / Protocols

(CMIS, REST, WebDAV, …)

Repository (including Transforms)

DB Content

(Shared F/S)

Search

(Solr)

MT Overview

4.x instance – example 2

Sh1

Share nodes

Sh2 Sh3

APIs / Protocols

(CMIS, REST, WebDAV, …)

R1

Repository Cluster

R2 R3

Transformer nodes

T1 T2 T3

DB1

DB

DB2

Content

(Shared F/S)

Search nodes

Solr1 Solr2 Solr3

MT Overview

Alfresco “vanilla” – single-tenant (single instance)

Alfresco

DB Content Search Index

MT Overview

Alfresco – single-tenant (multi-instance)

T2

T1

Alfresco

Cluster Alfresco

Cluster

Content DB

Content DB Search Index

Search Index

T3

DB

Alfresco

Cluster

Content Search Index DB

T4

Alfresco

Cluster

Content Search Index

MT Overview

Alfresco MT – multi-tenant (single instance)

T1

T2

T3

T4

Alfresco

Cluster

DB Content Search Index

MT Overview

Why use MT ?

• Economies of scale

• Lower licensing / TCO

• Easier to manage

• Less administrative overhead, easier upgrades

• Scale

• Cloud – multi-tenant SaaS (Software as a Service)

• New use-cases

• Cloud – eg. B2B collaboration

MT Overview

Alfresco has provided multi-tenant option since v3

• Single instance / multiple tenants

• Each tenant can access logical repo

• Full partitioning (isolated tenants)

• UIs + APIs / Protocols

• Dynamic Models

MT Core

MT Core

MT implementation – tenant context

• Auth (Security) ctx => fully qualified userid

• minimise impact on APIs + support standard protocols

• myuser@ mytenant

• Internally partitioned by Alfresco “store”

• workspace://SpacesStore

• workspace://@@ mytenant @@SpacesStore

MT Core

MT implementation – tenant context (cont’)

• workspace://@@ acme.com

@@SpacesStore

• Company Home

• Sites

• Site1, Site2, …

• User Homes

• fsmith@ acme.com

, jdoe@ acme.com

, …

• workspace://@@ ano.co.uk

@@SpacesStore

• Company Home

• Sites

• Site1, Site2, …

• User Homes

• fsmith@ ano.co.uk

, jdoe@ ano.co.uk

MT Core

MT implementation – create tenant

• When creating a tenant, we “bootstrap” the data …

• create tenant-specific stores (x5)

• Live store (workspace://SpacesStore)

• Version2 store

• Archive store

• User store

• System store

• add to “alf_tenant” table

• Tenant Domain, Enabled/Disabled, Content Root (if not co-mingled)

MT Core

MT implementation – Services vs DAOs

• Services / APIs

• “always” accessed in tenant ctx

• notable exception is QuickShare service

• public/shared links => no login required

• Persistence DAOs

• direct use

• in some cases, apply to multiple / all (?) tenants

• eg. system-wide patches / jobs etc

MT Core

Quick reference … something to review later

• MultiTServiceImpl  TenantService

• Provides name mangling – injected in various services

• MultiTAdminServiceImpl  TenantAdminService

• Manage tenants – create, disable / enable, delete

• MultiTNodeServiceInterceptor

• example that wraps (intercepts) generic NodeService

• instead of injecting TenantService (or extending)

MT Core

See: node-services-context.xml

<bean id="multiTNodeServiceInterceptor" class="org.alfresco.repo.tenant.

MultiTNodeServiceInterceptor ">

<property name="tenantService">

<ref bean="tenantService" />

</property>

</bean>

<bean id="mtAwareNodeService" class="org.springframework.aop.framework.ProxyFactoryBean" >

<property name="targetName">

<value> dbNodeService </value>

</property>

<property name="proxyInterfaces">

<list>

<value>org.alfresco.service.cmr.repository.NodeService</value>

</list>

</property>

<property name="interceptorNames">

<list>

<value> multiTNodeServiceInterceptor </value>

</list>

</property>

</bean>

<bean id=" dbNodeService " class="org.alfresco.repo.node.db.

DbNodeServiceImpl " init-method="init" >

<!-- … more here … ->

</bean>

MT Core

Other examples …

• Core Services, eg.

• NodeService -> FileFolderService

• ContentService

• SearchService

• WorkflowService (JBPM + Activiti since v4)

• … etc

• APIs & Protocols, eg.

• WebScripts

• CMIS

• WebDAV

What ’s new in Alfresco v4.x ?

What ’s new in Alfresco v4

Changes include:

• Activiti support for MT

• in addition to JBPM

• Solr support for MT

• “core” tracking, tenant ctx filter, …

• MT pre-configured (enable w/ 1st tenant)

• note: since Enterprise 4.0.2 / Community 4.2.a

What ’s new in Alfresco v4

Changes include:

• Alf_Tenant table

• replaces attribute list

• Common implementation

• eg. for (tenant-based) caches

• Various bug fixes & other related improvements

• from Cloud release + customer feedback

How does Alfresco “in the cloud ” differ ?

How does Alfresco “in the cloud” differ ?

MT Core 4.x except hosted on AWS and …

DB (RDS)

Alfresco

Cluster

Content (S3) Search Index (Solr)

How does Alfresco “in the cloud” differ ?

… with Tenant (aka. Network switching)

• Unlike MT core, cloud allows Tenant switching

• User has primary tenant

• Can be invited to secondary tenants

• We split Tenant ctx from Auth ctx (see TenantUtil)

• Share + APIs support tenant switching

• via cloud extensions for:

• Share / Surf

• WebDAV protocol

• SharePoint protocol

• Core Repo APIs – including the new “public API”

How does Alfresco “in the cloud” differ ?

Scaling – networks, users, sites, documents, …

• Hosted Core MT might be “100s” of tenants

• Cloud supports “100s of thousands” of tenants

• eg. 15000 companies signed up in first 3 months

• Generic improvements get pushed back to core code

Futures

Futures

Health warning – this slide is speculative 

• Driven by both Enterprise and Cloud use-cases

• Scaling – scale & partition tiers, as needed

• SharePoint Protocol

• Refactor of MT dynamic models (+ CMIS 1.1)

• More dynamic Share / platform (per-tenant overrides)

• Public / Private / Hybrid – MT vs ST

• …

• What would you like to see on the list ?

Summary

Summary

• MT Core

• Fully partitioned by tenant context

• What ’s new in Alfresco 4.x ?

• Activiti, Solr, … + improvements & bug fixes

• How does Alfresco “in the cloud” differ ?

• Network switching

• Please try it out

• Download latest Community 4.2 …

• http://wiki.alfresco.com/wiki/Multi-Tenancy

Thank you 

… Questions & Feedback ?

Photo credits: http://www.stonebalancing.com/

Download