11 2022 档案
摘要:服务雪崩 1、扇出:多个微服务之间调用 2、雪崩 (1)如果扇出的链路上,某个微服务的调用响应时间过长或者不可用,对某个微服务的调用就会占用越来越多的系统资源,进而引起系统崩溃 (2)对于高流量的应用,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和,还可能导致服务之间的延迟增加,系统
阅读全文
摘要:概述 1、Feign 是一个声明式的网络服务客户端,它使编写 Web 服务客户端更容易 2、要使用 Feign,需要创建一个接口并对其添加注解 3、它有可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解 4、Feign 还支持可插拔的编码器和解码器 5、Spring Cloud 增加对
阅读全文
摘要:Spring Cloud Ribbon 1、基于 Netflix Ribbon 实现的一套客户端负载均衡的工具 2、Ribbon 是 Netflix 发布的开源项目,提供客户端的软件负载均衡算法和服务调用 3、Ribbon 客户端组件提供一系列完善的配置项,如:连接超时,重试等 对比 1、Ribbo
阅读全文
摘要:CAP 1、在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得 (1)一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值,即所有节点访问同一份最新的数据副本 (2)可用性(A
阅读全文
摘要:概述 1、Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发 2、Consul 提供服务发现、服务网格、流量管理、网络基础设施设备的自动更新,可以在单个 Consul 部署中单独或一起使用这些功能 安装 1、Windows (1)下载对应版本压缩包
阅读全文
摘要:bin 目录 1、这个目录包含的脚本可以方便地访问(特别是 classpath)到 ZooKeeper 服务器和命令行客户端 (1)以 .sh 结尾的文件与 unix 和 cygwin 兼容 (2)以 .cmd 结尾的文件与 msdos / windows 兼容 2、zkCleanup.sh:清理
阅读全文
摘要:服务治理 1、Spring Cloud 封装 Netflix 公司开发的 Eureka 模块来实现服务治理 2、传统 RPC 框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理 3、作用:管理服务与服务之间依赖关系,可以实现服务发现、注册、调用、负载均衡、容错等 服务
阅读全文
摘要:Spring Cloud 1、分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体 2、为开发者提供了快速构建分布式系统中一些常见模式的工具(如:配置管理、服务发现、断路器、智能路由、微代理、控制总线) 3、分布式系统的协调导致了锅炉板模式,使用 Spring Cloud,开发者可以快
阅读全文
摘要:整体设计 1、图例说明 (1)图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口 (2)图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为
阅读全文
摘要:启动时检查 1、特性说明 (1)Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true" (2)可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必
阅读全文
摘要:配置组件 1、为了更好地管理各种配置,Dubbo 抽象了一套结构化的配置组件,各组件总体以用途划分,分别控制不同作用域的行为 2、从实现原理层面,最终 Dubbo 所有的配置项都会被组装到 URL 中,以 URL 为载体在后续的启动、RPC 调用过程中传递,进而控制框架行为 3、service 与
阅读全文
摘要:Windows 安装 Zookeeper 1、下载并解压 Zookeeper 2、复制 conf 下的 zoo_sample.cfg,改名为 zoo.cfg (1)dataDir=./:临时数据存储的目录,相对路径 / 绝对路径 (2)clientPort=2181:Zookeeper 端口号 3、
阅读全文
摘要:《分布式系统原理与范型》定义 1、分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统 2、分布式系统(distributed system)是建立在网络之上的软件系统 发展 1、单一应用架构 (1)当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本 (
阅读全文
摘要:AbstractBootstrap public abstract class AbstractBootstrap<B extends AbstractBootstrap<B,C>,C extends Channel> extends Object implements Cloneable 1、辅助
阅读全文
摘要:启动流程 // Netty 使用 NioEventLoopGroup(NIO Boss 线程)来封装线程和 Selector Selector selector = Selector.open(); // 创建 NioServerSocketChannel,同时会初始化它关联的 handler,以及
阅读全文
摘要:连接假死 1、原因 (1)网络设备出现故障,例如:网卡,机房等,导致底层 TCP 连接已经断开,但应用程序没有感知,仍然占用资源 (2)公网网络不稳定,出现丢包,如果连续出现丢包,客户端无法发送数据,服务端无法接收数据,消耗资源 (3)应用程序线程阻塞,无法进行数据读写 2、问题 (1)假死连接占用
阅读全文
摘要:HttpServerCodec public final class HttpServerCodec extends CombinedChannelDuplexHandler<HttpRequestDecoder,HttpResponseEncoder> implements HttpServerU
阅读全文
摘要:粘包原因 1、应用层:接收方 ByteBuf 设置太大(Netty 默认 1024) 2、传输层:滑动窗口中缓冲多个报文 3、Nagle 算法 半包原因 1、应用层:接收方 ByteBuf 小于实际发送数据量 2、传输层 (1)接收方窗口中无法容纳发送方的全部报文,接收最后剩余部分,接收窗口仍有容量
阅读全文
摘要:创建 1、ByteBufAllocator (1)实现类负责分配缓冲区,这个接口的实现应该是线程安全的 (2)默认实现 ByteBufAllocator DEFAULT = ByteBufUtil.DEFAULT_ALLOCATOR; static final ByteBufAllocator DE
阅读全文
摘要:ChannelHandler public interface ChannelHandler 1、处理一个 I/O 事件或拦截一个 I/O 操作,并将其转发给其 ChannelPipeline 中的下一个 handler 2、ChannelHandler 本身并没有提供很多方法,但通常要实现它的一个
阅读全文
摘要:继承关系 1、Netty 中的 Future 与 JDK 中的 Future 同名,但是为两个接口 java.util.concurrent.Future<V> io.netty.util.concurrent.Future<V> 2、Netty 的 Future 继承自 JDK 的 Future,
阅读全文
摘要:Channel 接口 1、Javadoc 描述 (1)一个网络 Socket 的节点或一个能够进行 I/O 操作的组件,如:读、写、连接、绑定 (2)一个通道提供用户以下选项 (3)通道的当前状态,例如:是否打开?是否连接? (4)通道的配置参数,例如:接收缓冲区的大小 (5)通道支持的 I/O 操
阅读全文
摘要:EventLoop 1、事件循环对象 public interface EventLoop extends OrderedEventExecutor, EventLoopGroup { @Override EventLoopGroup parent(); } 2、本质:一个单线程执行器 (1)同时维
阅读全文
摘要:Netty 1、一个异步、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端 2、异步:并非异步 IO,而是异步调用,多线程解耦调用、处理,本质为多路复用 3、优点 (1)基于 Java NIO,修复 Bug (2)不需要构建协议 (3)解决 TCP 传输问题,如:粘包、半包
阅读全文