一时无两


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Perspective -- 全链路监控系统

发表于 2017-02-25 | 分类于 全链路监控
Perspective – 全链路监控系统 解决的问题:最初版本,只解决购物车以下的链路监控。后面考虑适用在二维火其他系统。 相比于CAT、ZIPKIN:更加轻量级。 处理异步线程的全局ID传递:在进行线程操作的时候,使用统一提供的线程模型。包装一个线程类,创建之前从中央IDFactory中申请一个(没有则创建)全局ID,然后自己生成一个当前Branch的ID。线程池执行的其实只是一个代理类,finally中将全局ID和BranchID回传,用于绑定一个Trace和Branch。 进程间全局ID传递:第一版本只针对Dubbo做扩展,使用类似CAT的方式,增加过滤器,同样把invoker.inv ...
阅读全文 »

Dubbo源码解析 --- filter和listener

发表于 2017-02-25 | 分类于 dubbo源码
Dubbo源码解析 — filter和listener 前言有一句说一句,这个标题的有点标题党的意思,我们在这里并不想给大家讲解filter和listener的概念、实现、功能等等。而是想给大家讲解filter和listener的注入过程,具体filter和listener请大家看一下官方文档,或者可以查看一下dubbo已知扩展点的实现。 问题我们看一下消费方执行流程: 1ReferenceBean --> ReferenceConfig --> RegistryProtocol --> DubboProtocol --> invoker --> exp ...
阅读全文 »

Dubbo源码解析 --- 关于dubbo的插件化

发表于 2017-02-25 | 分类于 dubbo源码
Dubbo源码解析 — 关于dubbo的插件化 前言Dubbo的插件化实现非常类似于原生的JAVA的SPI:它只是提供一种协议,并没有提供相关插件化实施的接口。用过的同学都知道,它有一种java原生的支持类:ServiceLoader,通过声明接口的实现类,在META-INF/services中注册一个实现类,然后通过ServiceLoader去生成一个接口实例,当更换插件的时候只需要把自己实现的插件替换到META-INF/services中即可。 Dubbo的“SPI”之前提到过,Dubbo的SPI并非原生的SPI,Dubbo的规则是在META-INF/dubbo、META-INF/dubb ...
阅读全文 »

Dubbo源码解析 --- 服务注册

发表于 2017-02-25 | 分类于 dubbo源码
Dubbo源码解析 — 服务注册 前言对于分布式服务架构,解决服务的发现问题,引入了注册中心中间件,从而很好的解决了服务双方(消费方和提供方)的直接依赖问题。这种解耦的意义是非凡的,不仅在程序运行时保证了灵活性,在开发阶段也使得快速迭代成为了可能,甚至在运维层面也提供了非常好的自由度。 夸了这么多,但要实现一个完美的注册中心系统却不是一件那么容易的事儿,你必须时刻注意关注它的可用性(包括稳定,实时和高效),这一点在任何一款分布式系统中都是件很复杂的事儿。当然这篇文章并不是打算摆平这么个庞然大物,我们只是从dubbo和zookeeper之间的关系来了解一下在dubbo架构中注册中心的相关知识。 ...
阅读全文 »

Dubbo源码解析 --- 服务的创建和暴露

发表于 2017-02-25 | 分类于 dubbo源码
Dubbo源码解析 — 服务的创建和暴露 前言本文主要就dubbo基础的XML解析开始,到服务的创建和发布,最终延展到底层netty的调用,给出一个初始化流程的解读。在这里你能看到dubbo一些优秀的抽象设计,以及底层源代码的解读。如有语义不明,联系紫苑。或者邮件ziyuan@2dfire.com。 service和server首先,当发布一个服务的Server时,我们需要编写一个Spring配置文件,形如以下: 123456<beans xmlns="..."> <dubbo:application name="hello-world-a ...
阅读全文 »

Dubbo源码解析 --- Invoker和Exchanger

发表于 2017-02-25 | 分类于 dubbo源码
Dubbo源码解析 — Invoker和Exchanger 前言在一个框架中我们通常把负责数据交换和网络通信的组件叫做Exchanger。Dubbo中每个Invoker都维护了一个ExchangeClient的引用,并通过它和远程的Server进行通信。 Invoker先来看一下官方文档中对inoker的介绍: Invoker是Provider的一个可调用Service的抽象,Invoker封装了Provider地址及Service接口信息。 Directory代表多个Invoker,可以把它看成invoker的list集合,但与List不同的是,它的值可能是动态变化的,比如注册中心推送变更 ...
阅读全文 »

Dubbo源码解析 --- 服务订阅以及通知

发表于 2017-02-25 | 分类于 dubbo源码
Dubbo源码解析 — 服务订阅以及通知 前言由于服务的注册内容比较多,所以把上一部分单独做一篇,订阅和通知合在一起。 subscribe承接上一篇,我们说完了服务的发布,现在看看服务的订阅。考虑了一下,我还是决定在这里贴一下Protocol接口的相关注释,方便大家理解: 12345678910111213141516171819202122232425262728/** * 暴露远程服务:<br> * 1. 协议在接收请求时,应记录请求来源方地址信息:RpcContext.getContext().setRemoteAddress();<br> ...
阅读全文 »

synchronized 关键字

发表于 2017-02-25 | 分类于 java源码
synchronized 关键字 实现原理在java1.6中对synchronized进行了一系列优化,在之前的版本中,lock性能远比synchronized关键字好,测试数据这里不放了。重点关注下实现原理。 先说几个概念: 普通同步方法,锁当前实例(相当于synchronize(this))。 静态同步方法,锁当前类的class对象。(任何该class的实例全都会阻塞) synchronized(object)锁object对象。 当一个线程访问同步代码块时,它首先是需要得到锁才能执行同步代码,当退出或者抛出异常时必须要释放锁,那么它是如何来实现这个机制的呢?我们先看一段简单的代码: ...
阅读全文 »
1…89
时无两

时无两

88 日志
24 分类
84 标签
GitHub E-Mail
© 2020 时无两
主题 — NexT.Pisces v5.1.3