【架构演进系列01】网站架构演进历程

504 阅读4分钟

1. B/S架构介绍

B/S结构(Browser/Server结构)即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本。

2. 单体架构

从图中可以看出,所有的代码、配置文件都部署在一块,数据库是否与服务器在一台主机上并不影响该架构被称为单体架构。

2.1 优缺点

  1. 优点
    1. 易于开发:所有人能看到所有的代码;
    2. 易于部署:一个项目打成一个软件包,然后部署到Servlet容器中;
    3. 易于测试:部署后启动,全部流程都可以测试;
  2. 缺点
    1. 开发成本高:代码耦合,即使通过package来切分模块,各模块间还是会有直接互相应用的情况;
    2. 代码维护成本:代码不断迭代、变更,即使有开发文档,但由于代码耦合问题,改一处代码仍然还是会影响多处;
    3. 部署成本、测试成本逐渐升高:随着该项目中的代码逐渐增多,部署所需要的时间也越来越久;
    4. 可伸缩性差:水平扩展只能对整个系统进行扩展,无法针对某个功能模块进行扩展;
    5. 开发效率低:随着代码的逐渐增多,代码的编译时间也会越来越久,如果用笔记本进行编译甚至会出现内存不足。
  3. 适用场景
    1. 对于一个初创团队,在创立初期需要迅速完成0到1的开发工作,抓住时机实现产品最短时间推向市场,可以省去各种额外的设计,直接上手工作,争取时间是非常有意义的。
    2. 较小规模的系统,特别是需要退出原型实现,以质量换速度的场景。

2.2 优化思路

  1. MVC:代码工程根据MVC原则进行代码模块的切分
  2. 应用服务器、文件服务器与数据库分开部署
  3. 前后分离,即使是单体架构依然可以进行前后分离
  4. 容器部署,自动化部署可以减少错误率和人工工作
  5. 缓存机制,区分热数据、冷数据减少数据库压力
  6. 基于maven的modules模块开发开发

3. 单体集群架构

在单体架构下,用户数量逐渐增长,为减少服务器压力,会使用负载均衡加集群部署的方式来减缓并发压力。

在这种情况下,通常数据库会成为数据吞吐的瓶颈,可考虑数据库读写分离、分库分表等技术来搭建数据库集群。

3.1 优缺点

由于当前的单体集群项目仍然是由单体项目演变而来,其本质仍然还是单体架构,这导致单体架构的优缺点被单体集群架构继承了下来,同时还有以下优缺点:

  1. 优点
    1. 支持高并发。
  2. 缺点
    1. 部署繁琐;
    2. 不能根据某一业务进行集群部署,一些像用户服务、权限控制不常用的业务会增加整个项目的资源;

3.2 优化思路

  1. 负载均衡:Nginx
  2. 在数据量接近千万时,数据库应该进行读写分离、分库分表:MyCAT
  3. 分布式数据库全局唯一主键(分库分表虽然用于数据库集群,但本质还是分布式数据库)
  4. 搜索引擎缓解数据库搜索压力

4. 服务拆分与集群技术

根据业务的不同进行拆分,可以对某一业务进行水平扩展,同时缩小了单个代码工程的大小

4.1 优缺点

  1. 优点
    1. 单个服务都很小,能够根据实际访问量按需扩展
    2. 微服务能够被小团队独立开发,便于理解和维护
    3. 可伸缩弹性架构,当服务器压力过高可以动态注册服务,分摊服务器压力
    4. 松耦合,无论是开发、部署、测试都是相对独立的
    5. 微服务可以使用不同的语言开发
    6. 每个微服务都有自己的数据库,数据库压力也被减少了
    7. 工作分工明确,减少重复开发
  2. 缺点
    1. 请求链路变长,增加了排查错误的难度
    2. 中心化的微服务架构可能带来某台服务器宕机或异常导致整个架构瘫痪

4.2 优化思路

  1. 去中心化微服务
  2. 虽然SpringCloud支持多语言,但仍然建议只使用Java作为服务器语言
  3. 网关、注册中心是微服务重要的一环,是提高可用性、灵活性、可扩展、可维护以及安全性的关键技术