Transcript Document

MT Internals
… enabling multi-tenant SaaS “in the cloud”
Jan Vonka
Quick intro
• Jan Vonka - Senior Developer @ Alfresco
• Core Repository - Cloud / Hybrid Services
• At one time, lived & worked here in the Bay Area
• My passion:
•
Flying hot-air balloons
•
… once indoors @ Hangar 1, Moffett Field, CA
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
Share nodes
Sh1
Sh2
Sh3
APIs / Protocols
(CMIS, REST, WebDAV, …)
Repository Cluster
R1
R2
R3
Transformer nodes
T1
DB
DB1
DB2
Content
(Shared F/S)
T2
T3
Search nodes
Solr1
Solr2
Solr3
MT Overview
4.x instance – example 3
MT Overview
Alfresco “vanilla” – single-tenant (single instance)
Alfresco
Cluster
DB
Content
Search Index
MT Overview
Alfresco – single-tenant (multi-instance)
T2
T1
Alfresco
Cluster
DB
DB
T3
DB
Content
Alfresco
Cluster
Content
Search Index
Search Index
T4
Alfresco
Cluster
Content
Alfresco
Cluster
Search Index
DB
Content
Search Index
MT Overview
Alfresco MT – multi-tenant (single instance)
T1
T2
Alfresco
Cluster
T3
T4
DB
Content
Search Index
MT Overview
Why use MT ?
•Economies of scale
•
Lower licensing / TCO (Total Cost of Ownership)
•Easier to manage
•
Less administrative overhead, easier upgrades
•Scale
•
Cloud – multi-tenant SaaS (Software as a Service)
•New use-cases
•
Cloud – eg. B2B collaboration (Business-to-Business)
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
Repository structure – stores, nodes, associations
• Store -> node hierarchy
•
•
(primary) parent / child assocs
also
•
•
secondary child assocs
peer assocs (source / target)
• Example: workspace://SpaceStore
•
Company Home
•
Sites
•
•
Site1, Site2, …
User Homes
•
•
fsmith, jdoe, …
…
MT Core
Repository structure
• By default, five uniquely named stores
•
•
•
•
•
Live store
Version2 store
Archive store
User store
System store
(workspace://SpacesStore)
(workspace://version2Store)
(archive://SpacesStore)
(user://alfrescoUserStore)
(system://system)
• See Admin Node Browser (Explorer or Share)
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://SpaceStore (workspace://@@acme.com@@SpacesStore)
•
Company Home
•
Sites
•
•
Site1, Site2, …
User Homes
•
[email protected], [email protected], …
• workspace://SpaceStore (workspace://@@ano.co.uk@@SpacesStore)
•
Company Home
•
Sites
•
•
Site1, Site2, …
User Homes
•
[email protected], [email protected]
MT Core
MT implementation – create tenant
•On 1st startup, we “bootstrap” the schema objects
•When creating a tenant, we “import” default data …
•
create tenant-specific stores (x5)
•
•
•
•
•
•
Live store
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 (Lucene + Solr since v4)
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 …
Alfresco
Cluster
DB (RDS)
Content (S3)
Search Index (Solr)
How does Alfresco “in the cloud” differ ?
Architecture
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
• over 30000 companies signed up (DG)
•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/