- 博客(67)
- 资源 (1)
- 收藏
- 关注
原创 Dubbo源码阅读-服务调用过程
1.概述2.源码请求数据的发送过程:proxy0#sayHello(String) —> InvokerInvocationHandler#invoke(Object, Method, Object[]) —> MockClusterInvoker#invoke(Invocation) —> AbstractClusterInvoker#invoke(Invocation) —> FailoverClusterInvoker#...
2021-01-29 11:40:46
212
1
原创 Dubbo源码阅读-服务导出
1.概述本篇文章,我们来研究一下 Dubbo 导出服务的过程。Dubbo 服务导出过程大致可分为三个部分:第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。本篇文章将会对这三个部分代码进行详细的分析。2.源码服务导出的入口为:DubboBootstrap.exportServices(),首先会遍历解析完成的所有的ServiceConfig,然后进行服务的导出。
2021-01-29 11:39:12
350
原创 Dubbo源码阅读-Config
1.概述ApplicationModel Environment ServiceRepository ConfigManager ApplicationConfig MonitorConfig ModuleConfig MetricsConfig SslConfig ConfigCenterConfig MetadataReportConfig ProviderConfig ConsumerConfig Pro...
2020-11-03 20:38:59
213
原创 Dubbo源码阅读
1、疑问点1.1 设计模式1.2 bean加载过程1.3 extension机制1.4 代理1.5 远程调用过程2、源码阅读2.1 项目结构3、参考文章
2020-10-13 11:52:24
144
原创 redis设计与实现-事务
1.概述redis通过MULTI、EXEC、WATCH等命令来实现事务功能。事务以MULTI命令开始,最后由EXEC命令将事务提交给服务器。WATCH命令是一个乐观锁,它可以再EXEC命令执行之前,监视任意数量的数据库key,并在EXEC命令执行的时候,检测是否有某个key被修改过了,如果是,服务器将拒绝事务,并向客户端返回执行失败的响应。2.实现事务的实现分为三个阶段:1)事务的开始2)命令入队列3)事务执行2.1 事务开始MULTI命令可以将执行该命令的客户端非事务状态切
2020-05-29 15:34:15
309
原创 Spring源码-IOC
1、概述IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IoC 容器后,则直接由 IoC 容器来控制。所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中。注入形式- 构造器注入- setter方法注入- 接口方式注入2、核心实现2.1....
2020-05-21 11:01:42
135
原创 zookeeper学习笔记(1)-Leader选举之FastLeaderElection
1、概述选举的父接口为Election,其定义了lookForLeader和shutdown两个方法,lookForLeader表示寻找Leader,shutdown则表示关闭,如关闭服务端之间的连接。 AuthFastLeaderElection,同FastLeaderElection算法基本一致,只是在消息中加入了认证信息,其在3.4.0之后的版本中已经不建议使用。 FastLeaderElection,其是标准的fastpaxos算法的实现,基于TCP协议进行选举。 Leade.
2020-05-18 11:36:25
256
原创 redis设计与实现-集群
1.概述除了sentinel方式,redis集群是redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。2.实现2.1 节点2.2 槽指派2.3 在集群中执行命令2.4 重新分片2.5 ask2.6 复制和故障转移2.7 消息3.总结集群中的16384个槽可以分别指派给集群中的各个节点,每个节点都会记录哪些槽指派给自己,哪些槽又被指派给了其他节点 节点在接收到一个命令请求时,会先检查这个命令请求要处理的键所在
2020-05-17 19:11:07
216
原创 redis设计与实现-Sentinel
1.概述SENTINAL启动多个哨兵实例监控,设置探活时间间隔,超时时间,超过多少个哨兵实例失败则切换切换主节点。2.实现切换步奏:修改slave的配置文件,删除slave of ,修改master节点配置文件,加入slave of。3.总结...
2020-05-17 18:57:01
226
原创 redis设计与实现-压缩列表
1.概述redis中的hash,list,zset在数据量小的时候都使用压缩列表ziplist。2.压缩列表的实现3.总结压缩列表就是对每个节点都记录长度、encoding、内容,有点像网络传输中协议定义一样,用几个字节保存报文长度,然后根据报文长度读取报文内容。...
2020-05-14 23:33:36
182
原创 redis设计与实现-整数集合
1.概述整数集合(intset)并不是一个基础的数据结构,而是Redis自己设计的一种存储结构,是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis就会使用整数集合作为集合键的底层实现。2.整数集合的实现2.1 源码://每个intset结构表示一个整数集合typedef struct intset{ //编码方式 uint32_t encoding; //集合中包含的元素数量 uint32_t length;
2020-05-14 23:25:46
256
原创 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 ..
2020-05-13 19:02:33
117
原创 java并发 - JUC之ReentrantLock&ReentrantReadWriteLock
java并发 - JUC之ReentrantLock&ReentrantReadWriteLock
2020-05-13 11:29:26
130
原创 redis设计与实现-SDS动态字符串
1.SDS定义2.SDS与C字符串的区别3.总结对比C字符串,SDS有以下优点:获取字符串的长度的复杂度O(1) 杜绝缓冲区溢出 减少修改字符串时所需的内存重分配次数 二进制安全 兼容部分C字符串函数...
2020-05-07 18:33:14
192
原创 apollo源码(6)-表结构设计
1.主体E-R DiagramApp App信息 AppNamespace App下Namespace的元信息 Cluster 集群信息 Namespace 集群下的namespace Item Namespace的配置,每个Item是一个key, value组合 Release Namespace发布的配置,每个发布包含发布时该Namesp...
2020-04-30 18:52:12
1201
原创 apollo源码(3)-configservice配置读取接口
1. 概述在上文,我们看到通知变化接口,仅返回通知相关的信息,而不包括配置相关的信息。所以 Config Service 需要提供配置读取的接口1.1 配置读取流程图2. ConfigController类配置 Controller ,仅提供configs/{appId}/{clusterName}/{namespace:.+}接口,提供配置读取的功能2.1...
2020-04-30 18:47:37
1443
原创 apollo源码(3)-ConfigService通知配置变化
1. 概述客户端会发起一个Http 请求到 Config Service 的notifications/v2 接口,也就是NotificationControllerV2 。 NotificationControllerV2 不会立即返回结果,而是通过Spring DeferredResult把请求挂起。 如果在 60 秒内没有该客户端关心的配置发布,那么会返回 Http 状态码 ...
2020-04-30 18:44:16
1349
原创 apollo源码(2)-client
1.概述Client 通过轮询的方式,从 Config Service 读取配置。Client 的轮询包括两部分:1.RemoteConfigRepository ,定时轮询 Config Service 的配置读取2.RemoteConfigLongPollService ,长轮询 Config Service 的配置变更通知/notifications/v2接口 当有新的...
2020-04-30 18:25:41
513
原创 apollo源码(1)-概述
一、简要介绍Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。二、主要模块及功能介绍四个核心模块及其主要功能 ConfigService 提供配置获取接口 提供配置推送接口 ...
2020-04-30 18:23:16
1539
原创 redis设计与实现
1、问题2、源码解读3、参考文章如何阅读redis源码:http://blog.huangz.me/diary/2014/how-to-read-redis-source-code.html
2020-04-22 11:13:00
223
原创 kafka源码(7)-控制管理模块之KafkaController
1. 重要类介绍KafkaControllerKafkaController作为kafka集群的控制者,有且存在一个leader,若干个follower。Leader能够发送具体的指令给follower,具体指令如:RequestKeys.LeaderAndIsrKey,RequestKeys.StopReplicaKey,RequestKeys.UpdateMetadataKey。...
2020-04-14 16:56:55
423
java source attacher
2015-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人