`

多项目的实现和部署方式

阅读更多
昨天那个“多租户”的话题,今天继续跟同事讨论了一下,把思路整理得更明确一点:

目前产品还没有实现数据路由(数据路由的概念见上一篇博客: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
分享到:
评论
3 楼 kyfxbl 2013-07-11  
vavi 写道
刚刚在散步的时候,我也在想这个问题。我觉得不仅仅需要从技术上考虑,还需要从业务上考虑。

我是赞成表上加一个项目字段的。

下面是我的分析:
“一套系统支持多项目”我觉得这个需求的出发点应该是“目前及很长一段时间内数据量不会太大”。如果未来某个项目数据较大的,可以将其单独安装一套独立的app和db,专门给单项目使用;如果前者也达到瓶颈了,我觉得再具体问题具体分析,比如是否考虑SSD,RAC啥的。

目前重点还是应该解决业务问题,在目前产品的企业应用中谈高性能,架构可扩展,长治久安,我感觉有点不现实,不靠谱。

淘宝的架构在不断的进化,演进中,我们目前的很多问题只是空想(当然,我心中也有个疑问,假如是存在slave数据库的话,究竟多大数据量的情况下,单DB会撑不住。然后结合目前可能的数据增长规模,再做些评估,预测)。 并且很多网上问题不是架构问题,而是业务细节实现问题。

细节落实不到位,架构再NB也不行。

欢迎讨论哈。


另外特别同意你说的“细节落实不到位,架构再NB也不行”,我们现在不就是这个问题吗,呵呵,架构师太NB了,什么都敢说
2 楼 kyfxbl 2013-07-11  
vavi 写道
刚刚在散步的时候,我也在想这个问题。我觉得不仅仅需要从技术上考虑,还需要从业务上考虑。

我是赞成表上加一个项目字段的。

下面是我的分析:
“一套系统支持多项目”我觉得这个需求的出发点应该是“目前及很长一段时间内数据量不会太大”。如果未来某个项目数据较大的,可以将其单独安装一套独立的app和db,专门给单项目使用;如果前者也达到瓶颈了,我觉得再具体问题具体分析,比如是否考虑SSD,RAC啥的。

目前重点还是应该解决业务问题,在目前产品的企业应用中谈高性能,架构可扩展,长治久安,我感觉有点不现实,不靠谱。

淘宝的架构在不断的进化,演进中,我们目前的很多问题只是空想(当然,我心中也有个疑问,假如是存在slave数据库的话,究竟多大数据量的情况下,单DB会撑不住。然后结合目前可能的数据增长规模,再做些评估,预测)。 并且很多网上问题不是架构问题,而是业务细节实现问题。

细节落实不到位,架构再NB也不行。

欢迎讨论哈。


非常赞同,目前我们的产品还是应该更多地考虑业务问题。去过几个项目看过,应用情况惨不忍睹。在这种情况下,谈高性能和伸缩,确实有点脱离实际

不过最近会考虑这个问题,倒也不是完全因为在空想。主要是上上周听了淘宝的一个分享,引申开的。另外最近不是派我去验证云部署嘛,跟这事也有关系,2者一联系,就想到了这个话题
1 楼 vavi 2013-07-10  
刚刚在散步的时候,我也在想这个问题。我觉得不仅仅需要从技术上考虑,还需要从业务上考虑。

我是赞成表上加一个项目字段的。

下面是我的分析:
“一套系统支持多项目”我觉得这个需求的出发点应该是“目前及很长一段时间内数据量不会太大”。如果未来某个项目数据较大的,可以将其单独安装一套独立的app和db,专门给单项目使用;如果前者也达到瓶颈了,我觉得再具体问题具体分析,比如是否考虑SSD,RAC啥的。

目前重点还是应该解决业务问题,在目前产品的企业应用中谈高性能,架构可扩展,长治久安,我感觉有点不现实,不靠谱。

淘宝的架构在不断的进化,演进中,我们目前的很多问题只是空想(当然,我心中也有个疑问,假如是存在slave数据库的话,究竟多大数据量的情况下,单DB会撑不住。然后结合目前可能的数据增长规模,再做些评估,预测)。 并且很多网上问题不是架构问题,而是业务细节实现问题。

细节落实不到位,架构再NB也不行。

欢迎讨论哈。

相关推荐

    JavaWeb项目部署方式.txt

    - **IDE内部部署**:大多数IDE如MyEclipse或IntelliJ IDEA提供了内置的Tomcat服务器,可以在IDE内部轻松部署和调试Web应用。这种方式对于初学者来说非常友好,但当项目结构变得复杂时,可能会出现映射问题,需要频繁...

    毕业设计 基于区块链的一稿多投系统的设计与实现+部署文档+项目资料齐全 优秀项目.zip

    毕业设计 基于区块链的一稿多投系统的设计与实现+部署文档+项目资料齐全 优秀项目.zip毕业设计 基于区块链的一稿多投系统的设计与实现+部署文档+项目资料齐全 优秀项目.zip毕业设计 基于区块链的一稿多投系统的设计...

    基于Jenkins+Gitlab+Docker实现SpringBoot项目自动部署

    本文主要介绍了基于Jenkins、Gitlab和Docker实现SpringBoot项目自动部署的方法。下面将从Jenkins的安装、配置到自动化构建和部署的整个过程进行详细说明。 Jenkins安装 首先,我们需要使用Docker来安装Jenkins。...

    微信小程序+java后端实现, 里边带完整的项目部署方案,按部就班就好,非常完善

    里边带完整的项目部署方案,按部就班就好,非常完善 微信小程序+java后端实现, 里边带完整的项目部署方案,按部就班就好,非常完善 微信小程序+java后端实现, 里边带完整的项目部署方案,按部就班就好,非常完善 ...

    用Ant实现Java项目的自动构建和部署

    用Ant实现Java项目的自动构建和部署

    tomcatweb项目部署方式.docx

    使用 WAR 文件部署可以简化项目的部署和维护过程。 Tomcat 管理界面 Manager App 部署 Tomcat 管理界面 Manager App 是 Tomcat 服务器自带的一个管理工具,用于管理和部署 Web 项目。使用 Manager App 可以实现 ...

    jenkins实现maven项目自动部署到tomcat

    【Jenkins实现Maven项目自动部署到Tomcat】是一篇关于自动化构建和部署流程的教程。该文档旨在教你如何利用Jenkins自动化处理Maven项目的编译、打包和部署到Tomcat服务器的过程,使得开发工作更加高效。以下是详细的...

    SpringBoot项目如何实现热部署.pdf

    总的来说,SpringBoot项目实现热部署的关键在于引入`spring-boot-devtools`依赖,配置Maven插件以支持 fork 和资源添加,以及开启IDEA的自动构建和编译器实时编译功能。这样,开发者在编码过程中就能享受到即时反馈...

    基于Java实现的网上订餐项目部署

    基于Java实现的网上订餐项目部署+源码+说明文档+数据库基于Java实现的网上订餐项目部署+源码+说明文档+数据库基于Java实现的网上订餐项目部署+源码+说明文档+数据库基于Java实现的网上订餐项目部署+源码+说明文档+...

    tomcat 部署java项目 jar

    - 将Java项目部署到Tomcat通常有以下几种方式: - 将JAR文件放入`$CATALINA_HOME/lib`目录,这样Tomcat会自动加载其中的Servlet和过滤器。 - 将JAR文件放入`$CATALINA_HOME/webapps/WEB-INF/lib`目录,适合小型...

    C# 安装部署项目

    下面将详细介绍 C# 安装部署项目的创建和配置过程。 一、新建安装部署项目 要创建一个新的安装部署项目,需要在 Visual Studio 中点击“文件”菜单,然后选择“新建”项目。在新建项目对话框中,选择“其他项目...

    Tomcat7部署多个Web项目的方法-有图有真相

    根据提供的文件信息,下面详细介绍在Tomcat7上部署多个Web项目的方法,这些知识点...了解这些配置方式对于Web开发人员来说是非常重要的,它可以帮助有效地管理Web应用,以及在开发、测试和生产环境中快速地部署项目。

    tomcat部署多个项目

    在 Tomcat 上部署多个项目主要通过以下几种方式实现: 1. **直接放置于`webapps`目录:** - 这是最简单也是最常用的部署方式。 - 用户只需将 `.war` 文件或展开后的项目文件直接放置到 Tomcat 的 `webapps` 目录...

    spring boot项目和vue一起放在tomcat部署

    在本文中,我们将介绍如何将 Spring Boot 项目和 Vue 一起部署到 Tomcat 服务器中。这个过程需要我们对 Tomcat 服务器进行配置,以便能够正确地部署并运行我们的应用程序。 Spring Boot 项目和 Vue 的结合 在 ...

    服务器项目部署详细示例文档.pdf

    本文档是关于服务器项目部署的详细示例文档,涵盖了服务器项目部署的整个流程,从环境准备、代码下载、修改配置到最后的部署和测试。本文档还提供了详细的Self-learning编程学习路线、面试题和面经、编程资料及系列...

    jenkins自动部署vue前端项目

    综上所述,Jenkins自动部署Vue前端项目是一个涉及多技术栈和细致流程控制的过程。成功实现该过程,不仅需要对Jenkins工具本身有深入的理解,还需要掌握前端项目构建、Linux服务器操作和SSH协议等相关知识。通过自动...

    ecilipse+tomcat+jrebel实现热部署

    热部署是指在不重新编译和部署项目的情况下,实时更新项目的代码和配置的过程。 JRebel 是一个商业热部署工具,由 ZeroTurnaround 公司开发。JRebel 可以与 Eclipse 和 Tomcat集成,实现热部署的功能。热部署可以...

    基于Jenkins+Git实现SpringBoot项目自动部署

    本文将指导您如何使用Jenkins和Git实现SpringBoot项目的自动部署。我们将从基础开始,介绍如何在Linux环境下搭建Jenkins,安装和配置必要的插件,然后使用Git实现自动化构建和部署。 Jenkins安装和配置 首先,我们...

Global site tag (gtag.js) - Google Analytics