alfresco multi-tenancy: internals of the core repository & cloud
Post on 22-May-2015
455 Views
Preview:
DESCRIPTION
TRANSCRIPT
MT Internals … enabling multi-tenant SaaS “in the cloud”!
!Jan Vonka!
• 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!!
Quick intro!
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!
DB Content (Shared F/S)
Search (Solr)
Share
Repository (including Transforms)
APIs / Protocols (CMIS, REST, WebDAV, …)
MT Overview!4.x instance – example 2!
DB DB2 DB1
Content (Shared F/S)
Search nodes Solr2 Solr1 Solr3
Share nodes Sh2 Sh1 Sh3
Repository Cluster R2 R1 R3
Transformer nodes T2 T1 T3
APIs / Protocols (CMIS, REST, WebDAV, …)
MT Overview!4.x instance – example 3!
MT Overview !
Content DB Search Index
Alfresco “vanilla” – single-tenant (single instance) !
Alfresco Cluster
Alfresco – single-tenant (multi-instance)!
MT Overview !
Content DB Search Index
Alfresco Cluster
Content DB Search Index
Alfresco Cluster
Content DB Search Index
Alfresco Cluster
Content DB Search Index
Alfresco Cluster
T1 T2
T3 T4
Alfresco MT – multi-tenant (single instance)!
MT Overview !
Content DB Search Index
Alfresco Cluster
T1
T2
T3
T4
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 (workspace://SpacesStore) • Version2 store (workspace://version2Store) • Archive store (archive://SpacesStore) • User store (user://alfrescoUserStore) • System store (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
• fsmith@acme.com, jdoe@acme.com, …
• workspace://SpaceStore (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!
• 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 …!!
Search Index (Solr) DB (RDS) Content (S3)
Alfresco Cluster
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 J!
• 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 J
… Questions & Feedback ?
! !! ! !!
Photo credits: http://www.stonebalancing.com/ !
top related