Dubbo Cluster
clusterCluster 将 Directory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个.
集群模块处于服务提供者和消费者之间,对于服务消费者来说,集群可向其屏蔽服务提供者集群的情况,使其能够专心进行远程调用.
cluster 继承结构
12345678910Cluster(com.alibaba.dubbo.rpc.cluster) MergeableCluster(com.alibaba.dubbo.rpc.cluster.support) FailfastCluster(com.alibaba.dubbo.rpc.cluster.support) MockClusterWrapper(com.alibaba.dubbo.rpc.cluster.support.wrapper) FailsafeCluster(com.alibaba.dubbo.rpc.cluster.support) ForkingCluster(com.alibaba.dubbo.rpc.cluster. ...
synchronized 和 lock 性能比较
synchronized 与 Lock 性能比较JDK1.8123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125D:\soft\Java\jdk1.8.0_172\bin\java.exe "-javaagent:D:\soft\JetBrains\IntelliJ IDEA 2018.1.6\lib\idea_rt.jar=57167:D:\soft\JetBrains\IntelliJ IDEA 2018.1.6\bin" -Dfile.encoding=UTF-8 -classpath ...
Dubbo 服务引用
官网
客户端服务引用客户端服务引用 demo12DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxydemoService.sayHello("world");
dubbo 在客户端动态的生成了一个该 Interface 类型的代理类.在这个代理类中封装了远程服务调用的组件.
DemoService 创建12<dubbo:reference id="demoService" group="g1" check="true" interface="com.alibaba.dubbo.demo.DemoService" client="netty4" timeout="10000" callbacks="1000" regis ...
Tomcat Debug
tomcat debug方式1. tomcat远程debug,这种方式正常用于sit或者灰度环境调试问题使用,当然localhost也能这样debug.在 startup.sh 中配置
1SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=19999
方式2. 在idea中启动tomcat debug,需要添加tomcat的jar依赖.这种方式用于本地看tomcat源码或者定位本地起的项目中tomcat部分的问题时可以使用.
12345678910111213<dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <version>7.0.82</version> ...
Dubbo 服务暴露
Dubbo 与 Spring 的结合代码在 dubbo-config 下的 dubbo-config-spring 模块中
META-INF/dubbo.xsddubbo.xsd 定义了 dubbo 自定义标签
META-INF/spring.schemasspring.schemas 指定了 dubbo.xsd 文件的位置.
1http\://code.alibabatech.com/schema/dubbo/dubbo.xsd=META-INF/dubbo.xsd
META-INF/spring.handlers关联 DubboNamespaceHandler 命名空间处理器和 dubbo.xsd 中的 targetNamespace,即 http://code.alibabatech.com/schema/dubbo
1http\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHand
DubboNamespace ...
Dubbo SPI 机制
SPI 机制SPI 作用SPI 全称为 Service Provider Interface, 是一种服务发现机制.
SPI 的本质是将接口实现类的全限定名配置在文件中, 并由服务加载器读取配置文件, 加载实现类.
这样可以在运行时, 动态为接口替换实现类. 正因此特性, 我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能.
Dubbo 里面有很多个组件, 每个组件在框架中都是以接口的形式抽象出来. 具体的实现又分很多种, 在程序执行时根据用户的配置来按需取接口的实现类.
Dubbo 实现的 SPI 与 JDK 自带的 SPI 的区别摘自官网
JDK 标准的 SPI 会一次性实例化扩展点所有实现, 如果有扩展实现初始化很耗时, 但如果没用上也加载, 会很浪费资源.
如果扩展点加载失败, 连扩展点的名称都拿不到了.比如: JDK 标准的 ScriptEngine, 通过 getName() 获取脚本类型的名称, 但如果 RubyScriptEngine 因为所依赖的 jruby.jar 不存在, 导致 RubyScriptEngine 类加载失败, 这个失败原因被吃掉了, 和 ...
Dubbo 整理
整理自官网, 对整体理解 Dubbo 很有作用.
作用Apache Dubbo 是一款高性能, 轻量级的 Java RPC 框架.
三大核心能力面向接口的远程方法调用
智能容错和负载均衡
以及服务自动注册和发现
健壮性监控中心宕掉不影响使用, 只是丢失部分采样数据.
数据库宕掉后, 注册中心仍能通过缓存提供服务列表查询, 但不能注册新服务.
注册中心对等集群, 任意一台宕掉后, 将自动切换到另一台.
注册中心全部宕掉后, 服务提供者 和 服务消费者 仍能通过本地缓存通讯.
服务提供者无状态, 任意一台宕掉后, 不影响使用.
服务提供者全部宕掉后, 服务消费者应用将无法使用, 并 无限次重连等待服务提供者恢复.
伸缩性注册中心为对等集群, 可动态增加机器部署实例, 所有客户端将自动发现新的注册中心.
服务提供者无状态, 可动态增加机器部署实例, 注册中心将推送新的服务提供者信息给消费者.
协议
Dubbo 协议采用 NIO 复用单一长连接, 并使用线程池并发处理请求, 减少握手和加大并发效率, 性能较好(推荐使用)在大文件传输时, 单一连接会成为瓶颈可用于生产环境
Rmi 协议可与原生 ...
git配置shadowsocks
git 配置 shadowsocks有时候从github里clone代码速度很慢,尤其是项目很大的时候,配置代理会快很多.git config –global http.postBuffer 524288000
git config –global http.proxy socks5://127.0.0.1:10800其中10800为 shadowsocks 服务器->编辑服务器 中配置的代理端口
git取消代理git config –global –unset http.proxy
Zookeeper事务日志,快照
ZKDataBase结构ZKDataBase(zk内存数据库) – sessionWithTimeouts(zk所有会话 会话超时时间记录器) – DataTree存储 – 事务日志
ZKDatabase会定时向磁盘dump快照数据,在zk启动时通过磁盘上的事务日志 和 快照文件 恢复 一个完整的内存数据库
事务日志dataLogDir
文件大小都是64MB
文件名 log.xxxxxx为事务id : zxid, 且 为写入该事务文件第一条事务记录的zxid.
zxid由两部分组成: 高32位 为 当前leader周期(epoch), 低32位 为 真正的操作序列号.
LogFormatter 可以查看该文件
事务日志操作
滚动日志FileTxnLog.rollLog()将当前日志文件 滚动为新文件.其实就是将 logStream置为null,那么要写入日志时就会新创建一个日志文件用于写入.
写事务日志FileTxnLog.append(TxnHeader hdr, Record txn)
若logStream == null, 代表要新创 ...
Zookeeper应用
dubbo中zk的应用123456789在zk中创建的节点路径dubbo com.alibaba.demo.DemoService [服务名,service] configurators consumers [类型,type,生产者消费者] ... providers ... [url] routers
其中接口(service)下会有四个子节点providers, consumers, routers, configurators
其中dubbo、接口、providers都是持久化节点,只有url是临时节点。当会话消失(服务器断开与zookeeper的连接),对应的临时节点会被删除。
dubbo-registry-zookeeper模块中, ZookeeperRegistry 类继承自 FailbackRegistry.构造方法中通过 ZookeeperTransporter.connect(url)连接到zookeeper.
1.服务提供者进行服务暴露时,会注册到注册中 ...