如何从一个简单的网站架构演进发展成大型网站
2021-07-14
前言
写这篇文章的目的是为了帮助自己思考和澄清,以及如何从一个简单的网站架构演进到一个大型的网站架构,主要集中在技术方面
简单的网站
由于没做过php,所以就以jsp为例,jsp为网站前端,以电子商务网站为例,描述一个简单的网站结构
前端jsp+css+js
后端java ssh
网络容器
数据库
开发人员,一名美工,一名前端,一名 Java
部署计划是:
一台服务器,部署和
架构图如下:
应用和数据库的分布式部署
然后网站运行了一段时间,开始盈利了,用户数量也增加了。这时候数据库的数据量还不是很大。
但是,越来越多的用户访问会占用大量的服务器内存和cpu。数据库和应用程序应该分开部署。架构图如下
这样网站就可以运行一段时间了
解耦开发
接下来我们来看看开发问题,但是开发和运维往往是分不开的。由于网站业务的快速发展,我们必须给它添加新的功能,否则将无法发挥,功能也会越来越多的开发者变得越来越相互依赖。以前的开发模式是java程序员从jsp写到dao,全都负责,所以现在有5个java一起开发,每个负责不同的功能,比如用户模块、商品模块、订单模块、交易模块等。 ,那么问题来了
1 Java程序员经常对css做一些调整,写了很多工作,我们使用的是
2 不一定要等到所有模块都开发完成后再上线。在很多情况下,只需要修改一个模块就可以上线。那么代码写在一个项目中,版本控制就变得很困难了。而且,每次修改一个模块的功能,都可能影响到另一个模块的功能,导致项目变得很不稳定。这种情况对于运行中的项目来说是致命的,无限加班也无济于事。痛苦。
解决方案 1(模块化)
这是我多年前想到的解决方案。这么多功能不能合二为一。我指的是一个 java web 项目。至少在开发过程中必须模块化,分离不同的功能。 通过接口调用,如用户模块、应用模块、商品模块、订单模块、交易模块等。不同的人负责开发,那么模块之间如何通信呢?我当时的计划是,每个后端模块都是一个jar包项目。当它们被释放时php大型网站技术架构,它们被标记为一个 jar 包,供其他模块调用。该项目的构建使其从开发到部署更加自动化。基本实现模块化开发,项目发布更加稳定。
模块化的缺点
这个想法就是从那里来的,他们也模块化了不同的功能,但是这种形式有很多缺点:
1 随着时间的推移,每个模块都在不断更新,版本也在不断升级。如果模块 A 依赖于模块 B,则 C
可以理解为A为web前置模块,B为用户模块,C为订单模块
如下图:
如果 B 或 C 发生变化,则 A 有 2 个选择:
1 如果 B 和 C 没有更新,它们仍然可以使用。结果将是不支持最新的 b 和 c 函数。
2 如果选择更新,A需要重新添加新的B或C jar包并进行调试和测试工作,
从接口依赖的角度来看
因为B和C需要查数据库,所以B和C的jar包暴露给A的api太多,没办法很好的控制。对于A项目的开发者来说,接口不清晰,几乎所有的方法都可以调用,使得B和C的变化对上层A产生不可控的影响。
从系统性能来看
由于B和C都需要检查数据库,在A中以jar的形式,占用了A项目中所有服务器的内存、cpu等资源,无法分布式部署。
方案二:模块化分布式部署
那么应该用什么方案,最好是分布式部署,通过网络通信调用A和B,C
由此带来的好处
1 A、B、C实现分布式部署
2 B、C提供清晰的接口供A调用,只要接口不变,B和C修改内部业务逻辑,A不需要重新构建和部署,实现最大解耦,即, 修改部分系统功能php大型网站技术架构,其他模块不受影响或受影响较小,影响范围可控。
下一篇大型网站系统架构演进(二)分布式模块间的通信
目录大型网站系统架构演进