一种多租户系统架构
背景:
去年的时候,因为某些特殊原因,有幸带了一个组,参与了B2B平台的开发。说是B2B平台,因为这套程序开发完了后,可以拿给多个客户使用。客户可以搭建一套具有京东商城风格,那样的网站。然后允许商家在网站上注册,开店,或者卖东西,买东西,网站的用户定位为商家。
在需求分析完后,分为了三个组。
第一个组是商城组,主要负责:商家注册,登录,前端商城主站搭建,商品详情页,搜索页,购物车,下单页,商品评价,仲裁等功能
第二个组是商家组:主要负责商家基本信息维护,商品维护,sku的库存,上下架,订单管理,发货地址管理,会员管理,店铺装修,店铺主站等
第三个组是平台管理,主要负责:类目,品牌管理,商家信息申请审核,店铺审批,商品发布审核,订单结算,商品价格管理,以及主站首页轮播图,楼层等管理。还有就是给我们自己运营人员用的一些功能:比如域名和平台id等功能的管理。
运行时架构图:
nginx:主要做多域名映射,根据域名映射到不同的web Server,比如接受到域名A请求,则路由到web Server1,接受到域名B请求,则路由到web server2
web server:主要是放网页或者web相关的,比如用户登录业务等,客户多变的需求都放到这层实现,比如有些客户在要求自己的网站注册的商家,必须上传运业执照,有些不需要等可变的需求
basic server:后台服务,这层的服务都是共有的,对于每个用户都不变的基础服务都放这层,并且这层做数据库路由,每个域名一个数据库(每个客户一个数据库,做数据隔离,当时个人还不同意,从事后来看,这种架构确实好处比较多,特别是客户以前就有一个网站,然后在往新库里导数据,然后又删新库里的数据时,不担心会把其它客户的数据删掉)。
DB :每个客户一个数据库,做到数据上的逻辑隔离和物理隔离(当时设想每个外部客户1个域名,然后在数据库的每个表里加平台id以区分是那个外部客户的数据,后来架构师力排众议,每个客户1个数据库,做到数据隔离,Basic Server做数据库路由)
如何做数据库路由?
web server根据请求的url,拿到域名,然后查出平台id。basic server中的每个接口,都需要带平台id字段。Web server 调用basic server接口时,传入平台id。然后在basic server的service层,做aop,根据参数里的平台id,找到配置好的平台id和数据库连接信息,把连接信息放入ThreadLocal,包装自己的DataSource,在DataSource里获得数据库连接时,用ThreadLocal里的数据库连接信息,获得数据库连接,方法执行完,清楚数据库连接(这里曾出现过小问题,service嵌套套用的时候,里面service方法退出清楚数据库连接,导致外面service在操作数据库时,拿不到连接信息而报错,后来增加了一个调用层次计数)
相关推荐
一种面向多租户的Linux容器集群组网方法.pdf
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于...
多租户容器数据库是指Oracle数据库管理模型的一种革新,它引入了容器数据库(CDB)和租户数据库(PDB)的概念。通过CDB和PDB模型,可以在一个数据库实例中同时管理多个独立的数据库,这些数据库彼此隔离,但又能共享...
PaaS 平台多租户索引优化机制,胥双双,朱洪亮,随着云计算技术的发展,持续交付技术逐渐成熟,PaaS平台提供了一种更加适合业务扩展,功能不断迭代的软件开发架构。本论文从多租�
随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。作为一款无需下载安装即可使用的应用,【小程序名称】依托于微信庞大的生态系统...
一种融合租户感知的云服务可信评估方法.pdf
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户、多系统的系统架构。适合学习和企业中使用。真正实现了手撸RBAC、jwt的无状态统一权限认证的解决方案,面向互联网设计...
多租户(Multi Tenancy / Tenant)是一种软件架构,其定义是:在一台服务器上运行分区应用实例,它为多个租户提供服务。 概念是抽象的,但是理解起来并不困难,简单来说就是分组,举个例子:我们管理学校学生的时候...
我们可以使用以下任何一种方法来实现多租户: 每个租户的数据库:每个租户都有自己的数据库,并且与其他租户隔离。 共享数据库,共享架构:所有租户共享一个数据库和表。 每个表都有一个带有“租户标识符”的列,...
用于多租户架构的快速中间件 用法: var express = require ( 'express' ) ; var multitenant = require ( 'multitenant' ) ; var app = express ( ) ; app . use ( multitenant ( { ... } ) ) ; // pass in an ...
一种灵活的IaaS云服务租户带宽保障模型.pdf
简介在本文中,我们通过一个示例应用程序EasyOA讲解如何设计单一实例租户启用体系结构。EasyOA是一个为小型企业开发的简单的办公自动化应用程序。我们将介绍几种主要共享资源的多租户设计模式。另外,即将发表的一个...
#资源达人分享计划#
本文介绍了F2C,这是一种用于基础架构即服务(IaaS)云的协作资源管理系统。 受实际产品和服务市场中的团购机制的启发,F2C提倡一组云租户(称为租户联盟)来批量购买资源容量并以虚拟机(VM)的形式共享资源池。 ...
通常有三种解决多租户问题的解决方案。 孤立的方法:分离的数据库。 每个租户都有自己的数据库。 半隔离方法:共享数据库,独立模式。 所有租户都有一个数据库,但每个租户只有一个架构。 共享方式:共享数据库,...
SaaS多租户数据库方案多租户技术或称多重租赁技术,是一种软件架构技术,是实现如何在多用户环境下共享相同的系统或程序组件,并且可确保各个用户间数据的隔离性。在当下云计算时代,多租户技术在共享的数据中心以...
提出一种基于熵度量的DDoS攻击检测方法,根据云环境特点在优先定位攻击源基础上再确定攻击目标,检测多租户云系统内发起的DDoS攻击。提出分布式检测架构,利用检测代理发现潜在攻击源端的可疑攻击流量,检测服务器...
有限状态自动机是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型,它是具有离散输入和输出系统的一种数学模型,只需配置业务流程就可以实现租户所需的特定的业务功能。本文在研究SaaS应用平台、自动机...
为满足行业数据应用托管中对DBaaS提出的数据隔离、性能隔离及可靠性保障等方面的要求,提出一种无共享架构下基于虚拟机、支持副本的多租户数据托管方法及相应的数据库即服务系统。针对该系统中面向租户的虚拟机资源...
该项目假定可以访问专用的MySql DB(可以在application.properties中进行配置),该数据库具有一个名为default_schema的默认架构,以及至少一个具有所选租户名称的其他架构。 缺省模式具有一个名为user_tenant_...