Dubbo源码阅读-服务调用过程 1.概述2.源码请求数据的发送过程:proxy0#sayHello(String) —> InvokerInvocationHandler#invoke(Object, Method, Object[]) —> MockClusterInvoker#invoke(Invocation) —> AbstractClusterInvoker#invoke(Invocation) —> FailoverClusterInvoker#...
Dubbo源码阅读-服务导出 1.概述本篇文章,我们来研究一下 Dubbo 导出服务的过程。Dubbo 服务导出过程大致可分为三个部分:第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。本篇文章将会对这三个部分代码进行详细的分析。2.源码服务导出的入口为:DubboBootstrap.exportServices(),首先会遍历解析完成的所有的ServiceConfig,然后进行服务的导出。
Dubbo源码阅读-Config 1.概述ApplicationModel Environment ServiceRepository ConfigManager ApplicationConfig MonitorConfig ModuleConfig MetricsConfig SslConfig ConfigCenterConfig MetadataReportConfig ProviderConfig ConsumerConfig Pro...
redis设计与实现-事务 1.概述redis通过MULTI、EXEC、WATCH等命令来实现事务功能。事务以MULTI命令开始,最后由EXEC命令将事务提交给服务器。WATCH命令是一个乐观锁,它可以再EXEC命令执行之前,监视任意数量的数据库key,并在EXEC命令执行的时候,检测是否有某个key被修改过了,如果是,服务器将拒绝事务,并向客户端返回执行失败的响应。2.实现事务的实现分为三个阶段:1)事务的开始2)命令入队列3)事务执行2.1 事务开始MULTI命令可以将执行该命令的客户端非事务状态切
Spring源码-IOC 1、概述IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IoC 容器后,则直接由 IoC 容器来控制。所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中。注入形式- 构造器注入- setter方法注入- 接口方式注入2、核心实现2.1....
zookeeper学习笔记(1)-Leader选举之FastLeaderElection 1、概述选举的父接口为Election,其定义了lookForLeader和shutdown两个方法,lookForLeader表示寻找Leader,shutdown则表示关闭,如关闭服务端之间的连接。 AuthFastLeaderElection,同FastLeaderElection算法基本一致,只是在消息中加入了认证信息,其在3.4.0之后的版本中已经不建议使用。 FastLeaderElection,其是标准的fastpaxos算法的实现,基于TCP协议进行选举。 Leade.
redis设计与实现-集群 1.概述除了sentinel方式,redis集群是redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。2.实现2.1 节点2.2 槽指派2.3 在集群中执行命令2.4 重新分片2.5 ask2.6 复制和故障转移2.7 消息3.总结集群中的16384个槽可以分别指派给集群中的各个节点,每个节点都会记录哪些槽指派给自己,哪些槽又被指派给了其他节点 节点在接收到一个命令请求时,会先检查这个命令请求要处理的键所在
redis设计与实现-Sentinel 1.概述SENTINAL启动多个哨兵实例监控,设置探活时间间隔,超时时间,超过多少个哨兵实例失败则切换切换主节点。2.实现切换步奏:修改slave的配置文件,删除slave of ,修改master节点配置文件,加入slave of。3.总结...
redis设计与实现-压缩列表 1.概述redis中的hash,list,zset在数据量小的时候都使用压缩列表ziplist。2.压缩列表的实现3.总结压缩列表就是对每个节点都记录长度、encoding、内容,有点像网络传输中协议定义一样,用几个字节保存报文长度,然后根据报文长度读取报文内容。...
redis设计与实现-整数集合 1.概述整数集合(intset)并不是一个基础的数据结构,而是Redis自己设计的一种存储结构,是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis就会使用整数集合作为集合键的底层实现。2.整数集合的实现2.1 源码://每个intset结构表示一个整数集合typedef struct intset{ //编码方式 uint32_t encoding; //集合中包含的元素数量 uint32_t length;
java并发 - CAS 1. 概述CAS ,Compare And Swap ,即比较并交换。整个 AQS 同步组件、Atomic 原子类操作等等都是基 CAS 实现的,甚至 ConcurrentHashMap 在 JDK 1.8 的版本中,也调整为 CAS +synchronized。2. CAS分析在 CAS 中有三个参数:内存值 V、旧的预期值 A、要更新的值 B ,当且仅当内存值 V 的值等于旧的预期值 A 时,才会将内存值V的值修改为 B ,否则什么都不干Unsafe 是 CAS 的核心类,Java ..