一、分布式架构

1. 项目的主体结构

  • 实现业务功能的工程模块
  • 为了应对业务功能之外的需求,压力给项目中增加的中间件等其他系统
  • 为了让整个项目能够顺畅,高效的运行,需要把业务功能和中间间以及其他系统有效的整合起来。

2. 单一架构( all in one )

一个工程——一个war包——运行在一个tomcat中
演化:
水平拆分:把原来一个工程拆分成为多个模块分别进行开发,一定程度上提高了模块程度

未命名图片.png
垂直拆分:按照业务功能把项目拆分成多个模块工程,但是由于彼此之间不存在模块之间的调用。所以还不能算作一个真正的分布式架构,相当于把一个项目拆分成多个小项目分别开发
未命名图片.png

3. 互联网时代的新挑战

  • 高可拓

项目设计架构的时候要考虑到功能的持续更新

  • 高性能

系统处理一个请求的时间要尽量变短

  • 高并发

用户访问量非常大时,会增加系统的并发压力

4. 分布式架构

一个项目拆分成多个模块工程,每一个模块工程都是一个war/jar包运行在自己的tomcat中,模块之间可以通过网络互相调用
未命名图片.png

5. 方法的远程调用

本地调用:
在同一个项目内部不经过网络进行方法的调用,不管是我们自己声明的还是第三方jar包中的方法都算本地调用
远程调用:
未命名图片.png

6. 思想

  • SOA
  • Service Oriented Architecture 面向服务的架构
  • 在整个系统中,把相同的功能抽取出来作为一个服务,供系统中的其他模块调用,提高代码复用性

未命名图片.png

7. 微服务

SOA理念的进一步发展,在SOA上面进一步的发展

8. 技术演进

  1. WebService
    1. 解决应用程序之间的跨平台访问问题。基于 SOAP/WSDL 协议,让应用程序之 间可以进行远程通信
  2. Dubbo + Zookeeper
    1. Dubbo:基于 RPC 的远程过程调用框架。
    2. Zookeeper:基于树形目录结构、异步通知机制的注册中心。
  3. spring boot + spring cloud

    1. SpringBoot:开发具体微服务,使用“场景启动器(starter)”快速整合第三 方中间件
    2. SpringCloud:提供的微服务架构整体管理的一站式解决方案
      1. Eureka:注册中心
      2. Ribbon:客户端负载均衡
      3. Feign:远程接口的声明式调用
      4. Hystrix:服务的熔断、降级、监控
      5. Zuul:网关

        9. 相关概念

  4. 接口

一个以 “接口”为功能代表的分布式环境下的服务模块
未命名图片.png

  1. 注册中心

远程接口的声明式调用之所以能够实现,就是因为有Dubbo或Feign这样的框架把服务的具体信息存储了注册中心,对程序员在上层进行的具体代码编写全部屏蔽 细节

10. 分布式架构优缺点

  • 优点
    1. 模块化程度更高,有利于分工
    2. 有利于提升项目性能
      1. 整体性能(整个项目中每个模块都可以独占一个tomcat)
      2. 局部提升(对项目进行了拆分,可以有针对性的对项目中局部模块进行专门的优化)
        • 纵向:给当前模块所在的服务器增加硬件资源
        • 横向:给当前模块配置集群
  • 缺点

    1. 结构复杂
      • 调用关系复杂
      • 部署复杂
    2. 数据不一致问题
      • session不一致
      • 分布式事务的问题

        11. 分布式和集群

  • 相同点:

    • 都需要使用到多台服务器
  • 不同点:

    • 分布式:每台服务器上运行的模块不同 — 异构
    • 集群:每台服务器运行模块相同 — 同构


    分布式就是一件事情分开做,集群就是大家共同做一件事