不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2018-11-04 18:13  分类:Java库/系统 

对于RPC而言,服务的降级也是必不可少的,何为服务的降级,就是在业务洪流来的时候,服务器的压力陡增,数据库的压力也很大的时候,轻量化服务的功效,比如某个非核心服务需要调用数据库的,我们降级的服务不需要调用数据库,就比如我们在某某电商购物的时候,商品详情页的侧边栏一般会有电商推荐的一些比较类似的产品,这个后台的机制可能是某个推荐算法,根据用户浏览商品的记录给出推荐的产品,这是非核心的逻辑,这个功能在服务器的压力比较大的时候,可以进行降级的处理,我们可以给出几个默认的产品返回,因为推荐算法可能会设计大数据的计算和分析,甚至设计几次的数据库查询,在这个时候我们如果让这个后台方法默认返回几个固定的值的时候,可以减轻服务的压力,给其他的核心服务,例如支付,详情页等服务做出服务资源的让步

作者:php-note.com  发布于:2018-11-04 18:06  分类:Java库/系统 

对于远程调用来说,限流是很重要的,这是对自己的保护政策,因为为了保证在业务高峰期,线上系统也能保证一定的弹性和稳定性,最有效的方案就是进行服务降级了,而限流就是降级系统最常采用的方案之一

作者:php-note.com  发布于:2018-11-04 17:54  分类:Java库/系统 

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

作者:php-note.com  发布于:2018-11-04 17:33  分类:Java库/系统 

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

作者:php-note.com  发布于:2018-11-04 16:42  分类:Java库/系统 

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

作者:php-note.com  发布于:2018-11-04 16:34  分类:Java库/系统 

关于RPC的网络模块其实还有很多地方可以挖掘,还有很多细节可以去深究,还有很多配置去优化,写代码,对待人生,玩游戏都是这样

写代码,人家的代码,总是人家的代码,跟别人家的孩子一样,性能是那么的卓越,bug总是那么少,你跟别人总是差一点,就差一点,这一点点就成了鸿沟了

作者:php-note.com  发布于:2018-11-04 16:30  分类:Java库/系统 

本节是本RPC网络传输的最后一个小节,讲解了Netty的部分,我之前已经讲过很多Netty的运用的基本知识了,也写过相关的博客讲述过这个模块,这边就不再赘述了

Netty的模块,主要就是一些TCP的参数设置,handlers链的设置,编码器和译码器的编写,关于RPC的编码器和译码器,我们之前就讲述过了,也不多说,请求响应,我们之前也详细描述过

虽然之前说过很多次,我还是没有理解Netty 高水位和地水位的那个问题,希望有大神给出不设置高水位和低水位会出现的问题的代码和讲解

作者:php-note.com  发布于:2018-11-04 16:17  分类:Java库/系统 

大家知道网络通信都是异步的,当你使用网络去发送一个请求的之后,就会去等待这个请求对应的响应体,可是你却不知道这个响应到底何时到达。

这就是异步的好处也是异步的坏处,好处就是在请求发送出去之后,你就可以去做其他的事,就比如你跟你的女神用微信表白了,表白之后,你不需要眼睛直勾勾的盯着手机微信,可以去干一些其他的事情,坏处就是你不知道响应到底什么到来,所以即使你去做其他的事情也会不舒心,你会时不时的去看手机的,这就是异步"表白"的优点和缺点了吧

作者:php-note.com  发布于:2018-10-19 00:24  分类:Java库/系统 

ReplayingDecoder 和ByteToMessageDecoder 最大的不同就是ReplayingDecoder 允许你实现decode()和decodeLast()就像所有的字节已经接收到一样,不需要判断可用的字节,举例,下面的ByteToMessageDecoder 实现:

public class IntegerHeaderFrameDecoder extends ByteToMessageDecoder {

    @Override
   protected void decode(ChannelHandlerContext ctx,
                           ByteBuf buf, List<Object> out) throws Exception {

     if (buf.readableBytes() < 4) {
        return;
     }

     buf.markReaderIndex();
     int length = buf.readInt();

     if (buf.readableBytes() < length) {
        buf.resetReaderIndex();
        return;
     }

     out.add(buf.readBytes(length));
   }
 }
作者:php-note.com  发布于:2018-10-17 00:12  分类:Java库/系统 

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