优雅掌握SpringBoot多租户架构,轻松应对复杂业务场景数据源私有云公有云beanspringconfiguration

多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。

2多租户架构的优势

更好地满足不同租户的个性化需求。

可以降低运维成本,减少硬件、网络等基础设施的投入。

节约开发成本,通过复用代码,快速上线新的租户实例。

增强了系统的可扩展性和可伸缩性,支持水平扩展,每个租户的数据和资源均可管理和控制。

3实现多租户架构的技术选择

对于实现多租户架构技术不是最重要的最重要的是正确的架构思路。但是选择正确的技术可以更快地实现多租户架构。

二、设计思路1架构选型

基于Java开发多租户应用推荐使用SpringBoot和SpringCloud。SpringBoot能快速搭建应用并提供许多成熟的插件。SpringCloud则提供了许多实现微服务架构的工具和组件。

1.1SpringBoot

使用SpringBoot可以简化项目的搭建过程自动配置许多常见的第三方库和组件,减少了开发人员的工作量。

@RestControllerpublicclassTenantController{@GetMapping("/hello")publicStringhello(@RequestHeader("tenant-id")StringtenantId){return"Hello,"+tenantId;}}1.2SpringCloud

在架构多租户的系统时SpringCloud会更加有用。SpringCloud提供了一些成熟的解决方案,如Eureka、Zookeeper、Consul等,以实现服务发现、负载均衡等微服务功能。

在多租户环境中数据库必须为每个租户分别存储数据并确保数据隔离。我们通常使用以下两种方式实现:

多个租户共享相同的数据库,每个表中都包含tenant_id这一列,用于区分不同租户的数据。

为每个租户创建单独的数据库,每个数据库内的表结构相同,但数据相互隔离。

3应用多租户部署

为了实现多租户在应用部署时我们需要考虑以下两个问题。

3.1应用隔离

在多租户环境中不同租户需要访问不同的资源,因此需要进行应用隔离。可以通过构建独立的容器或虚拟机、使用命名空间等方式实现。Docker就是一种非常流行的隔离容器技术。

3.2应用配置

由于每个租户都有自己的配置需求因此需要为每个租户分别设置应用配置信息,例如端口号、SSL证书等等。这些配置可以存储在数据库中,也可以存储在云配置中心中。

4租户管理

在多租户系统中需要能够管理不同租户的数据和资源,同时需要为每个租户分配相应的权限。解决方案通常包括以下两部分。

4.1租户信息维护

租户信息的维护包括添加、修改、删除、查询等操作,要求能够根据租户名称或租户ID快速查找对应的租户信息。

CREATETABLEtenant(idBIGINTAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(50)NOTNULLUNIQUE,descriptionVARCHAR(255),created_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);4.2租户权限控制

在多租户应用中必须为每个租户分别设置对系统资源的访问权限。例如,A租户和B租户不能访问彼此的数据。

在SpringBoot中可以通过多数据源和动态路由来实现多租户机制。

1.1多数据源实现

多数据源是指为不同的租户配置不同的数据源,使得每个租户都可以访问自己的独立数据。具体实现方法如下:

@ConfigurationpublicclassDataSourceConfig{@Bean(name="dataSourceA")@ConfigurationProperties(prefix="spring.datasource.a")publicDataSourcedataSourceA(){returnDataSourceBuilder.create().build();}@Bean(name="dataSourceB")@ConfigurationProperties(prefix="spring.datasource.b")publicDataSourcedataSourceB(){returnDataSourceBuilder.create().build();}@Bean(name="dataSourceC")@ConfigurationProperties(prefix="spring.datasource.c")publicDataSourcedataSourceC(){returnDataSourceBuilder.create().build();}}

以上代码是配置了三个数据源分别对应三个租户。然后在使用时,可以使用注解标记需要连接的数据源。

