对于一个大型网站,主要有以下几个特征:
- 支撑海量数据
- 非常高的访问量
架构演变
在大型网站中,其最核心的功能就是 计算 和 存储 。因此系统演变过程也主要围绕这两点进行 。
1 单机系统
在网站刚刚起步时,数据量、访问量都非常小,通常情况下,只需一台应用服务器就可以了 。
1.1 单机部署方案
起步时,我们把所有资源全部打包到部署文件中(如 XXX.war),其中包括
- class 文件、依赖 jar等;
- js、css、图片等静态资源;
- 对于用户上传文件的场景,直接在服务器上新建一个目录,将上传的文件放置在目录即可 。
文章插图
该部署策略有以下几个特征:
- 用户通过浏览器直接与 JAVA 应用程序进行交互(通常是 Tomcat);
- Java 应用程序通过 JDBC 与本机的数据库进行交互(如 MySQL);
- 如果存在文件读写的需求,Java 应用程序通过文件接口直接对文件进行操作 。
是的,Tomcat 这种 Web 容器对链接的保持能力比较弱,当存在大量链接时,性能下降很快 。同时,Tomcat 并不擅长静态资源的处理,对此,我们可以引入 Nginx,以缓解 Tomcat 的压力 。
1.2 单机部署方案进阶
我们在单机部署基础上,添加 Nginx,也就有了进阶方案 。
文章插图
该方案存在以下特征:
- 用户不在直接与 Java 应用程序进行交互,而是与 Nginx 进行交互;
- Tomcat 挂在 Nginx 后,对动态请求进行处理;
- 对于静态资源的访问,通过 Nginx 直接访问文件系统;
- 当有文件写需求时,通过 Java 应用程序直接写入磁盘 。
对于静态资源的处理,相对简单,只是简单的文件读写 。而,动态请求(也就是我们的业务承载者)会随着业务的发展越来越复杂 。
2 动静分离部署方案
由于 静态请求 与 动态请求 采用不同的处理策略,我们可以将其进行分离 。
文章插图
该部署方案存在以下特性:
- 通过不同的域名对 动态请求 和 静态请求 进行分离;
- 新增 静态资源服务器,专门处理静态请求,并在服务器上部署 Java 应用程序,处理文件写需求;Nginx 只负责文件的读操作;
- 对 动态请求 进行独立部署,应用程序将文件的写请求转发到静态服务器进行处理;
答案就是云服务,比如阿里云的 OSS 提供静态资源存储服务 。CDN 提供访问加速服务,两者结合使用,就得到了一个海量容量并且性能超强的静态资源服务器(集群) 。
结合 OSS 和 CDN,静态请求不会成为系统的瓶颈,因此,接下来只对动态请求进行讨论 。
随着系统访问量的增加,动态请求出现了明显的瓶颈 。
3 应用集群化部署
由于所有的动态请求全部由一台应用服务器进行处理,当访问量上升时,这台服务就成了系统的瓶颈 。此时,我们需要将系统中的多个组件部署到不同的服务器上 。
文章插图
新部署有以下特征:
- 对 Nginx 进行独立部署,形成 Web 集群;
- 对 Java 应用程序进行独立部署,形成 应用集群;
- 对 数据库 进行独立部署;
- Web 集群 与 应用集群 间通过 HTTP 协议进行交互;
- 应用集群 与 数据库 间通过 JDBC 协议进行交互 。
推荐阅读
- 5G有多“香”?工业互联网告诉你
- 每秒20W次并发分词检索,架构如何设计?
- MySql基础架构以及SQL语句执行流程
- 架构选型之Nodejs与Java
- 为什么会产生微服务架构,原来是这些原因
- 11条MySQL规范,你知道的有几个? Java架构师追风 2019-08-28 16:36:08
- arm架构解释
- 架构设计的五个核心要素?
- 微服务架构之网关层Zuul剖析
- 抖音直播带货流程与组织架构