Dubbo

Dubbo原理浅析

只愿长相守 提交于 2020-02-27 01:47:31
一、什么是dubbo Dubbo 是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看, Dubbo 采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。 Webservice 也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可选的,需要单独配置。 Dubbo 是阿里巴巴SOA服务化治理方案的核心框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

dubbo协议及序列化

帅比萌擦擦* 提交于 2020-02-27 00:31:05
Dubbo是 Alibaba 开源的分布式服务框架远程调用框架,在网络间传输数据,就需要通信协议和序列化。 一、通信协议 通信协议:Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的,默认也是用的dubbo协议。 dubbo协议 缺省协议,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。 连接个数:单连接 连接方式:长连接 传输协议:TCP 传输方式:NIO异步传输 序列化:Hessian二进制序列化 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用dubbo协议传输大文件或超大字符串。 适用场景:常规远程服务方法调用 总结: 1、dubbo默认采用dubbo协议,dubbo协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况 2、他不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。 配置如下: <dubbo:protocol name="dubbo" port="20880" /> <dubbo:protocol name=“dubbo” port=“9090” server=“netty”

ByteBuddy操纵Java字节码示例:自动移除字符串两侧空格

。_饼干妹妹 提交于 2020-02-26 22:21:32
今天稍稍学习了 ByteBuddy 这个库。 其官方仓库地址是:https://github.com/raphw/byte-buddy。 官方对它的描述:Runtime code generation for the Java virtual machine. 即,JVM之上的运行时代码生成。 写过Java的都知道 Java 只支持基于接口的动态代理。如果你的类没有实现某个接口,而你又想代理这个类,不依靠三方库是很难做到的。 而 ByteBuddy 提供了丰富的字节码操纵接口,它既允许我们在运行时创建新的class,也支持修改已有class。像给类添加字段、添加方法或构造器、拦截方法等,在它这里都变得轻而易举。 我们今天通过一个示例,讲解如何使用 ByteBuddy 解决我们项目开发时经常遇到的一个问题:移除 Java bean 属性两边的空格。比如对于 String name = " Tom " ,我们希望 getName() 方法返回的是 "Tom" 。 问题背景: 在开发中,我们经常会遇到这样的场景:一个Java bean 存在很多String类型的字段,由于一些原因,这些字段的值常常两边都带有空格,而空格并不是我们想要的。怎么办? 一个繁琐的处理办法是,用到这个字段的地方,都 trim 一下: String name = getName().trim();

如何高效的学习技术

喜你入骨 提交于 2020-02-26 22:17:42
我们相信努力学习一定会有收获,但是方法不当,既让人身心疲惫,也没有切实的回报。高中时代,我的同桌是个漂亮女同学。她的物理成绩很差,虽然她非常勤奋的学习,但成绩总是不理想。为了巩固纯洁的同学关系,我亲密无间地辅导她的物理,发现 她不知道题目考什么 。我们的教科书与试题都围绕着考试大纲展开,看到一道题,应该先想想它在考哪些定理和公式的运用。 不少朋友每天都阅读技术文章,但是第二天就忘干净了。工作中领导和同事都认可你的沟通和技术能力,但是跳槽面试却屡屡碰壁。面试官问技术方案,明明心里清楚,用嘴说出来却前言不搭后语。面试官再问底层算法,你说看过但是忘记了。他不在乎你看没看过,答不上就是零分。正如男女相亲,男方谈吐潇洒才能吸引姑娘。可是男方紧张了,平时挺能说,关键时候却支支吾吾,姑娘必然认为他不行。人生充满了许多考试,有形的和无形的,每次考试的机会只有一次。 工作五年十年后,别人成了架构师,自己还在基层打滚,原因是什么?职场上无法成功升迁的原因有很多,没有持续学习、学习效果不好、无法通过心仪公司的的面试,一定是很重要的原因。 把自己当成一台计算机,既有输入,也要有输出,用输出倒逼输入 。 学什么 基础与应用 近些年诞生了许多新技术,比如最时髦的AI(目前还在智障阶段),数学基础是初中就接触过的概率统计。万丈高楼从地起,不要被新工具或者中间件迷住双眼,一味地追新求快。基础知识是所有技术的基石

源码分析Dubbo网络通讯篇概要总结(类图一览、服务端、客户端网络构造流程一览)

