自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BazingaLyncc

城里怀揣着乡下人的梦想,乡下有城里人的爹娘

  • 博客(120)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 Dubbox 链路追踪(基于Brave+Zipkin的简单实现)上

很多时候,我们都能体会到分布式架构的话好处,其实一个系统不大,做分布式的成本是很高的,系统变得松耦合,这样做的好处不言而喻,说说坏处吧,A系统远程调用B系统,B系统又依赖C,D系统,当线上某个接口报错,或者超时的时候,亦或者是业务问题的时候,定位一个问题是麻烦的,因为日记不在一个系统里面,排查问题的时候,需要花费很大的时间,往往定位问题的所在比解决这个问题花的时间长的多,所以解决这个问题,才会出来

2017-01-12 17:15:49 12882 5

原创 Dubbox 基本特性之泛化调用

Dubbo 是支持泛化调用的,什么是泛化调用呢,泛化调用的好处是什么呢,泛化调用说白一点就是服务消费者并没有服务的接口,学了前面几章的内容之后,你肯定会发现,在我们开发写Demo的时候,必做的一件事情,就是在服务消费者和服务提供者两端同路径下有同样的接口,只不过在服务提供者端会有该接口的具体实现,之所以在服务消费者有一个没有任何具体实现的接口,是因为在设计RPC之初,设计者的最高理念就是你去面向接

2017-01-10 14:45:47 25231 6

原创 Dubbox 基本特性之直接调用

Dubbo的原作者梁飞说过,其实对于远程调用RPC来说,远程调用的大白话理解就是服务消费者直接通过网络IO传递参数,传递方法名,服务提供者获取到参数,方法名之后通过反射来调用本地的方法,执行完本地的方法之后,将结果再通过网络传递给调用方,这个过程就是RPC最最简单也是最最精髓的实现,关于注册中心,其实是服务治理的模块,注册中心方便服务的管理,发现,统计等等好处,注册中心把服务提供者的地址发送给服务

2017-01-10 13:30:45 2987

原创 Dubbox 基本特性之结果缓存

3.3 Dubbo结果缓存 3.3.1结果缓存   缓存的好处不用多说,在传统的业务开发中,引入缓存可以帮助减轻数据库的压力,在分布式的系统中,引入缓存有两种方式,第一种是在调用者,也就是消费者端引入缓存,如果能够命中缓存,则默认读取缓存中的内容,不需要再进行远程调用,这样就减少了一次IO 请求,也能减少服务提供者的压力,第二种就是在服务提供者提供缓存,同样的请求,把对请求的结果缓

2017-01-03 10:40:34 5400 1

原创 Dubbox 基本特性之异步调用

相对比与前一个小节来说,异步调用的功能也是很实用的,现在异步化的操作是越来越多了,异步化的好处也是比较明显的,可以加快后台的处理效率,做到代码直接的解耦,Dubbo就是一个支持异步调用的RPC框架  3.2.1 异步调用的场景假设系统A,远程调用B系统的某个方法,这个方法与数据库的交互很多,逻辑相对复杂,正常的代码执行的时间是3秒,A系统调用完B系统之后,还需要做一些其他的逻辑操作

2016-12-27 17:15:48 7835

原创 Dubbox 基本特性之参数验证

Dubbo作为史上功能最全的RPC框架并不是浪得虚名,在能保证性能的基础上,有这么多的特性,的确是很强,我们先来列举一下dubbo的特性:本章将会抽选出一些比较常用的一些特性,给出具体的代码实现,方便大家的理解。例如参数验证,结果缓存等给出具体的栗子,当然dubbox对dubbo进行了增强了,我们也会给出对restful,序列化等栗子,方便大家一起学习3.1 Dubbo

2016-12-21 14:58:19 7938

原创 Dubbox 环境搭建

Dubbox简介 Dubbox是一个开源的RPC(Remote ProcedureCall Protocol)远程调用框架,是由dangdang对阿里的Dubbo的升级,可以被视为Dubbo的增强版,基本架构没有变动,升级spring2.x到spring3.x,支持restful风格的调用调试方式,丰富了序列化的方式,提高了序列化的性能。 Dubbox的Github官网:htt

2016-12-20 10:01:04 15032 5

原创 搭建新浪RPC框架motan Demo

