30
MT Internals (enabling multi-tenant SaaS “in the cloud”) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

Embed Size (px)

Citation preview

Page 1: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Jan Vonka

Core Repository - Cloud / Hybrid Services

Page 2: 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)

Page 3: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Overview

Page 4: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Overview4.x instance – example 1

DBDB Content(Shared F/S)

Content(Shared F/S)

Search (Solr)

Search (Solr)

ShareShare

Repository (including Transforms)Repository (including Transforms)

APIs / Protocols(CMIS, REST, WebDAV,

…)

APIs / Protocols(CMIS, REST, WebDAV,

…)

Page 5: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Overview4.x instance – example 2

DBDBDB2DB1

Content(Shared F/S)

Content(Shared F/S)

Search nodesSearch nodesSolr2Solr1 Solr3

Share nodesShare nodesSh2Sh1 Sh3

Repository ClusterRepository ClusterR2R1 R3

Transformer nodes

Transformer nodesT2T1 T3

APIs / Protocols(CMIS, REST, WebDAV,

…)

APIs / Protocols(CMIS, REST, WebDAV,

…)

Page 6: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Overview

ContentContentDBDB Search Index

Search Index

AlfrescoAlfresco

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

Page 7: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

Alfresco – single-tenant (multi-instance)

MT Overview

ContentContentDBDB Search IndexSearch Index

Alfresco Cluster

Alfresco Cluster

ContentContentDBDB Search IndexSearch Index

AlfrescoClusterAlfrescoCluster

ContentContentDBDB Search IndexSearch Index

AlfrescoClusterAlfrescoCluster

ContentContentDBDB Search IndexSearch Index

Alfresco Cluster

Alfresco Cluster

T1T1 T2T2

T3T3 T4T4

Page 8: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

Alfresco MT – multi-tenant (single instance)

MT Overview

ContentContentDBDB Search IndexSearch Index

Alfresco ClusterAlfresco Cluster

T1T1

T2T2

T3T3

T4T4

Page 9: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 10: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 11: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Core

Page 12: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 13: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Core

MT implementation – tenant context (cont’)

• workspace://@@acme.com@@SpacesStore• Company Home

• Sites• Site1, Site2, …

• User Homes• [email protected], [email protected], …

• workspace://@@ano.co.uk@@SpacesStore• Company Home

• Sites• Site1, Site2, …

• User Homes• [email protected], [email protected]

Page 14: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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)

Page 15: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 16: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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)

Page 17: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT CoreSee: 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>

Page 18: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

MT Core

Other examples …

• Core Services, eg.• NodeService -> FileFolderService• ContentService• SearchService• WorkflowService (JBPM + Activiti since v4)• … etc

• APIs & Protocols, eg.• WebScripts• CMIS• WebDAV

Page 19: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

What’s new in Alfresco v4.x ?

Page 20: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 21: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 22: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

How does Alfresco “in the cloud” differ ?

Page 23: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

How does Alfresco “in the cloud” differ ?

MT Core 4.x except hosted on AWS and …

Search Index (Solr)

Search Index (Solr)

DB (RDS)DB (RDS) Content (S3)Content (S3)

Alfresco ClusterAlfresco Cluster

Page 24: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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”

Page 25: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 26: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

Futures

Page 27: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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 ?

Page 28: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

Summary

Page 29: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

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

Page 30: MT Internals (enabling multi-tenant SaaS in the cloud) Jan Vonka Core Repository - Cloud / Hybrid Services

Thank you

… Questions & Feedback ?

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