(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
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 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
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 ?
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
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/