旧城冷巷雨未停 提交于 2020-02-26 22:12:22
从本节开始将开始深入学习 Dubbo 网络通讯的底层实现细节,在深入学习 Dubbo 网络模型时,首先应从整体上了解 Dubbo 的网络通讯模型、线程模型是怎样的?下图是 Dubbo 官方给出的线程模型: 涉及如下方面: 网络调用客户端。 网络调用服务端。 网络传输,编解码、序列化。 网络服务端转发模型、线程池。 下面给出与上述网络模型对应的详细类图: 上述类做一个简单的结束,后续篇章将会一一详细分析。 基础接口 Resetable 可重置。 Endpoint 端(服务端、客户端基接口) 服务端 Server 服务端根接口 ExchangeServer 服务端交换机,默认实现Server,内部持有具体Server的实现。 HeaderExchangeServer 基于协议头的服务端交互机。 客户端 Channel 客户端通道描述接口。 Client 客户端基础接口,继承自Endpoint,Channel,主要定义重连接口。 传输层 Transporter 定义根据URL创建服务端或客户端,内部实现就是构建Server,Client对象。 编解码 Codec2 定义编解码对应的接口。 下面以Dubbo协议为例,底层网络通信组建基于Netty,Dubbo协议创建服务端的流程如下所示: 下面还是以Dubbo协议为例,底层网络通信组件基于Netty,Dubbo协议消费端(客户端

73.springboot + dubbo + zookeeper

本秂侑毒 提交于 2020-02-26 22:11:35
1. doubbo 管理台 搭建 https://my.oschina.net/springMVCAndspring/blog/2050933 2.zookeeper安装 https://my.oschina.net/springMVCAndspring/blog/2050353 1.效果 2. 生产者 2.1 pom.xml <!--7.dubbo依赖--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <!--8.zkclient依赖--> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency

RPC 远程过程调用

ぃ、小莉子 提交于 2020-02-26 19:24:09
一、什么是RPC RPC(Remote Proceduce Call)是指远程过程调用,是一种进程间通信方式, 是一种技术思想,而不是规范 。它允许程序调用另一个地址空间(通常是共享网络的一台机器上)的过程或者函数,而不是程序员显示编程这个远程调用细节,即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。 二、RPC工作流程 之前工作中用过的dubbo,就是利用了RPC 三、RPC核心模块 RPC有两大核心模块: 通讯、序列化 。 这两个模块的效率、安全性决定这个RPC框架是否高效。 来源: oschina 链接: https://my.oschina.net/edisonOnCall/blog/3156405

zookeeper宕机与dubbo直连

人盡茶涼 提交于 2020-02-26 19:01:19
加入zookeeper宕机后,一段时间内consumer依然能够获取provider的服务,实际上使用了本地缓存进行通讯,这也是dubbo健壮性的一种体验。 dubbo健壮性的表现: 1.监控中心宕机,不影响使用,只是减少监控的数据采集; 2.数据库宕机,注册中心依然能够提供服务,但是不能注册新的服务; 3.注册中心对等集群,任意一台宕机后,自动切换另一台,不影响整体使用; 4.注册中心全部宕机,consumer与provider能够通过本地缓存进行通讯; 5.provider任意宕机一台,不影响整体使用; 6.provider全部宕机,consumer无法使用,并且无限制重新,指导provider恢复; zookeeper相当于提供的是目录服务,可以直接让provider与consumer直接关联,dubbo直连。 来源: oschina 链接: https://my.oschina.net/u/4434424/blog/3167919

写给程序员儿子的一封信

孤者浪人 提交于 2020-02-26 18:59:04
亲爱的儿子: 当你打开这封信的时候,我已经离开波士顿回到加州了,你也已经结束自己最后一个暑假,去往自己非常喜欢的公司。 虽然你我都是程序员,但是你却很少向我咨询过技术相关的问题,咱们上一次一起写代码,也是你高考结束那个暑假了。不过前几天你问了我一个问题,你说,如果让你写一封信,跟当初刚刚成为程序员的自己说一些话,你会说什么呢? 我在想,我会说些什么呢?我想说的太多了,可是如果说了,他能听进去多少呢,就算听进去了,他又会用到多少呢?我想起了瑞·达利欧的《原则》,如果我把我这几年的经历、收获,总结成几条原则,是不是会好一些。 以下,是我总结的几条原则。 1.权威精神 对于某一项具体技术来说: 官方文档、白皮书、论文,比博客更权威; 由此引申出: 谷歌比百度更权威,因为谷歌的搜索结果,权威的资料靠前,而百度,靠前的多是博客; 大多数时候,英文文档比中文文档更权威,因为官方文档、白皮书、论文,大多数是英文的; 如果你想向别人解释一项技术,那么请向他们展示权威的资料,而非一些网络上的博客; 为什么这么强调权威精神? 《禅与摩托车维修艺术》里,作者和朋友骑摩托车去沙漠,车坏了,朋友依靠直觉和经验,尝试了各种办法,就是修不好,而作者找到了他购买摩托车时配套的指导手册,照着上面的步骤排查,很快找到了导致车子故障的原因,换了个零部件,车子就好了。 数学、物理的很多研究,都是基于定理之上

返沪第一天,学习不能断,工作还要继续

*爱你&永不变心* 提交于 2020-02-26 17:59:32
返沪第一天 今天是2020年02月19日,是我返沪第一天,早上的体温是36.5,晚上的体温为36.6. 呵呵 -- 正常 说起返沪,海囧有木有。 回沪需要多转(转车三次) 从家开车到高铁站(这可是我第一次开车上高速,虽然我是一个老司机了(驾照到手好多年了)),这速度有点慢哦 乘高铁到成都,高铁都是隔人坐的,人好少。 转地铁到机场(包地铁的感觉有点爽) 飞机是满坐的,疫情也没挡住大家返沪的热情 磁悬浮只有列车员一人,大城市有点点可怕的感觉(呵呵) 回到小区,填写信息,告知自动在家隔离十四天。 以上都是昨天的海囧啦,以下才是主场: 在老家期间,阅读完一本书(非技术的),带回的技术书就翻看了几章,开车可以上路了(驾照大学期间就拿了,但之后从未开过车)。 今天,还未起床,居委会就打电话确认让隔离。 请假也要工作 一个早上三个工作会议(一个项目进度汇报,一个项目任务分配,一个与小伙伴沟通),下午协助公司解决线上线下遇到的一些杂七杂八的技术和非技术的问题。 隔离也要学习 为什么需要分库分表?(学习获取资料) 海量数据,数据库遇到瓶颈时,就需要分库分表。 MySQL 在 InnoDB 存储引擎下创建的索引都是基于 B+ 树实现的,所以查询时的 I/O 次数很大程度取决于树的高度,随着 B+ 树的树高增高,I/O 次数增加,查询性能也就越差。 当我们面对一张海量数据的表时,通常有分区、NoSQL