motan是新浪微博开源的RPC框架,github官网是:https://github.com/weibocom/motan今天就先搭建一个Hello world demo,本demo基于motan 0.2.1版本首先先去github下载源代码(motan-manager报错请忽略,eclipse的web Module不兼容):选中motan下的pom.xml,

2016-11-10 15:45:27 12113 1

原创 一起写RPC框架(二十七)RPC 写在最后

sigh,很遗憾,没有写完整,还有很多想做而没有做的事情,总结一下想做而没有做的事情吧1)性能测试,没有条件和环境给我做这个事情2)对portal,对页面的支持,没有一个可以直观的可视页面3)注册中心对zookeeper的支持4)监控中心链路调用的追踪的支持,这个很重要,不过没有做当然这是一个比较简单的RPC DEMO,一个学习的工具,希望对大家有提升就可以了,

2016-10-19 19:20:54 1715 1

原创 一起写RPC框架(二十七)RPC测试篇四---性能测试

性能测试的代码我也写了https://github.com/BazingaLyn/laopopo-rpc/tree/master/laopopo-example/src/main/java/org/laopopo/example/benchmark单机测试结果(Server/Client)放在同一台机器上(条件所限制)结果也写在代码的头部了,就不一一演示了,有热情的同学可以帮忙

2016-10-19 19:20:44 2188

原创 一起写RPC框架(二十六)RPC测试篇三---限流的测试

本小节测试一下限流的功能,首先我们先定义一个简单的类,配置一下它单位时间最大的调用次数package org.laopopo.example.generic.test_5;import org.laopopo.client.annotation.RPCService;import org.laopopo.example.demo.service.HelloSerivce;public

2016-10-19 19:20:24 1787

原创 一起写RPC框架(二十五)RPC测试篇二---服务消费者和服务提供者直连测试

因为在某些场合下,服务提供者和服务消费者是直接可以调用的,不需要通过注册中心,本小节测试直连的调用:服务提供者的代码:package org.laopopo.example.generic.test_4;import org.laopopo.client.provider.DefaultProvider;import org.laopopo.common.exception.

2016-10-19 19:20:07 1277

原创 一起写RPC框架(二十四)RPC测试篇一---基本业务逻辑的测试

进入了基本的测试篇,首先我们先进入基本的代码测试,我们先跑通代码:首先我们先写两个简单的接口:HelloService.javapackage org.laopopo.example.demo.service;/** * * @author BazingaLyn * @description * @time * @modifytime */publ

2016-10-19 19:19:08 4158

原创 一起写RPC框架(二十三)RPC代码小总结

本来想多写点文字的,不过发现自己的表达能力的确有限,现在还是理解为啥大神都是贴代码,不做解释了,的确很难说明一切,大神的代码易懂,看到代码就基本上知道啥意思了,这就是所谓的妙笔生花吧,我不能,所以多写一点文字多加一点注释,这也是没有办法的事情RPC基本的代码上述22个小节所总结的,代码陆陆续续写了一个月,不过博客却是因为各种事情耽误了2个月,进度很慢,行百里者半九十,估计就是这个道理吧

2016-10-19 19:18:46 1182

原创 一起写RPC框架(二十二)RPC服务消费者四--服务消费者服务编织

对于远程调用来说,最高境界就是让使用者不知道此处代码是远程调用一样,感觉就是调用本地的某个普通方法,封装底层调用的细节,这是我们服务消费端最后要做的事情比如,消费者需要调用此接口的方法package org.laopopo.example.generic.test_2;import org.laopopo.client.annotation.RPConsumer;publi

2016-10-19 19:18:23 1292

原创 一起写RPC框架(二十一)RPC服务消费者三--服务消费者负载策略

所谓负载策略,其实相对比较简单,某个消费者去远程调用某个服务,不过提供这个服务不止一个实例,那么建立的长连接就不止一个,所以需要做的事情就是根据某个策略在这个长连接中选择一个进行通讯本Demo RPC只实现了三个比较常用的负载策略1)随机2)加权随机3)轮询下面给出实现:package org.laopopo.client.loadbalance;imp

2016-10-19 19:17:42 1155

原创 一起写RPC框架(二十)RPC服务消费者二--服务消费者订阅服务

订阅服务看起来是比较简单容易实现的功能,乍一看,就是发送订阅服务的名称给注册中心,然后注册中心反馈给服务消费者,感觉万事大吉,其实并不是这样的,这块是比较容易实现的,使用Netty很容易就能实现了,但是写的时候就会发现各种问题

