300 likes | 312 Views
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 ?
E N D
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 • 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 APIs / Protocols (CMIS, REST, WebDAV, …) Repository Cluster R1 R2 R3 Transformer nodes Share nodes DB Search nodes Content (Shared F/S) DB1 DB2 T1 Sh1 Solr1 T2 Solr2 Sh2 T3 Solr3 Sh3
MT Overview Alfresco “vanilla” – single-tenant (single instance) Alfresco Content DB Search Index
MT Overview Alfresco – single-tenant (multi-instance) T2 T1 Alfresco Cluster Alfresco Cluster Alfresco Cluster Alfresco Cluster Content Content Content Content DB DB DB DB Search Index Search Index Search Index Search Index T4 T3
MT Overview Alfresco MT – multi-tenant (single instance) T1 Alfresco Cluster T2 T3 T4 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_Tenanttable • 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 … Alfresco Cluster DB (RDS) 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 • 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/