先区分一下分布式和集群的概念

分布式:指在多台不同的服务器上部署不同的服务模块,通过远程调用协同工,对外提供服务。
集群:指在多台不同的服务器上部署相同应用或服务模块,构成集群,通过负载均衡设备对外提供服务。

分布式系统的优点

与集中式相比

  • 经济:微处理机提供比大型主机更好的性价比
  • 速度:分布式系统总的计算能力比单个大型主机强
  • 固有分布性:一些应用涉及空间上分散的机器
  • 可靠性:如果一个机器崩溃,整个系统还可以运行
  • 渐增:计算能力可以逐渐增强

与独立PC比

  • 数据共享:允许多个用户访问一个数据库
  • 设备共享:允许多个用户共享昂贵的外围设备
  • 通信:使得通信更加容易
  • 灵活性:用最有效的方式将工作符合分配到可用机器上

分布式系统的缺点

  • 软件:分布式系统开发的软件很少
  • 网络:网络可能饱和
  • 安全:容易造成对保密数据的访问

Dubbo

三个阶段

  • 初始化阶段
    部署在Container的provider启动后向服务中心Registry发布并注册自己的服务,客户端Consumer初始化时即向Registry订阅自己想要的服务,同时Registry对Consumer保持着一个长连接,当订阅的服务新增或节点减少时,会通知Consumer更新(异步更新),如此,Consumer便有了Provider的多有实时信息,便可以发起服务调用了。
  • invoke阶段
    客户端Consumer从获得的的所有Provider列表中通过负载均衡策略选出最适合调用的服务提供者Provider并发起同步调用。
  • Monitor阶段
    Consumer和Provider通过异步调用方式向控制中心上报自己的需要被监控的数据。

分布式系统框架中的基础设施

  • CI/CD平台:持续集成/持续交付,持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的类生产环境,即就是开发代码过程中持续的提交,然后进行持续的代码扫描,单元测试,编译构建,完成如上流水线后迅速的部署到目标环境上允许的过程。
  • ConfigCenter:即配置中心,为各应用的所有环境提供了一个中心化的外部配置,为服务端和客户端提供了分布式系统的外部化配置支持。
  • Web Portal/IDE:集成应用配置,管理平台的统一入口和开发IDE。
  • Deploy Center:部署中心,所有的服务,无论是公共SAAS服务还是业务服务,开发完成后都需部署到对应的区域和环境上,部署中心提供了发布应用包的平台供开发者进行发包部署操作,或提供接口供CI/CD的接入。
  • 公共SAAS:即整个分布式系统中公用的服务,常见的有权限服务,数据字典,国际化等
  • 服务注册中心:服务注册中心,是分布式服务系统中的一个重要组成模块,管理Provider的Manager,在实际的运行环境中,服务注册中心Registry被动通知或Consumer主动询问,在Provider有节点宕机或新增节点时,客户端也可实时感知到,从而避免了某个Provider被无限调用或是无限闲置
  • Maven,Git仓库管理:Maven仓库用来存储和管理开发和部署应用过程中所需的JAR或ZIP文件,Git用来存储开发者代码,提供了代码合成,分支管理等功能。
  • 日志中心:服务运行过程中,不可避免的会出现各种问题,如何快速定位并分析清楚这些问题的根因,并提出有效的解决方案,日志在这其中扮演了很重要的角色,日志中心通过收集Consumer或Provider产生的日志,为用户查询下载日志提供了可视化平台。
  • 监控中心:接收来自Consumer和Provider异步上报的性能监控数据,对有风险的节点发出告警
  • 事件中心:事件中心是高度可缩放的数据流式处理平台和事件引入服务,可以处理和存储分布式软件和设备生成的事件、数据或遥测

Dubbo集群容错 缺省为failover

  • Failover Cluster 失败时自动切换,重试其他服务器
  • Failfast Cluster 快速失败,只发起一次调用,失败立即报错
  • Failsafe Cluster 失败安全,出现异常时,直接忽略
  • Failback Cluster 失败自动恢复,后台记录失败请求,定时重发
  • Forking Cluster 并行调用多个服务器,只要有一个成功立即返回
  • Broadcast Cluster 广播调用所有提供者,逐个调用,任意一台报错就报错