分布式框架笔记

转自:http://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc

Dubbo

是一种Java RPC框架
供了三大核心能力

  1. :面向接口的远程方法调用,
  2. 智能容错和负载均衡, 以及服务自动注册和发现 智能容错和负载均衡,
  3. 以及服务自动注册和发现 以及服务自动注册和发现

RPC(Remote Procedure Call): 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况

SpringCloud

版本
Finchley 与 Spring Boot 2.0.x, 兼容,不支持 Spring Boot 1.5.x.
Dalston 和 Edgware 与 Spring Boot 1.5.x, 兼容,不支持 Spring Boot 2.0.x.
Camden 是构建在 Spring Boot 1.4.x, 之上,但也支持 1.5.x.
Brixton 是构建在 Spring Boot 1.3.x, 之上,但也支持 1.4.x.
Angel 是构建在 Spring Boot 1.2.x, 之上,但也兼容 Spring Boot 1.3.x.
Angel 和 Brixton 两个版本已于2017年7月终止不再进行维护。

通讯协议
使用HTTP协议的REST API。

服务依赖方式
服务提供方和服务消费方通过json方式交互,因此只需要定义好相关json字段即可,消费方和提供方无接口依赖。通过注解方式来实现服务配置,对于程序有一定入侵。

组件功能

服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理…

组件运行过程:

图片来自:https://www.processon.com/view/5b16331be4b03f9d250f3183?fromnew=1
在这里插入图片描述

  1. 所有请求都统一通过 API 网关 Zuul Gateway([zu:l] )来访问内部服务,主要功能是路由转发、权限校验、限流控制 比如/api/user 转发到到user服务,还能过滤,做一些安全验证。

  2. 网关接收到请求后,从注册中心 Eureka ([juˈri:kə]) 获取可用服务。

  3. Ribbon([ˈrɪbən])进行均衡负载后,分发到后端的具体实例。

  4. 微服务之间通过 Feign([feɪn])进行通信处理业务。

  5. Hystrix ([hɪst’rɪks])断路器:如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。当对特定的服务的调用的不可用达到一个阀值(Hystric 是5秒20次) 断路器将会被打开。

业务部署方式相同,都需要前置一个网关来隔绝外部直接调用原子服务的风险。Dubbo需要自己开发一套API 网关,而Spring Cloud则可以通过Zuul配置即可完成网关定制。使用方式上Spring Cloud略胜一筹。

微服务架构

在这里插入图片描述

  1. 网关集群:数据的聚合、实现对接入客户端的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制等
  2. 业务集群:一般情况下移动端访问和浏览器访问的网关需要隔离,防止业务耦合
  3. Local Cache:由于客户端访问业务可能需要调用多个服务聚合,所以本地缓存有效的降低了服务调用的频次,同时也提示了访问速度。本地缓存一般使用自动过期方式,业务场景中允许有一定的数据延时。
  4. 服务层:原子服务层,实现基础的增删改查功能,如果需要依赖其他服务需要在Service层主动调用
  5. Remote Cache:访问DB前置一层分布式缓存,减少DB交互次数,提升系统的TPS
  6. DAL:数据访问层,如果单表数据量过大则需要通过DAL层做数据的分库分表处理。
  7. MQ:消息队列用来解耦服务之间的依赖,异步调用可以通过MQ的方式来执行
  8. 数据库主从:服务化过程中毕竟的阶段,用来提升系统的TPS
注意事项:
  1. 服务启动方式建议使用jar方式启动,启动速度快,更容易监控
  2. 缓存、缓存、缓存,系统中能使用缓存的地方尽量使用缓存,通过合理的使用缓存可以有效的提高系统的TPS
  3. 服务拆分要合理,尽量避免因服务拆分而导致的服务循环依赖
  4. 合理的设置线程池,避免设置过大或者过小导致系统异常
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值