分布式架构学习(一)

231 阅读3分钟

一、概念

一种架构体系,是为了实现以下目标

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

二、和单一架构的对比

2.1 单一架构

所有的业务功能都是通过一个工程内的,最终打包成一个文件,部署到一个单机服务器中运行

单一架构的演进

  1. 水平拆分

    将一个工程拆拆分成多个模块分别进行开发,最终部署的工程依赖于这些实现了业务逻辑的模块

    一定程度上提高了项目的模块化程度

image.png
2. 垂直拆分

将业务功能拆分成多个模块化工程,不同的业务模块不会进行互相调用,所以不算是一个真正的分布式架构

相当于对大工程拆分成小工程进行开发(分治思想)

image.png

三、分布式架构的目标

3.1 高可扩

项目的设计架构需要考虑到功能的持续更新。能够向后兼容

3.2 高性能

系统处理请求的时间尽可能的端,减少用户的等待时间,优化用户体验

3.3 高并发

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

四、分布式思想

4.1 方法远程调用(RMI)

4.1.1 本地调用

在同一个项目内进行调用,包括对自己定义的方法和第三方jar内的方法进行调用

4.1.2 远程调用

通过网络去调用另外一个方法,将方法的参数通过网络传递过去,得到的执行结果作为响应返回

4.1.3 意义

对内:实现分布式架构

对外:调用第三方接口

  • 短信发送
  • 物流查询
  • 支付功能
  • 。。。

4.2 SOA

Service Oriented Architecture(面向服务的架构)

将系统中,功能相同的代码抽取成一个单独的服务,用于系统提供给系统中其他的模块进行调用

4.3 微服务

Microservice,对SOA的进一步深化,即将抽取出的通用服务提供者进一步的优化,实现独立、可部署的的特性

4.4 技术的演进

4.4.1 WebService

解决应用程序之间的跨平台访问问题。基于SOAP/WSDL协议,让应用程序之间可以进行远程通信。

4.4.2 Dubbo+Zookeeper

Dubbo:基于RPC远程过程调用的框架

Zookeeper:基于树形目录结构、异步通知机制的注册中心

4.4.3 SpringBoot+SpringCloud

SpringBoot:开发具体的微服务,使用“场景启动器”快速整合第三方中间件

SpringCloud:提供基本的微服务架构整体管理的解决方案

Eureka:注册中心

Ribbon:客户端(消费者)负载均衡

Feign:远程接口的声明式调用

Hystrix:服务的熔断、降级、监控

Zuul:网关

五、分布式架构的优缺点

5.1 优点

  • 模块化程度提高,有利于分工

  • 有利于提升项目性能

    • 整体提升

      整个项目中每个模块都可以独占一台服务器,整个项目分配到的服务资源更多

    • 局部提升

      由于对于项目进行了拆分,可以对项目中的局部模块进行专门的优化,提升性能

    纵向:模块的服务器硬件资源增加

    横向:给模块配置集群,通过数量提升性能

5.2 缺点

  • 缺点复杂

    • 调用关系复杂
    • 部署复杂
  • 数据不一致问题

    • Session 不一致
    • 分布式事务问题