分布式系统
- 集群:很多人一起,干一样的事
- 一个业务模块,部署在多台服务器上
- 分布式:很多人一起,干不一样的事,不一样的事,合起来是一件大事
- 一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上
- 架构
- 单体架构
- 开发部署方便。小型项目首选
- 启动慢,可靠性差,可伸缩性差,性能低
- 垂直架构
- 重复功能太多
- 分布式架构:在垂直架构的基础上,将公共业务模块抽取出来,作为独立的服务,供其他调用者消费,以实现服务的共享和重用
- 服务提供方一旦产生变更,所有消费方都需要变更
- RPC:远程过程调用
- SOA架构
- 微服务架构
- 单体架构
1.单体架构
2.垂直架构
3.分布式架构
4.SOA架构
5.微服务架构
Dubbo
-
简介
- Dubbo是一个高性能、轻量级的RPC框架
- 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案
-
架构
-
节点角色说明
- Provider:暴露服务的服务提供方
- Container:服务运行容器
- Consumer:调用远程服务的服务消费方
- Registry:服务注册与发现的注册中心
- Monitor:统计服务的调用次数和调用时间的监控中心
dubbo-admin
-
简介
- 是图形化的服务管理页面
- 从注册中心中获取到所有的提供者/消费者进行配置管理
- 具有路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡等管理功能
-
序列化
- dubbo内部已经将序列化和反序列化的过程内部封装了
- 只需在定义pojo类时实现Serializable接口即可
- 一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块
-
地址缓存
-
超时
- 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去
- 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩
- dubbo利用超时机制,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
-
重试
- 设置了超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
- 如果出现网络抖动,则这一次的请求就会失败
- dubbo提供重试机制来避免类似问题的发生
-
多版本
- 灰度发布:当出现新功能时,会让一部分用户先使用新功能,用户反馈没问题时,再将所有用户迁移到新功能
- dubbo中使用version属性来设置和调节同一个接口的不同版本
-
负载均衡
- Random:按权重随机
- RoundRobin:按权重轮询
- LeastActive:最少活跃调动数,相同活跃数的随机
- ConsistentHash
-
集群容错
- Failover Cluster:失败重试,当出现失败,重试其他服务器
- Failfast Cluster:快速失败,只发起一次调用,失败立即报错
- Failsafe Cluster:失败安全,出现异常时,直接忽略
- Failback Cluster:失败自动恢复,后台记录失败请求,定时重发
- Forking Cluster:并行调用多个服务器,只要一个成功即返回
- Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错
-
服务降级
- mock=force:return null:消费方对该服务的方法调用都直接返回null值,不发起远程调用
- mock=fail:return null:表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常