说明Spring Boot构建多租户SaaS平台焦点技能
笔者从2014年开始打仗SaaS(Software as a Service),即多租户(或多承租)软件应用平台;并一向从事相干规模的架构计划及研发事变。时机偶合,在笔者本科结业计划时完成了一个基于SaaS的高效财政打点平台的课题研究,从中收成颇多。最早打仗SaaS时,海内相干资源匮乏,独一有的参照资料是《互联网期间的软件革命:SaaS架构计划》(叶伟等著)一书。最后课题的实现是基于OSGI(Open Service Gateway Initiative)Java动态模块化体系类型来实现的。 时至今天,五年的时刻已往了,软件开拓的技能产生了庞大的改变,笔者所实现SaaS平台的技能栈也更新了好几波,真是印证了那就话:“山重水尽疑无路,柳暗花明又一村”。基于之前走过的很多弯路和踩过的坑,以及近段时刻有很多网友问我怎样行使Spring Boot实现多租户体系,抉择写一篇文章聊一聊关于SaaS的硬核技能。 提及SaaS,它只是一种软件架构,并没有几多隐秘的对象,也不是什么很难的体系,我小我私人的感受,SaaS平台的难度在于贸易上的运营,而非技能上的实现。就技能上来说,SaaS是这样一种架构模式:它让多个差异情形的用户行使统一套应用措施,且担保用户之间的数据彼此断绝。此刻想想看,这也有点共享经济的味道在内里。 笔者在这里就不再深入聊SaaS软件成熟度模子和数据断绝方案比拟的工作了。本日要聊的是行使Spring Boot快速构建独立数据库/共享数据库独立Schema的多租户体系。我将提供一个SaaS体系最焦点的技能实现,而其他的部门有乐趣的伴侣可以在此基本上自行扩展。 2. 实行相识多租户的应用场景 假设我们必要开拓一个应用措施,而且但愿将统一个应用措施贩卖给N家客户行使。在通例环境下,我们必要为此建设N个Web处事器(Tomcat),N个数据库(DB),并为N个客户陈设沟通的应用措施N次。此刻,假如我们的应用措施举办了进级可能做了其他任何的窜改,那么我们就必要更新N个应用措施同时还必要维护N台处事器。接下来,假如营业开始增添,客户由原本的N个酿成了此刻的N+M个,我们将面对N个应用措施和M个应用措施版本维护,装备维护以及本钱节制的题目。运维险些要哭死在机房了… 为了办理上述的题目,我们可以开拓多租户应用措施,我们可以按照当前用户是谁,从而选择对应的数据库。譬喻,当哀求来自A公司的用户时,应用措施就毗连A公司的数据库,当哀求来自B公司的用户时,自动将数据库切换到B公司数据库,以此类推。从理论大将没有什么题目,但我们假如思量将现有的应用措施改革成SaaS模式,我们将碰着第一个题目:假如辨认哀求来自哪一个租户?怎样自动切换数据源? 3. 维护、辨认和路由租户数据源 我们可以提供一个独立的库来存放租户信息,如数据库名称、链接地点、用户名、暗码等,这可以同一的办理租户信息维护的题目。租户的辨认和路由有许多种要领可以办理,下面罗列几个常用的方法: 1.可以通过域名的方法来辨认租户:我们可觉得每一个租户提供一个独一的二级域名,通过二级域名就可以到达辨认租户的手段,如tenantone.example.com,tenant.example.com;tenantone和tenant就是我们辨认租户的要害信息。 2.可以将租户信息作为哀求参数转达给处事端,为处事端辨认租户提供支持,如saas.example.com?tenantId=tenant1,saas.example.com?tenantId=tenant2。个中的参数tenantId就是应用措施辨认租户的要害信息。 3.可以在哀求头(Header)中配置租户信息,譬喻JWT等技能,处事端通过理会Header中相干参数以得到租户信息。 4.在用户乐成登录体系后,将租户信息生涯在Session中,在必要的时辰从Session取出租户信息。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |