dubbo

什么是RPC

RPC就是Remote Procedure Call,远程过程调用,它相对应的是本地过程调用

RPC和HTTP

 HTTP只是传输协议,协议只是规范了一定的交流格式

RPC对比的是本地调用过程,是用来作用分布式系统之间通信,它可以用HTTP来传输,也可以基于TCP自定义协议传输

dubbo的执行流程

springcloud的rpc原理 springcloud实现rpc调用_springcloud的rpc原理

节点

角色说明

Consumer

需要调用远程服务的服务消费方

Registry

注册中心

Provider

服务提供方

Container

服务运行的容器

Monitor

监控中心

1.服务器提供者Provider启动然后向注册中心注册自己所能提供的服务

2.服务消费者Consunmer启动向注册中心订阅自己所需的服务

3.注册中心将提供者信息通知给Consumer,

4.Consumer获取到提供者的地址,因此可以通过负载均衡选择一个Provider直接调用

5.之后服务提供方数据变更的话注册中心会把变更推送给服务消费者

6.服务提供者和消费者都会在内存中记录着调用的次数和时间,然后定时发送统计到监控中心

spring cluod

spring cloud的优缺点

优点:

1.产出与spring大家族可以保证后续的更新,完善

2.spring cloud为微服务架构提供了非常完整的支持,例如配置管理,服务发现,断路器,微服务网关等

3.耦合度比较低

4.微服务时跨平台的适用于任何一种语言开发

缺点:

1.微服务过多,治理成本高,不利于维护系统

2.分布式系统开发成本高

主要项目

1.spring Cloud Config

集中配置管理工具,分布式系统中统一的外部配置管理

2.spring cloud Netflix

开源组件集成,包括

        Eureka:服务治理

        Ribbon:负载均衡

        Hystrix:服务容错,实现了断路器模式

        Feign:声明式服务调用

        Zuul:API网关,对请求提供路由及过滤功能

3.spring cloud Bus

用于传播集群状态变化的消息总线,使用轻量级消息代理连接分布式系统中的节点,可以用来动态刷新集群中的服务配置

4.spring cloud Security

安全工具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进行支持

5.spring cloud Task

用于快速构建短暂,有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性

6.spring cloud Gateway

API网关组件,对请求提供路由及过滤功能

spring cloud 和dubbo的区别  

1.服务调用方式dubbo时RPC     springcloud时 Rest API

2.注册中心  doubbo是zookeeper  spring cloud是eureka,也可以是zookeeper

3.spring cloud 还有服务网关,分布式配置,服务跟踪等服务,这些dubbo没有

Eureka和zookeeper的区别

1.zookeeper中的节点服务器挂了就要选举,必须有一台是主其他是从

2.Euraka各个系欸但是平等关系,服务器挂了没关系,只要有一台Eureka就可以保证服务可用.如果查询到的数据并不是最新的,就是因为Eureka的自我自我保护机制导致的

3.Eureka本身是一个工程,zookeeper只是一个进程

4.Eureka可以很好的应对网络系统故障导致分节点失去联系的情况,而不像zookeeper一样使得整个注册系统瘫痪

4.在CAP机制上面 C:一致性 A:可用性  P分区容错性

        Eureka保证的A:一致性和P分区容错性

        zookeeper保证的是C:一致性和P:分区容错性

Dubbo

Spring Cloud

服务注册中心      

Zookeeper

Spring Cloud Netflix Eureka

服务调用方式

RPC          

REST API

服务监控

Dubbo-monitor

Spring Boot Admin

断路器

不完善

Spring Cloud Netflix Hystrix

服务网关


Spring Cloud Netflix Zuul

分布式配置


Spring Cloud Config

服务跟踪


Spring Cloud Sleuth

消息总线


Spring Cloud Bus

数据流


Spring Cloud Stream

批量任务


Spring Cloud Task

......

...

......