我们的产品最近在规划做一个比较大的变化,从单应用支持单个项目,向单应用支持多项目转变(多租户)
企业应用和互联网应用的区别
产品是所谓的企业应用,虽然用的技术差不多,但是我感觉和互联网应用有很大区别,暂时想到以下几点:
1、并发数
企业应用的并发数和互联网应用(近似理解为网站)相比,差别极大。因为网站面对的是数以万计的互联网用户,而企业应用面对的是内部用户,所以并发量完全不在一个层面上。不用跟大的电商、社交网站比,即使是很小的网站,并发数也远远超过我们的应用
所以,一般来说,企业应用在架构上不需要特别考虑http并发的问题,只需要稍微注意下实现无状态server,支持水平伸缩即可
2、数据量
数据量这个指标,主要还是取决于应用的规模,跟是企业引用还是互联网应用,关系不是特别大。就目前的经验来看,我们应用的性能瓶颈,主要也是出现在数据库IO上。后续在集中部署的场景下,更有可能面对数据库伸缩的问题
3、可配置性
互联网应用不强调可配置性,一般的商城、论坛等,每个用户能做的事情都是一样的。虽然像QQ空间那种,允许用户做一些自定义,但是只是页面组件和模板化的技术,跟企业应用的可配置性还不一样
企业应用会面对很多定制需求。比如说我们的产品,要提供给不同的项目,而每个项目的需求都会有一些细微的差异。同样的工单,不同项目需要不同字段;工单端到端的业务流程,不同的项目有不同的环节;另外不同的项目,可能会与不同的外部系统对接……
如果是单应用支撑单项目的情况,可以通过定制开发的方式实现,只是工作量的问题。但是一旦转变成多租户的部署形式,就会相当麻烦,主要是升级的时候不能互相影响,还有怎么处理数据库表结构的差异
所以,这是比互联网应用复杂的地方
4、数据隔离
还有一个很大的区别是数据隔离
网站的大部分数据是必须共享的,否则就会发生用户看不到某些帖子、不能买某些商品等错误的情况。但是对于企业应用来说,数据隔离不但不是问题,反而是需求。A项目的用户不应该看到B项目的数据,把不同项目的数据隔离开完全没有问题
因此,在企业应用中,把数据隔离开,应用只能读取其中的一部分,是可以接受的
多租户的方案
多租户的设计思路,目前想到2种:
第一种是应用只有一套数据库表,基本上沿用现有的表结构,只增加一列项目ID来区分。这种方案短期来看比较简单,但是以前只存放一个项目的数据,现在却要存放几十个项目的数据,很快就会遇到数据库瓶颈(业务数据每天都在增加),最终还是要拆表
第二种是一开始就根据项目把表拆开,每个项目一套表。在项目少数据少的时候,可以只用schema区分,部署在同一个db server里;随着项目和数据增多,再增加db server,做数据迁移。由于本来就根据schema拆了表,迁移起来比较容易
长期来看,我认为第2种方案是比较好的。首先每个项目有自己的表,数据分散,IO性能较优;一个项目的表中的数据损坏,也不会对其他项目造成影响;最后,有天然的数据隔离
但是这要求应用能够访问适当的表和数据库,当一个请求到来的时候,应用需要知道要到哪个表中去查询所需的数据,这也叫数据路由。数据路由交给APP来实现是不合适的,因为APP的代码会非常繁琐,并且新接入一个项目,增加了数据库表之后,还需要修改APP的代码,这是不可接受的。需要把数据路由做成透明的,由专门的抽象层解决这个问题
淘宝在这方面有成熟的解决方案,大致的思路是在orm之下,jdbc之上,提供了一层TDDL层,由这层来实现数据路由的功能。应用对数据库的请求是透明的,TDDL将请求分发到合适的数据库中。TDDL对上层(orm)应该是封装成jdbc的接口,可以看作是一个jdbc驱动,直接注入到orm中。当新项目接入,增加新的表之后,只需要在TDDL层进行配置即可,APP的代码也不需要修改
另外要解决数据迁移的问题。需要开发配套工具,支持数据快速迁移,减少业务中断的时间
总结:
2种方案都需要对产品的实现做修改,可以作为规划,落入后续版本中,短期内难以做到
结合云部署的方案,当前可以把应用预装入虚拟机,然后导出得到镜像,在不修改应用的前提下,实现快速部署。另外,多个项目的数据库,可以共享db server,节省硬件费用,以及oracle license费用,这需要修改产品的安装脚本
上述方案应该看做是过渡方案,长期来看,还是需要对应用进行改造,才能实现真正的多租户。目前可以识别出的技术难点,主要有3点:
1、数据库路由模块的设计和实现
2、数据迁移工具的设计和实现
3、针对多租户场景,可配置性设计的调整(当前的可配置性设计,针对的是单个项目)
分享到:
相关推荐
多租户系统数据隔离实现方案,架构设计,以及如何优雅实现全局操作数据隔离都讲完了,同时也对mybati-plus的多租户插件实现原理和源码流程套路进行了浅析,也对实际应用案例中进行了举证并阐述了相关细节点。...
真正实现了手撸RBAC、jwt的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署;同时还集合各种微服务治理功能和监控功能。模块包括:企业级的认证系统、开发平台、应用监控、...
### 销售力(Salesforce)的多租户架构解析 #### Salesforce简介及发展历程 Salesforce作为云计算领域的领导者,在...其多租户架构不仅为企业提供了灵活高效的云服务解决方案,也为整个云计算行业的发展树立了标杆。
研究中指出了分布式软件产品在多租户管理方面的应用尚属空白,需要对多租户并发查询和分析型应用的资源管控能力、多租户管理、安全管控能力、可扩展性和易用性进行深入研究。基于分布式云计算环境下的多租户Hadoop...
企业应用互联网化的架构演进之路 本文档主要讲述了企业应用互联网化的架构演进之路,涵盖了从传统应用到云化、...本文档提供了企业应用互联网化架构演进之路的完整解析,涵盖了多个方面的技术架构演进和解决方案。
3. **多租户**:多租户架构是指在一个单一实例的软件应用中,不同客户(租户)可以拥有独立的数据和配置。这种设计使得软件提供商能更高效地服务于多个客户,同时也保证了数据隔离和安全性。 4. **SpringCloud**:...
综上所述,多租户媒体云服务模式的研究与应用是一个复杂而全面的课题,它结合了云计算技术、互联网资源、媒体融合、安全加固和自动化部署等多个领域的知识。本文通过构建跨平台、跨地域的媒体生产平台,为媒体行业...
大数据应用解决方案是当前企业和组织中非常重要的一部分,它们可以帮助企业更好地理解和分析大数据,从而提高企业的竞争力和决策能力。以下是大数据应用解决方案的详细知识点: 一、 大数据行业现状和分析 * 对...
在该方案中,数据中心的功能框架图被分为企业级 ETL 平台、存储与计算中心、服务层、应用层、统一门户、统一平台管控六个部分。企业级 ETL 平台负责数据采集、加工、汇总、分发的过程,完成企业级数据标准化、集中化...
多租户架构是云计算中的一个重要概念,它允许多个租户共享相同的应用实例和基础设施,同时保持彼此的隔离。这种模式不仅能为云用户提供成本效益高的软件和应用服务,还能够实现资源的优化使用和高效管理。然而,多...
真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提供应用管理方便第三方系统接入;同时还集合各种微服务治理功能和监控功能。模块...
Force.com 平台是 Salesforce 提供的一款低代码开发环境,专为构建和运行多租户架构的互联网应用程序而设计。这份白皮书深入探讨了 Force.com 架构的设计理念,帮助开发者和IT专业人士理解如何在 Salesforce 的云...
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户、多系统的系统架构。适合学习和企业中使用。真正实现了手撸RBAC、jwt的无状态统一权限认证的解决方案,面向互联网设计...
真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提供应用管理方便第三方系统接入;同时还集合各种微服务治理功能和监控功能。模块...
在当今的互联网环境中,多租户架构已成为众多企业级应用的首选架构模式,因为它能够在相同的软硬件资源下,为多个客户提供独立的运行环境和服务。而实体框架6(Entity Framework 6,简称EF6)作为一款流行的.NET对象...
此外,面对互联网业务的多样性,容器技术可以帮助企业实现基础架构的多元化和弹性扩展,支持不同行业的特定需求,例如金融行业的DevOps、汽车行业的车联网、能源电力的租户隔离等。 DaoCloud的容器管理平台提供了一...
此外,SaaS应用通常支持多租户架构,这意味着多个客户可以在共享的基础设施上运行各自的实例,提高了资源利用率。 在企业协作方面,SaaS应用往往具有优秀的协作功能。员工可以通过云平台实时共享数据、协同编辑文档...