单体架构
在最开始项目的内容和用户量比较少的时候,甚至项目部署在内网不需要外网访问的时候,就用到了下图的单体结构,一台服务器一个数据库就可以使用了。
随着宽带的提升,用户量的不断暴增,一台服务器就出现了瓶颈,接着就出现了服务器集群的架构,一台服务器宕机时,自动切换到另一台服务器,提升了客户体验与稳定性,如下图:
集群后发生的问题
- 用户的请求到底发送到哪台服务器上,如何保证请求平均分发给不同的服务器,从而缓解用户量增加的压力。
- 编写项目时,如果用户登录成功了,将用户的标识Session域中,在搭建集群之后,数据共享问题。
- 针对数据量特别庞大时数据库查询慢的问题。
针对以上问题我们可以通过中间件Nginx负载均衡、Redis内存缓存、ElasticSearch搜素技术进行对应优化,架构升级更新图如下:
垂直架构
上面介绍的单体架构中,项目中的功能模块全部集中在一个项目中,比如说项目有三个主要功能模块,一个是用户管理,一个是商品管理模块,还有一个订单管理模块,那么这三个模块商品管理模块访问压力比较大,我想单独集群这个商品模块,就无法在单体结构上进行集群,因此出现了垂直架构,如下图
分布式架构
随着用户量的不断增加,服务器的压力越来越大,项目分层分模块应运而生,比如前后端分离,这样用户在访问应用时,如果后端服务出问题不影响前端的基础框架的展示(只是数据无),我们也可以针对影响系统瓶颈的service和dao层进行集群部署,分布式架构如下图:
如果你喜欢我的分享,给大家推荐一下我的微信公众号“JAVA学长”,经常会分享一些java高薪技术干货,欢迎来提升java技术;