@ServicepublicclassProductService{@Autowired@Qualifier("dataSourceA")privateDataSourcedataSource;//...}1.2动态路由实现

动态路由是指根据请求的URL或参数动态地切换到对应租户的数据源。具体实现如下:

publicclassDynamicDataSourceextendsAbstractRoutingDataSource{@OverrideprotectedObjectdetermineCurrentLookupKey(){returnTenantContextHolder.getTenantId();}}@ConfigurationpublicclassDataSourceConfig{@Bean(name="dataSource")@ConfigurationProperties(prefix="spring.datasource")publicDataSourcedataSource(){returnDataSourceBuilder.create().type(DynamicDataSource.class).build();}}

以上是动态路由的核心代码DynamicDataSource继承自AbstractRoutingDataSource,通过determineCurrentLookupKey()方法动态获得租户ID,然后切换到对应的数据源。

2SpringCloud中的多租户实现

在SpringCloud中可以通过服务注册与发现、配置中心、负载均衡等方式实现多租户机制。

2.1服务注册与发现

使用SpringCloud中的Eureka实现服务注册与发现。每个租户的服务都在注册中心以不同的应用名称进行注册,客户端可以通过服务名称来访问对应租户的服务。

2.2配置中心

使用SpringCloudConfig作为配置中心。配置文件以租户ID进行区分,客户端通过读取对应租户的配置文件来获取配置信息。

2.3负载均衡

使用SpringCloudRibbon作为负载均衡器。根据请求的URL或参数选择对应租户的服务实例进行请求转发。

2.4API

在API网关层面实现多租户机制根据请求的URL或参数判断所属租户,并转发到对应租户的服务实例。

四、应用场景1私有云环境

私有云环境指的是由企业自行搭建的云环境,不对外提供服务,主要应用于企业内部的数据存储、管理、共享和安全控制。相较于公有云,私有云的优点在于可以更好地保护企业核心数据,同时也能够满足企业对于数据安全性和可控性的要求。

2公有云环境

公有云环境指的是由云服务商搭建并对外提供服务的云环境,用户可以根据需要购买相应的云服务,如云存储、云计算、云数据库等。相较于私有云,公有云的优点在于具有成本低廉、弹性伸缩、全球化部署等特点,能够更好地满足企业快速发展的需求。

3企业级应用

企业级应用是指面向企业客户的应用程序,主要包括ERP、CRM、OA等一系列应用系统。这类应用的特点在于功能强大、流程复杂、数据量大,需要满足企业的高效率、高可靠性、高安全性和易维护性等要求。在云计算环境下,企业可以将这些应用部署在私有云或公有云上,减少了硬件设备的投入和维护成本,提高了管理效率。

五、实现步骤1搭建SpringBoot和SpringCloud环境

首先需要在Maven项目中引入以下依赖:

org.springframework.bootgroupId>spring-boot-starter-webartifactId>dependency>org.springframework.cloudgroupId>spring-cloud-dependenciesartifactId>2020.0.3version>pomtype>importscope>dependency>

然后需要在application.yml中配置相应的参数,如下所示:

其中datasource.url为数据库连接的URL,username和password为数据库连接的账号和密码;server.port为SpringBoot应用启动的端口;eureka.client.serviceUrl.defaultZone为Eureka服务注册中心的URL。

2修改数据库设计

3实现应用多租户部署

接着需要在代码中实现应用的多租户部署功能。具体来说,我们需要为每个租户实例化对应的SpringBean,并根据租户ID将请求路由到相应的Bean中去处理。

以下是一个简单的实现示例:

@ConfigurationpublicclassMultiTenantConfig{//提供对应租户的数据源@BeanpublicDataSourcedataSource(TenantRegistrytenantRegistry){returnnewTenantAwareDataSource(tenantRegistry);}//多租户Session工厂@Bean(name="sqlSessionFactory")publicSqlSessionFactorysqlSessionFactory(DataSourcedataSource)throwsException{SqlSessionFactoryBeansessionFactory=newSqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);returnsessionFactory.getObject();}//动态切换租户@BeanpublicMultiTenantInterceptormultiTenantInterceptor(TenantResolvertenantResolver){MultiTenantInterceptorinterceptor=newMultiTenantInterceptor();interceptor.setTenantResolver(tenantResolver);returninterceptor;}//注册拦截器@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(multiTenantInterceptor());}//注册租户信息@BeanpublicTenantRegistrytenantRegistry(){returnnewTenantRegistryImpl();}//解析租户ID@BeanpublicTenantResolvertenantResolver(){returnnewHeaderTenantResolver();}}

其中MultiTenantConfig是多租户部署的核心配置类,它提供了对应租户数据源、多租户Session工厂、动态切换租户等功能。

4实现租户管理

最后需要实现一个租户管理的功能,以便在系统中管理不同的租户。具体来说,我们可以使用SpringCloud的服务注册与发现组件Eureka来注册每个租户的实例,并在管理界面中进行相应的操作。另外,我们还需要为每个租户提供一个独立的数据库,以保证数据隔离性。

六、小结回顾

本文详细介绍了如何使用SpringBoot和SpringCloud实现一个支持多租户部署的应用。主要包括搭建SpringBoot和SpringCloud环境、修改数据库设计、实现应用多租户部署、实现租户管理等方面。

应用场景主要包括SaaS应用、多租户云服务等。优劣势主要体现在提升了应用的可扩展性和可维护性,但也增加了部署和管理的复杂度。未来的改进方向可以考虑进一步提升多租户管理的自动化程度,减少人工干预和错误率。

THE END
1.星空公有云7.7版本,从不同供应商处进行采购,大家有什么好的方法...我们的系统本身就是支持的,批号或条码或序列号或辅助属性都可以。关键是实际出库要和系统出库单上的一致...https://vip.kingdee.com/questions/247481438210714112/answers/247805901229359104
2.公有云和私有云的区别是()/【判断题】云盘由公有云、私有云和混合云构成,而私有云又分为了内部私有云、外部私有云。 A. 正确 B. 错误 查看完整题目与答案 【简答题】史湘云和忠靖候史鼎是()关系。 查看完整题目与答案 【简答题】简述公有云和私有云的主要区别。 查看完整题目与答案 【简答题】形成云和降水的动力性抬升主要包括...https://www.shuashuati.com/ti/6712d5d6632441cfb219cc1a2f112136.html?fm=bd5b33db816460c699c9614d1008dc2088
3.云计算部署模式云计算部署模式表示的是某种特定的云环境类型,主要由所有权、大小和访问方式进行区分,不同的部署模式对基础架构提出了不同的要求。目前,业界存在四种通用的云计算部署模式,即公有云(Public Cloud)、私有云(Private Cloud)、社区云(Community Cloud)和混合云(Hybrid Cloud)。 https://www.togogo.net/news/4038.html
4.多云管理的7个秘诀技术专区云计算频道企业网D1Net“企业需要确保连续性、灾难恢复和安全流程是冗余的,以保证强大的多云策略。”ShoreGroup公司云计算解决方案架构师Eric Sanders说。 正如Red Hat技术传道者Gordon Haff最近指出的那样:“人们对于公共云安全的怀疑,有时似乎取决于其他人对其安全的态度。” 5.区分公共云服务类型 ...https://www.d1net.com/cloud/tech/522975.html
5.东方时尚:首次公开发行股票招股说明书股票频道本公司将审慎对公 司未来的薪酬制度、拟公布的公司股权激励的行权条件(如有)等事宜进行审议, 促使相关事项与公司填补回报措施的执行情况相挂钩。本人将支持与公司填补回 报措施的执行情况相挂钩的相关议案,并愿意投赞成票(如有投票权)。 本承诺出具日后,如监管机构作出关于填补回报措施及其承诺的相关规定有 其他要求...https://stock.stockstar.com/notice/JC2016012600001240_101.shtml
1.公有云基础架构与运维了解虚拟网络2、从功能上来区分:公有网络多用户公用,私有网络用户私有; (可以假设为一个大房子 有十个或者更多卧室,内部有内部的卧室号码,你们这个大房子有大房子的门牌号,这就是公有和私有网络。) 私有网络允许用户自定义自己的网络空间,并控制用户的网络流量方向,用户也可以利用私有网络的网络ACL、安全防火墙为云主机租用提供...https://blog.csdn.net/duan18291953965/article/details/143798282
2.云类型有三种已知类型的云:公有云、私有云和混合云。 公有云由云提供商(如 Amazon 或 Microsoft)拥有,但可供公众使用。 私有云通常由组织拥有,组织还控制对云的访问。 混合云是公有云和私有云的组合。 我们讨论了所有权、基础结构、最终用户可用性、成本、安全性和数据位置方面的不同类型。 https://docs.microsoft.com/zh-cn/training/modules/cmu-cloud-admin-overview/05-cloud-types
3.云电脑服务架构选型:公有云私有云与混合云的深度剖析一、公有云在云电脑服务中的应用 公有云是指由第三方服务提供商提供的云计算服务,用户可以通过互联网访问和使用这些服务。公有云在云电脑服务中具有广泛的应用,主要体现在以下几个方面: 成本效益:公有云通常采用按需付费的模式,用户只需为实际使用的资源付费,这大大降低了初期投资和运维成本。对于中小企业或个人用...https://www.ctyun.cn/developer/article/609943832498245
4.多云安全治理服务产品优势产品简介文档中心产品具备云原生优势,实现云资产自动发现、统一管理和实时监控,提供云安全保障,助力企业轻松应对云环境下的安全挑战。 风险运营指引 基于风险分类、风险等级进行风险的分类和排序,有助于风险的有序处置。 支持检查模式、资源归属的风险过滤,支持风险报告导出,有助于风险的治理推进。 https://cloud.tencent.com/document/product/1783/111952
5.Azure的CDN,内容分发网络解析与应用在当今数字化时代,内容分发网络(CDN)已成为提高Web性能和可用性的关键技术之一,作为全球领先的云服务提供商,Azure提供了强大且灵活的CDN服务,帮助企业实现高效的内容交付,本文将深入探讨Azure CDN的背景、功能、优势以及应用场景,旨在为读者提供全面而实用的参考。 https://www.asoulu.com/post/89477.html
6.公有云与私有云计算环境之间的区别私有云一词的引入是为了区分这些内部云环境和像我们这样的组织提供的第三方公共云服务。公有云和私有云服务的用户有某些相似之处。下面是一些示例。 按需基础设施 公有云和私有云都通过网络抽象化和共享计算资源,例如硬件、网络、软件、服务器和存储。用户可以根据需要分配和发布资源,也可以管理软件模块等基础设施配置。http://aws.amazon.com/cn/compare/the-difference-between-public-cloud-and-private-cloud/
7.公有云与私有云的定义公有云与私有云定义公有云(Public Cloud)和私有云(Private Cloud)是云计算的两种典型部署模式。它们的主要区别在于资源所有权和部署方式。 **公有云(Public Cloud)** 公有云是指...https://cloud.tencent.com.cn/developer/information/%E5%85%AC%E6%9C%89%E4%BA%91%E4%B8%8E%E7%A7%81%E6%9C%89%E4%BA%91%E7%9A%84%E5%AE%9A%E4%B9%89
8.金蝶私有云和公有云的区别综上所述,算力在云端,无论是从成本、数据安全可靠性、扩展性、运维等等各方面来说,公有云的优势远远超过私有云. 以上详细介绍了金蝶私有云和公有云的区别.作为一名单位的财务工作者,需要特别的清楚,如果自己的单位使用的是金蝶云财务软件,那么需要首先区分一下,到底是私有云还是公有云,之后就需要熟练的掌握这款软件...https://www.kuaizhang.com/news/detail_51706.html
9.香港云主机哪个好服务器百科需要区分公有云和私有云的概念。公有云是指服务提供商通过互联网向多个用户提供服务的云计算模型,而私有云则是用户在自己的服务器上建立虚拟机服务。在选择香港云主机时,应根据自身的实际情况和需求来决定采用哪种云计算模式。 2. 选择信誉良好的服务商 https://www.kangle.im/post/106766.html
10.华为云计算IE面试笔记VDC:虚拟数据中心,是一组资源的集合,是逻辑上的概念,是一个嵌套最多可以嵌套六层。VDC包含有project 6. 进行资源管理层的规划:Service OM ManageOne上规划: SC(运营) OC(运维) 7. 云灾备的设计规划:CSBS VBS CSHA CSDR VBS是备份云硬盘的。 CSHA是云服务器高可用 双活。 https://blog.51cto.com/u_15077561/4554591
11.StarHub:成功推出公有云服务不同于其他企业不区分用户类型,统一按照1个月进行试用的模式,StarHub对试用账户进行了多种区分,既可让普通用户充分体验StarHub公有云带来的良好服务,又可实现给重点用户提供试用期更长、资源更多的服务,达到提高用户粘性的目的。在资费方面,StarHub也采用了灵活的方式,如针对散户、不同套餐用户、VIP用户等多种不同...https://carrier.huawei.com/cn/success-stories/services/SolutionTopic/DC/DC1
12.移动云帮助手册移动云帮助手册26.云主机新增的网卡如何配置 27.云主机资源权限如何分配使用 28.如何制作云主机镜像 29.如何使用云主机镜像创建云主机 30.如何修改云主机默认ssh端口及禁止root用户直接登录 31.如何在云主机所在的安全组放开SSH/RDP 32.公有云环境下Windows虚拟机使用多网卡时,有可能存在默认路由冲突的问题,导致虚机无法访问外网 ...https://ecloud.10086.cn/op-help-center/doc/article/38130
13.SAPS/4HANA不同版本有什么区别,企业该怎么选型?SAP S/4HANA主要分为本地部署版本和云部署版本(Cloud)两大版本,Cloud版本又分为公有云和私有云两个版本。 1. SAP S/4HANA On-Premise版本 对于SAP S/4HANA OP本地版本,是基于SAP HANA 内存数据库的ERP业务套件,客户可以管理所有内容,包括HANA数据库、应用程序、数据中 心、操作系统、中间件、服务器、虚拟...https://www.xqudp.com/hangye/821.html
14.剑云拨雾共产主义低潮血的教训经验:公有制是如何和平演变成官有...960万平方公里土地的官有制引发“政府卖地”、“土地财政”大规模属于违宪非法行为,土地腐败成为腐败的重灾区。因为土地公有制是其他一切生产资料公有制的前提和基础,土地官有制彻底摧毁了公有制的土地基础。 剑云拨雾专栏:土地制度,公有制,自由人联合体...http://www.wyzxwk.com/Article/sichao/2024/04/490279.html
15.八年级上册物理期中考试复习资料1、比较物体运动的快慢有两种方法:一种是相同 时间 比较物体经过的路程,经过路程 长 的物体运动得快。 另一种是经过相同 路程 比较他们所用的时间,所用的时间少 的物体运动得快。 (2)物体运动的快慢,还可以用 速度 来表示,速度值 大 的物体运动得快。 https://www.yjbys.com/edu/chuzhong/112364.html
16.杭州雄迈信息技术有限公司蜂云是雄迈基于全球部署的雄迈云倾力打造的轻量化公有云监控平台,无需部署本地服务器,无需专业运维人员,无需复杂的网络设置,设备一键扫码接入,云端统一管理,只需要一个平台账号就可以快速建立各类行业项目解决方案,拥有专业的视频监控平台。 蜂云-可做的业务 ...https://www.xiongmaitech.com/index.php/news/info/11/216
17.市民云资讯新冠疫情反复,这些防护错误操作你有吗?只要正确佩戴合格的医用口罩/医用外科口罩,只需1个就能达到预期的防护效果,没有必要佩戴多层口罩。 3.错误区分正反面 通常,医用口罩/医用外科口罩颜色较深面、鼻夹在外的一面为外面。 部分双面均为白色的口罩并非医用口罩/医用外科口罩,防护效果有限,不建议使用。 https://m.thepaper.cn/wap/resource/jsp/newsDetail_forward_17033650
18.本地部署与私有云:有什么区别?如果从事科技行业,可能知道本地和私有云指的是不同的东西。但是,本地环境与私有云究竟有何区别?答案有些待商榷。尽管表面上内部部署和私有云基础设施之间似乎有明显的区别,但人们使用这些术语的方式可能会导致很多歧义。 考虑到这一现实,我们来看看定义内部部署和私有云的方法,以及为什么区分每种环境的界限会变得模糊...https://www.fromgeek.com/telecom/640365.html