2016-10-19 19:17:21 2599

原创 一起写RPC框架(十九)RPC服务消费者一--服务消费者简介

服务消费者也就是我们最最核心的主角,它是整个RPC中的主角,一切都是为它服务的

2016-10-19 14:50:25 1813

原创 一起写RPC框架(十八)RPC注册中心五--注册中心之持久化的操作

介绍注册中心的功能的小节,我们曾经说过,注册中心要有持久化的操作,将一些服务的审核信息放到硬盘上,这样做的原因就是因为我们所有的服务信息都是放在内存里面的,如果注册中心的实例宕掉,或者服务器因为某种原因停止的时候,这样某些服务的审核记录就无法找回,为了避免这样的问题,我们需要做的事情就是把这些服务审核信息定时刷盘,把这些信息保存到硬盘上去,然后每个注册中心服务启动的时候,去硬盘上去恢复这些信息,这

2016-10-19 14:48:56 1477

原创 一起写RPC框架(十七)RPC注册中心四--注册中心服务消费者端的处理

上个小节简单的描述了一下注册中心如何处理与服务提供者的交互问题,也列举了几个简单的代码片段,中间有几个场景是需要通知服务消费者的几个业务逻辑的1)当服务消费者服务发布成功且审核通过的情况下

2016-10-19 14:47:39 1524

原创 一起写RPC框架(十六)RPC注册中心三--注册中心服务提供者端的处理

上两节我们简单地说明了注册中心的功能和基本结构,本节重点讲述注册中心如何处理服务提供者发送过来的信息因为我们之前讲过Netty网络端的定义说明的,也讲了服务提供者发布服务的知识了,我们看看默认的注册中心的处理器是如何处理发布的信息的private void registerProcessor() { this.remotingServer.registerDefaultProc

2016-10-19 14:47:20 2615

原创 一起写RPC框架(十五)RPC注册中心二--注册中心的基本实现

注册中心的实现方式有很多种,实现的方式也有难有易,可以使用zookeeper,consul这些第三方已有的包去帮助实现,这样可以减少开发注册中心的难度,却可能加大运维的难度,当然最最原始的方法就是使用java去实现,不借助其他任何已有的第三方包去搞定,这样做的好处其实并不明显,不过对于开发者而言,使用这种最原始的方式最大的好处就是自己知道所有的实现细节,遇到问题,遇到bug,可以很快的定位到问题所

2016-10-19 14:46:35 4129

原创 一起写RPC框架(十四)RPC注册中心一--注册中心的简述

注册中心在RPC整个体系中担任的角色是比较重要的,但也是比较微妙的,它维护了所有服务提供者的所暴露服务的信息,最最核心的信息就是IP+端口号,服务消费者会在调用服务的时候去注册中心上去询问它远程调用服务的端口和IP地址,其实最最简单的注册中心的职责就是如此,注册中心的最核心的职责就是如此但是,其实在RPC的体系中,注册中心其实是可以缺失的,因为假如服务消费者知道服务提供者的地址,就可以

2016-10-19 14:46:10 4599

原创 一起写RPC框架(十三)RPC服务提供端四--服务的降级

对于RPC而言,服务的降级也是必不可少的,何为服务的降级,就是在业务洪流来的时候,服务器的压力陡增,数据库的压力也很大的时候,轻量化服务的功效,比如某个非核心服务需要调用数据库的,我们降级的服务不需要调用数据库,就比如我们在某某电商购物的时候,商品详情页的侧边栏一般会有电商推荐的一些比较类似的产品,这个后台的机制可能是某个推荐算法,根据用户浏览商品的记录给出推荐的产品,这是非核心的逻辑,这个功能在

2016-10-19 14:45:27 3327

原创 一起写RPC框架(十二)RPC服务提供端四--服务的限流

对于远程调用来说,限流是很重要的,这是对自己的保护政策,因为为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一限流即流量限制,或者高大上一点,叫做流量整形,限流的目的是在遇到流量高峰期或者流量突增(流量尖刺)时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。目前有几种常见

2016-10-19 14:42:37 4223 2

原创 一起写RPC框架(十一)RPC服务提供端三--服务的调用

上一个小节简单的介绍了服务提供者端如何去编制一个服务的信息,然后将此服务的信息发送到注册中心上去的基本过程了,其实算是比较简单的,这节我们将简单的

2016-10-19 14:41:51 2927

原创 一起写RPC框架(十)RPC服务提供端二--服务的编织和注册

首先先进行服务的编织,将一个服务的一些基本信息编织成一个类,发送给注册中心,订阅者在注册中心取到的编织信息就可以调用该方法,这是整体的思路,我们在网络篇说过,所有的数据传输走RemotingTransporter,核心的传输主体要实现CommonCustomBody接口,接下来,我们就定义Provider发送给注册的类:编织的服务信息基本信息应该有1)服务的IP地址2)端口号

