300 likes | 315 Views
Explore how Alfresco's multi-tenant features work in the cloud environment, including core repository functions and hybrid services. Learn about the benefits of multi-tenancy, different implementation scenarios, and the latest updates in Alfresco 4.x. Discover why multi-tenancy is essential for modern SaaS solutions and how it enables economies of scale, easier management, and new use cases like B2B collaboration. Gain insights into tenant context implementation, quick references for service management, and key APIs and protocols. Stay informed about the latest enhancements in Alfresco v4.x, such as Activiti and Solr support for multi-tenancy.
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/