摘要: 计算机内部有两种表示数的方式,定点和浮点,定点意思是小数点的位数是固定的,比如32位cpu,如果小数点固定在中间,则实数和小数都各占16位。浮点是小数点会根据数的大小浮动,具体如何浮动根据不同的cpu实现不同。 根据表示方式不同cpu分位定点机和浮点机,定点机内部按照定点方式存储数字,浮点机按照浮点 阅读全文
posted @ 2021-11-25 20:09 Birding 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 两个问题: 1. 二进制补码是CPU计算的符号数表示形式,但是用户输入的都是10进制,是在哪个节点给10进制转换成二进制补码的? 结论是编译器做转换,CPU不关系符号,可以通过 https://defuse.ca/online-x86-assembler.htm#disassembly 这个网站写个 阅读全文
posted @ 2021-11-16 16:07 Birding 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 底层原理: Jmockit底层基于asm和jvm instrument功能实现的在运行期修改字节码,根据MockUp类的类型信息和mock方法签名定位到具体需要修改的类和方法,然后给方法的上面加上转调mock代码逻辑。 调试相关类: TestRun.getFakeClasses() 该方法返回的fa 阅读全文
posted @ 2021-08-03 17:41 Birding 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 前段时间在做应用db访问日志客户端的开发,这里记录下日志客户端设计相关问题: 1. 如何拦截请求? a. 公司的db访问都是统一经过dal框架,所以动态给dal框架底层执行方法增加拦截代码即可。主要思路是在注册tomcat启动监听,在监听代码中,注册jvm修改类定义的tranform(参考jvm的i 阅读全文
posted @ 2021-07-13 10:17 Birding 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 协议 底层实现 协议特点 序列化组件 性能 dubbo dubbo(参照代码Codec2接口及相关实现,目前dubbo中只有dubbo协议是自主实现,其他都是依赖第三方框架) 1. 协议头里记录序列化组件ID来决定客户端和服务端按照什么方式来编解码,请求ID对于response的解码从本地取该res 阅读全文
posted @ 2021-07-05 20:39 Birding 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 先看使用的地方,dubbo协议底层使用netty进行tcp通信,netty提供了报文encode和decode的接口,可以看nettyserver构建server的地方: 在创建netty server的时候会通过调用getCodec方法获取dubbo对应的codec实现类。dubbo codec实 阅读全文
posted @ 2021-07-05 10:54 Birding 阅读(54) 评论(0) 推荐(0) 编辑
摘要: Spring初始化入口: AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 在方法的最后一个处理: finishBeanFactoryInitialization(AbstractApplicationCo 阅读全文
posted @ 2021-07-02 16:35 Birding 阅读(44) 评论(0) 推荐(0) 编辑
摘要: directory为一个引用服务的抽象,内部维护了服务提供者列表以及服务的路由和更新功能,包含类如下: Directory是最上层接口,主要定义了三个基本接口:getInterface表示该directory对应的服务;list返回该directory可用的服务提供者列表;getConsumerUr 阅读全文
posted @ 2021-06-29 11:17 Birding 阅读(90) 评论(0) 推荐(0) 编辑
摘要: RegistryProtocol是Protocol的实现类,是注册中心和服务提供者的桥梁,下面分析该类主要的两个方法export(导出服务)、refer(引用服务)的实现流程,分析是如何实现服务导出和服务引用的。 export: export比较简单,先从invoker中抽取出服务提供者url,调用 阅读全文
posted @ 2021-06-29 09:20 Birding 阅读(530) 评论(0) 推荐(0) 编辑
摘要: config相关源码分散在两个地方,在common.config包里存放了配置的model,在config包下放了config相关的逻辑代码。 以下是common.config包主要的类,基本都是属性的封装: 以下是config包主要的类: 在该包下主要有封装了配置相关的组件,比如DelegateP 阅读全文
posted @ 2021-06-27 11:49 Birding 阅读(35) 评论(0) 推荐(0) 编辑
摘要: ServiceConfig主要负责服务的导出: 先通过设置的registry初始化注册中心url列表 registryURLs。 然后对设置的每个protocol每个注册中心进行服务的导出。 在执行服务导出时再初始化provider的url。 最后给provider的url设置到registry u 阅读全文
posted @ 2021-06-27 11:34 Birding 阅读(226) 评论(0) 推荐(0) 编辑
摘要: dal实现从jdbc返回的ResultSet转换成具体业务Model的接口:DalResultSetExtractor,该接口主要有 这三种实现类: DalRowMapperExtractor依赖固定DalRowMapper做多行数据转换。 DalScalarExtractor直接返回ResultS 阅读全文
posted @ 2021-06-24 17:05 Birding 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 从更通用的层面:流程系统 来讨论这两种架构思路,流程系统包括以下特点: 包含多个执行节点顺序流转。 执行节点的触发条件可能有很多种,比如手动触发、条件触发等。 每个执行节点可能绑定一个或者多个附加操作,比如在某个操作后要发送邮件或其他方式进行通知。 绑定的操作也可能有顺序要求。 基础架构思路为每个节 阅读全文
posted @ 2021-06-22 18:33 Birding 阅读(51) 评论(0) 推荐(0) 编辑
摘要: cluster包定义了dubbo集群相关封装,主要使用在消费端。 cluster包根目录下类定义了集群相关的顶层抽象,主要包括: Router: 消费时实现服务端机器过滤功能。 参见 https://dubbo.apache.org/zh/docs/v2.7/user/examples/routin 阅读全文
posted @ 2021-06-21 10:41 Birding 阅读(21) 评论(0) 推荐(0) 编辑
摘要: dubbo-registry包封装注册中心相关代码。 api层定义registry的基本接口,主要包括: registryservice: 定义注册的基本操作,注册、取消注册、订阅、取消订阅 registryfactory:获取注册器工厂 abstractregistry: 缓存注册、订阅以及通知信 阅读全文
posted @ 2021-06-18 17:56 Birding 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 两个方面考虑:需求理解、代码实现。 代码实现上原则:不确定的逻辑肯定是bug的滋生点,要消除一切不确定 todo... 阅读全文
posted @ 2021-06-16 08:28 Birding 阅读(17) 评论(0) 推荐(0) 编辑
摘要: rpc-api包的基本抽象主要类,invoker负责执行一个invocation代表的rpc请求,并返回result;exporter表示一个导出服务;protocol为协议层,上层负责该协议服务的导出和引用;proxyfactory为代理底层工厂,负责invoker和实现类之间的转换。 proto 阅读全文
posted @ 2021-06-11 11:31 Birding 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 背景: 目前负责的系统在业务逐渐恢复以后出现在业务高峰的时候大量获取db连接失败,且SQL响应严重劣化。查看db性能报表显示,thread running队列高达500多,较平时增加增加100多倍,MySQL宿主机cpu达到70%,较平时增加50%左右,SQL执行量较平时增加10%左右。 排查过程: 阅读全文
posted @ 2021-06-10 21:17 Birding 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 主要类以及功能分析: dalclientfactory: 缓存dalconfigure,是初始化入口类 dalconfigloader(ctripdalconfig) 加载dal主配置文件,优先从本地加载,本地没有从qconfig加载 dalconfigurefactory 通过dal主配置,加载其 阅读全文
posted @ 2021-06-10 20:33 Birding 阅读(26) 评论(0) 推荐(0) 编辑
摘要: remote root:定义基本网络通信模型: endpoint为一个网络节点 channel为一条通信链路,区分本地和远端。只有发送到通道的操作。 channelhandler定义channel变化时的处理器,比如通道有数据发送、数据接受、连接通道、断开连接通道时做什么处理 dispatcher负 阅读全文
posted @ 2021-06-02 21:58 Birding 阅读(33) 评论(0) 推荐(0) 编辑