2016-10-19 14:40:27 3236 1

原创 一起写RPC框架(九)RPC服务提供端一--服务端的基本代码结构

本节介绍Provider端代码的搭建,工欲善其事必先利其器,Provider端的代码结构很重要,写代码的时候,我们需要知道我们自己要干嘛,好了,废话不多说,先写一个接口,接口是明确自己要干什么的利器,写个接口压压惊~Provider.javapackage org.laopopo.client.provider;import io.netty.channel.Channel;imp

2016-10-19 14:39:51 2920

原创 一起写RPC框架(八)RPC服务提供端开篇--人生若只如初见

关于RPC的网络模块其实还有很多地方可以挖掘,还有很多细节可以去深究,还有很多配置去优化,写代码,对待人生,玩游戏都是这样 写代码,人家的代码,总是人家的代码,跟别人家的孩子一样,性能是那么的卓越,bug总是那么少,你跟别人总是差一点,就差一点,这一点点就成了鸿沟了 人生也是一样,差一点点就成功了,差一点点就追到女神了,这一点点也就成了鸿沟了 游戏亦是如此,你差一点点就杀了对方的英雄了

2016-10-19 14:39:17 2091

原创 一起写RPC框架(七)RPC网络模块的搭建五 Netty模块

本节是本RPC网络传输的最后一个小节,讲解了Netty的部分,我之前已经讲过很多Netty的运用的基本知识了,也写过相关的博客讲述过这个模块,这边就不再赘述了Netty的模块,主要就是一些TCP的参数设置,handlers链的设置,编码器和译码器的编写,关于RPC的编码器和译码器,我们之前就讲述过了,也不多说,请求响应,我们之前也详细描述过还有一些Netty的零碎小知识(姿

2016-10-19 14:36:05 2545

原创 一起写RPC框架(六)RPC网络模块的搭建四 请求响应---异步"表白","同步"Yes,I do

大家知道网络通信都是异步的,当你使用网络去发送一个请求的之后,就会去等待这个请求对应的响应体,可是你却不知道这个响应到底何时到达。 这就是异步的好处也是异步的坏处,好处就是在请求发送出去之后,你就可以去做其他的事,就比如你跟你的女神用微信表白了,表白之后,你不需要眼睛直勾勾的盯着手机微信,可以去干一些其他的事情,坏处就是你不知道响应到底什么到来,所以即使你去做其他的事情也会不舒心,你会时不时的

2016-10-19 14:31:17 3054 4

原创 一起写RPC框架(五)RPC网络模块的搭建三 序列化

说到序列化,这在RPC的层面上也是很重要的一个环节,因为在我们的业务层面,你传输的一个对象,是一个Object,不过在网络上,却不管你传输的是Obj1,还是Obj2,网络只认byte,所以在代码层面上,如何将对象转化成byte数组,和如何将byte数组反序列化层对象,这也是很重要的,直接影响你的整个框架的性能java原生态的java.io.Serializable就对序列化提供了支持,

2016-10-19 14:30:02 3800 2

原创 一起写RPC框架(四)RPC网络模块的搭建二 Netty的编码器和译码器

上一节,我们说到写一个RPC,很核心的一个模块也是基础就是网络通讯部分,定义一个通用的网络传输对象,会方便我们的对业务层面的编码,我们会花费很少的心思在底层的字节流的网络传输上。  因为我们选用的是Netty,写过Netty的或者有一点Netty基础的,都知道我们需要C/S端写一个编码器和译码器,因为我们知道不管你传输对象定义的有多好,有多么的通用,在网络上传输的全部都是正常人看不懂的字节,而

2016-10-19 14:29:32 3929

原创 一起写RPC框架(二)RPC之项目搭建

Maven的多模块项目搭建还是比较方便的,结构清晰,模块依赖明确,很适合用来作为开发RPC的开发架构,我们开发的RPC起一个名字,因为大学一直酷爱魔兽,喜欢魔兽解说xiaoy,他有一个别名叫做laopopo,所以我就没多想,就起了一个名字叫做laopopo-rpc,名字蹩脚了一点,不过不重要,明朝开国皇帝朱元璋真名叫朱重八,老爸叫做朱五四,他依旧做了皇帝,所以英雄不问姓名~(项目截

2016-10-19 14:27:55 8191 2

原创 一起写RPC框架(三)RPC网络模块的搭建一 网络传输模型

现在N多网络通讯框架应该选用的都是Netty,基于多种原因吧:1)它很容易上手,它封装了网络传输底层的实现,但也有spring的开闭原则,可以根据用户的参数配置去定制属于自己的网络传输模型2)它优化了线程模型,且基于事件驱动,基于NIO,提高IO效率3)内存优化,直接内存的使用/池化的技术4)第四点,我也是认为很重要的一点,也是我们写这个RPC框架的核心点,就是有很多参考,基于ne

