昨天那个“多租户”的话题,今天继续跟同事讨论了一下,把思路整理得更明确一点:
目前产品还没有实现
数据路由(数据路由的概念见上一篇博客:
http://kyfxbl.iteye.com/blog/1901642),所以这就限定了
一套应用,只能操作一套数据库表
现在要实现多项目集中部署,就只有2种办法:
方法1
把多项目的数据放在同一套表里,用字段来区分。这是产品当前的做法,也是大部分网站的做法(因为网站的大部分数据必须共享,不能隔离)
这种办法的优点,是应用和数据库都只有1套(不考虑伸缩的情况下),不需要重复部署,硬件成本比较低
但是缺点是,数据增多以后,数据库IO会成为瓶颈,无法接入新的项目。由于我们产品是企业应用,所以有一个折中的办法,就是再部署一套应用+数据库,来放新的项目
如上图,2套应用环境是完全隔离的,app1无法访问database2的数据,网站显然是不能这么处理的,但是我们可以这么做
方法2
每个项目一套表,为每个项目部署一套完整的应用
跟上面相反,这种方法的优点是每个项目有自己的数据库,等于是提前分表了,性能比较好;缺点是需要大量的硬件,成本非常高
这里数据库隔离,可以是以schema区分,放在同一个数据库里;也可能直接放在不同的数据库里。前者稍微节省了一点db server的硬件,本质上是一样的。app server无论如何节省不了
结论:
受限于
“应用只能访问一套数据库”,无论哪个方案,app server都存在浪费。区别只是,第一种方法用增加项目标识的做法,把N个项目的数据放在了一个数据库里,所以app server的数量,也可以除以N。其实本质上是一样的
另外,多套数据库,并不是一定放在不同的db server里,也可以用schema区分,放在同一个db server里
本质的分水岭,还是在于能否让一套应用透明地访问多套数据库。所以最终的方案还是需要实现数据路由,届时就可以用下面的方式来部署:
把业务表拆分,按需扩容db server。app server很长时间都只需要一台(HTTP并发很低),有需要的话再水平伸缩
- 大小: 3.1 KB
- 大小: 3.4 KB
- 大小: 3.9 KB
- 大小: 3.8 KB
分享到:
相关推荐
里边带完整的项目部署方案,按部就班就好,非常完善 微信小程序+java后端实现, 里边带完整的项目部署方案,按部就班就好,非常完善 微信小程序+java后端实现, 里边带完整的项目部署方案,按部就班就好,非常完善 ...
用Ant实现Java项目的自动构建和部署
通过添加devtools和修改pom文件插件以及修改编译器的环境变量的配置来实现SpringBoot项目的自动热部署,以便快速开发
jenkins实现maven项目自动部署到tomcat 实现自动部署,
基于Java实现的网上订餐项目部署+源码+说明文档+数据库基于Java实现的网上订餐项目部署+源码+说明文档+数据库基于Java实现的网上订餐项目部署+源码+说明文档+数据库基于Java实现的网上订餐项目部署+源码+说明文档+...
基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署
在tomcat下部署多个项目,在本例中实现同一端口号的多个项目部署
JDeploy是Java + Shell实现的基于Linux系统的自动化、可视化的项目部署平台,能部署Java服务、Java Web项目,可以简化项目部署操作,无需繁琐的黑窗口SSH指令及Jenkins复杂的配置,傻瓜式操作,只需要提供SVN/GIT...
docker+jenkins+github实现golang项目自动部署.rar
此次部署项目是我亲身经历,而且是一次性部署成功,没有部署超过两次甚至多次的情况,过程虽然很艰难,但结果还是很满意的,我希望大家用心去部署这个项目,你会发现部署这个项目其实不难
第一部分:部署linux + nginx 第二部分:部署Windows+tomcat 第三部分:调用第三方api的跨域问题处理。...支持加载动态权限菜单,多方式轻松权限控制。 高效率开发,使用代码生成器可以一键生成前后端代码。)
使用MD5根据项目部署的硬盘序列号加密实现项目安全防护
图解与代码Ant实现Java项目的自动构建和部署
在eclipse中无插件,实现自动将项目部署在tomcat下的webapps文件夹下
python实现通义千问VLLM推理部署项目源码(优质项目).zip本项目代码经过严格调试,确保可以运行!放心下载使用。可作为期末课程设计、课程大作业、毕业设计等。具有较高的学习借鉴价值! python实现通义千问VLLM...
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。它不仅易于上手,还便于与第三方库或既有项目整合。 另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂...
工业缺陷检测基于python检测和C++部署检测实现PCB板缺陷检测源码+项目说明.zip 95分以上大作业和课程设计项目,代码完整下载可用,可作为期末大作业和课程设计,小白可实战。 工业缺陷检测基于python检测和C++部署...
Java毕业设计 基于Springboot+Vue+Websocket的多人吃蛇的设计与实现+部署文档+全部资料(优秀项目)Java毕业设计 基于Springboot+Vue+Websocket的多人吃蛇的设计与实现+部署文档+全部资料(优秀项目)Java毕业设计 ...
该项目实现了流程自助部署可视化,可自己添加每一步流程,可以拖拽进行修改流程,实现了前后添加流程以及自动定位新添加步骤模块功能,实现删除步骤功能,流程重置功能以及提交功能(在console.log中查看提交)