1.分布式系统相关概念
1.1基本概念




1.2 集群和分布式








1.3 架构演进





A是一个微服务。A+DB是一个组件。A可以java,B可以python实现。


2 dubbo
2.1 概述


2.2 dubbo代码
2.2.1 服务提供者的改造-将项目service层对外发布到dubbo
通过dubbo中的service注解,将当前类的方法对外发布,但是需要配置ip,端口,路径到注册中心
dubbo配置过后,service模块中springmvc中的配置文件就不需要了
2.2.2 服务消费者webController的改造
①原本web依赖的service,现在改造后不需要依赖,将对应的依赖插件删除。

②删除后,controller中接口会找不到。

③在web中创建一个service接口,把其变为本地接口

报错消失,但是还有红波浪线,是因为spring的ioc容器中没发现这个service。
④检查dubbo依赖

⑤web模块下spring配置文件加载不需要了,springmvc的留下

⑥spring的@autowired注入注解不需要加了,换成dubbo的@reference远程注入

⑦给reference注解配置访问的地址。

⑧启动service和web

由于不同的主机访问的接口必须同一个名称,因此把接口单独提出来

进行改造,在加一个interface接口模块。在web和service模块加入要依赖的公共模块接口配置

在公共的interface中定义接口,在service模块下实现具体的serviceimpl





3 dubbo高级特性
3.1 dubbo-admin

3.2 序列化

新建一个模块,定义多个类,
dubbo-interface使用dubbo-pojo中的类


服务提供者dubbo-service中实现dubbo-interface中的接口类

web层调用service的接口

项目结构:pojo被interface依赖,interface被service和web依赖,pojo被service和web间接依赖。


3.3 地址缓存
旧的地址可访问,新的不行。

3.4 超时与重试

解决方法

设置3s超时就释放

若在@Reference设置timeout=1000,则1s生效

建议配置在controller中-服务的提供者,而不是配置在服务的调用者reference上。


3.5 多版本






3.6 dubbo负载均衡


把上个接口启动后,然后修改权重再次启动需要修改tomcat和dubbo端口号。

出现两个服务,权重不同

服务调用者加载负载均衡策略
带权重的轮训,如访问四次顺序为:1-2-3-2


3.7 集群容错
1号:第一个机器服务启动,超时1s关闭

2号:修改tomcat和dubbo端口号再次启动

3号:修改端口号,service改为不再超时,即可以成功访问的

启动的三个服务

在服务调用者接口设置失败重试,默认重试两次

启动web

虽然控制台会超时报错,但是会访问成功

其中1号和2号报错,3号成功

再次刷新1.2.3都成功。
其他容错方式。

3.8 服务降级
























