本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 分布式发展演变
单一应用架构→垂直应用架构→分布式服务架构→流动计算架构
2. RPC
- 定义:RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
- 核心模块:通讯,序列化
- 基本原理:
3. Dubbo
-
核心能力:面向接口远程调用、智能容错和负载均衡、服务注册和发现
服务提供者:暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者:基于软负载均衡算法,选一台提供者进行调用,调用失败,再选另一台调用 监控中心:提供者和消费者定时每分钟发送一次数据到监控中心 注册中心:返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
-
工作原理
安装zookeeper
- 下载地址:archive.apache.org/dist/zookee…
- 修改zoo.cfg配置文件:将conf下的zoo_sample.cfg复制一份改名为zoo.cfg dataDir=./ 临时数据存储的目录(可写相对路径) clientPort=2181 zookeeper的端口号
- 运行:zkServer.cmd
安装dubbo管理控制台
- 下载地址:github.com/apache/dubb…
- maven安装:进入dubbo-admin目录,cmd下输入
mvn clean package - 启动:在生成的target目录下cmd,输入
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar - 验证:浏览器输入localhost:7001,账号密码默认都为root(可在application.properties查看端口号和密码)
dubbo配置
- 配置原则:JVM启动 -D > XML配置 > properties
- 重试次数reties:一般与timeout配合使用,当调用服务失败时,再接着调用,不包含第一次(设置为2,一共执行3次)
- 超时时间timeout:设置调用服务端响应的超时时间 / 连接zookeeper的响应时间
- 配置覆盖原则:方法级别>引用级别>统一配置,消费者>提供者
- 多版本version:在低压力时间段,先升级一半提供者为新版本,再将所有消费者升级为新版本,然后将剩下的一半提供者升级为新版本
4. 高可用
zookeeper注册中心宕机,还可以消费dubbo暴露的服务
- 数据库宕掉hou,注册中心仍然能通过缓存提供服务列表查询,但不能注册新服务
- 注册中心对等集群,任何一台宕掉后,将自动切换到另一台
- 注册中心全部宕掉后,提供者和消费者仍能通过本地缓存进行通讯
- 服务提供者无状态,任意一台宕掉后,不影响使用
- 服务提供者全部宕掉后,服务消费者无法使用,并无限次重连等待服务提供者恢复
5. 负载均衡(Load Balance)
- 负载均衡策略: 随机(默认) 轮询 最少活跃调用数:慢的提供者接收更少的请求 一致性hash:相同参数的请求总是发到同一个提供者
6. 服务降级
- 定义:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
- 向注册中心写入动态配置覆盖策略
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
- 应用: 1.消费者调用提供者的方法都直接返回null值,不发起远程调用 2.满足某个条件下,调用失败后返回null
7. 集群容错
- 定义:当集群调用失败时,dubbo提供了多种容错方式
- Failover Cluster 失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。
- Failfast Cluster 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
- Failsafe Cluster 失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
- Failback Cluster 失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
- Forking Cluster 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
- Broadcast Cluster 广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。
- 集群模式配置
按照以下示例在服务提供方和消费方配置集群模式
<dubbo:service cluster="failsafe" />或<dubbo:reference cluster="failsafe" />