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/