mt internals (enabling multi-tenant saas in the cloud) jan vonka core repository - cloud / hybrid...
TRANSCRIPT
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 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,
…)
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,
…)
MT Overview
ContentContentDBDB Search Index
Search Index
AlfrescoAlfresco
Alfresco “vanilla” – single-tenant (single instance)
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
Alfresco MT – multi-tenant (single instance)
MT Overview
ContentContentDBDB Search IndexSearch Index
Alfresco ClusterAlfresco Cluster
T1T1
T2T2
T3T3
T4T4
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• [email protected], [email protected], …
• workspace://@@ano.co.uk@@SpacesStore• Company Home
• Sites• Site1, Site2, …
• User Homes• [email protected], [email protected]
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 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>
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 …
Search Index (Solr)
Search Index (Solr)
DB (RDS)DB (RDS) Content (S3)Content (S3)
Alfresco ClusterAlfresco Cluster
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/