2021-10-06----项目的拆分

项目拆分

  • 项目拆分
    • 拆分逻辑分为两种
  • 横向拆分
  • 纵向拆分
    • 介绍
    • 开发集中的问题
    • 功能强耦合
    • 纵向拆分结构需要考虑的问题
  • 纵向拆分实现AISE的拆分效果
    • 规划一下系统架构
    • 整理搭建环境
      • 系统之间的通信
      • SOA系统架构
    • 整体架构的变化

项目拆分

一个项目,如果功能复杂,很难一个人开发完,肯定要多个人开发,项目是要进行拆分,将不同的功能拆分出来的模块给不同的人员进行开发

拆分逻辑分为两种

  • 横向拆分
  • 纵向拆分

横向拆分

web应用中,将项目的开发根据不同的层次,拆分给多个人,并行完成,最终整合成一个完整的应用进行发布使用—只能解决多人协作开发,不能解决项目的单体结构,这种拆分方式叫做横向拆分。

拆分后,项目最终将所有功能集中在同一个应用中运行,所以没有直接解决单体项目的问题。

纵向拆分

介绍

web应用中,存在多个复杂的功能,如(教师,专业,教室,课程,人力,实验),安装功能业务将项目拆分成多个独立运行的web应用—将功能分开到多个web应用中,这种拆分方式就是纵向拆分。

开发集中的问题

某个功能被压垮,不会导致其他的瘫痪,正常访问(双十一,订单系统日交订单可能失败,但是能否正常登录,能否正常查询商品,能否正常将商品添加到购物车)

功能强耦合

按照功能业务进行拆分,管理订单的只关心订单逻辑,管理用户的只关心用户逻辑,之间的交互可以接口访问,相互之间没有任何的业务窜差,不需要开发订单的人去关心积分的逻辑。

纵向拆分结构需要考虑的问题

由于系统被拆分成多个独立的运行应用,原有的相互交换数据逻辑,现在就变了系统相互交换数据的逻辑。

纵向拆分实现AISE的拆分效果

规划一下系统架构

将业务功能拆分独立,将代码规划整理。

  • 业务功能
    将业务功能分清楚,就能直到最终要拆分成多少个独立系统
  • 代码功能
    • 封装数据对象bean
    • 工具
    • 异常处理逻辑

整理搭建环境

  • 父工程
    • pom文件资源统一
      • 继承:springboot
      • 依赖管理版本
        • dependencyManagement

系统之间的通信

在原有的单体架构中,studentService直接注入了teacherMapper,单体架构容器spring同一个,对象可以相互注入—功能之间相互调用,拆分出来的系统student依然需要调用teacher的逻辑,就不能使用注入功能,只能将其砍成系统调用通信,可以引入通信协议http封装的对象
RestTemplate

  • 学生系统d调用教室系统
    学生注册时,验证一下教师手机号是否和学生注册相同
  • 确定调用结构,学生调用老师

    修改代码
    教室系统代码:提供学生调用的接口

SOA系统架构

SOA架构属于面向服务架构,是单体架构和微服务架构之间的一个状态。
当前的AISE系统架构+ngnix使用,可以外接访问一个人分布式web应用集群


面向服务架构SOA中,当前结构典型的中心化服务管理将每一个拆分出来的系统当成一个服务,nginx是负责管理服务的(集群,负载均衡计算),并发访问也是通过nginx进入的。

  • 如果系统超高并发,超高用户量容器产生2个问题
    • 服务访问雪崩
      nginx作为入口服务器,并发跟随需求上涨,搭建成集群,处理高并发,但是当前SOA架构师集群管理,中心化服务管理,nginx一旦宕机,就会访问雪崩,最终导致集群瘫痪。
  • 服务管理成本升高
    一旦搭建成集群,学过容器(搭建,扩容,缩容速度极快),对于nginx.conf这种维护了集群信息的配置文件的修改工作,就想当复杂。
    除此之外,监控,追踪,链路,网关等功能也需要在SOA中引入最终整日架构变得想当臃肿。

整体架构的变化