2016-10-19 14:27:16 4594 3

原创 一起写RPC框架(一)RPC之我所见

RPC 技术出来很多年了,出来的时候我估计还刚刚上大学,dubbo应该算是先驱者吧,下面的图更是经典中的经典RPC在我的认知体系中,其实最后简而言之,就是调用端,也可以称之为消费者(Consumer)获取到提供者的网络地址,并吧入参通过网络传递给Provider端,提供者端获取到参数,调用己方的方法,把结果再通过网络回传给消费者端整个流程代码实现,可以参考dubbo作者

2016-10-19 14:26:37 7610 2

原创 一起写RPC框架开篇说明

本来只是想写一写,学一学的,不过觉得还是应该跟大家一起分享一下一个完整的在我知识体系中相对健全的RPC框架写这个RPC的时候,我是写过一个的RPC的,其实不能称之为写,算抄吧,看过别人写的RPC,也无脑的抄了一遍别人的代码,抄完之后,问了冯大神,感觉收获很多,比每天看书看帖收获多得多所以想重新写一个,写的时候向记录一下写的大体流程,与大家做一个分享,共同进步,其实这次应该还

2016-10-19 14:25:47 5602 5

原创 一起学Netty(二十)netty的比较规范的C/S端的写法

看了RPC框架Jupiter的源码和RocketMQ的Netty部分的代码,最后还是总结一下,把与Netty相关的代码都截取出来,写出一个比较规范的DEMO这个DEMO还是比较简单的,但麻雀虽小五脏俱全啊,有心跳,有重连,有ack的,可以与大家分享一下~https://github.com/BazingaLyn/netty-study/tree/master/src/mai

2016-07-27 19:05:34 5851 4

原创 一起学Netty(十九)netty源码学习之netty server端源码初读(下)

我们总结一下,Netty的server端流程其实是很清晰的1)先初始化好boss和worker的NioEventLoopGroup,并初始化好Group中的每一个NioEventLoop,为每一个NioEventLoop都穿件一个selector对象2)Netty会在bind的动作上,去让boss的NioserverSocketChannel去绑定selector,并启动与boss捆绑在一起的thread,进入无尽的循环3)在这个生命不息,循环不止的方法中,主要做了两件事情,1是去select,

2016-07-27 19:05:15 4194

原创 一起学Netty(十八)netty源码学习之netty server端源码初读(上)

1)Netty的server端代码一开始初始化了两个EventLoopGroup,其实就是初始化EventLoop,每一个EventLoop的具体实现就是维护了一个任务队列,一个延迟任务队列,一个thread,并且每一个EventLoop都有一个属于自己的Executor执行器,这样做的好处就是每一个唯一的thread去不停的循环调用,去执行任务队列和延迟任务队列中的task,没有了上下文的切换们还要记得每一个EventLoop还初始化了一个selector,关于selector的创建,netty做了很大的

2016-07-27 19:03:37 8475 2

protoc-2.6.1-win32.zip

proto

2016-05-10

Netty in action

2016-04-11

spring+mybatis+sharding-jdbc 整合

下载后要jdk1.7 ,sql也在conf下,文档在http://blog.csdn.net/linuu/article/details/50929904

2016-03-19

spring +spring mvc+mybatis +bootstrap 基本整合

下载后请用jdk1.7编译,修改jdbc的用户名和密码,执行里面的user.sql

2016-03-07

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除