`

RPC 框架学习 好的参考学习

 
阅读更多

QiuRPC

QiuRPC 参考手册

RPC常见功能
一个通用的网络RPC框架,它应该包括如下元素:

1.具有服务的分层设计,借鉴Future/Service/Filter概念
2.具有网络的分层设计,区分协议层、数据层、传输层、连接层
3.独立的可适配的codec层,可以灵活增加HTTP,Memcache,Redis,MySQL/JDBC,Thrift等协议的支持。
4.将多年各种远程调用High availability的经验融入在实现中,如负载均衡,failover,多副本策略,开关降级等。
5.通用的远程调用实现,采用async方式来减少业务服务的开销,并通过future分离远程调用与数据流程的关注。
6.具有状态查看及统计功能
7.当然,最终要的是,具备以下通用的远程容错处理能力,超时、重试、负载均衡、failover……

QiuRPC特点
QiuRPC是一个采用JAVA实现的小巧的RPC框架,一共3K多行代码,实现了RPC的基本功能,开发者也可以自定义扩展,可以供大家学习探讨或者在小项目中使用,目前QiuRPC具有如下特点:
1. 服务端基于注解,启动时自动扫描所有RPC实现,基本零配置
2. 客户端实现Filter机制,可以自定义Filter
3. 基于netty的Reactor IO多路复用网络模型
4. 数据层提供protobuff和hessian的实现,可以扩展ISerializer接口自定义实现其他
5. 负载均衡算法采用最少活跃调用数算法,可以扩展ILoadBlance接口自定义实现其他
6. 客户端支持服务的同步或异步调用


系统改进点
1. 增加注册中心功能,在大项目中,一个项目可能依赖成百上千个服务,如果基于配置文件直接指定服务地址会增加维护成本,需要引入注册中心
2. 目前用的是反射和java代理实现的服务端存根和客户端代理,为了提高性能,可以把这些用javassit,asm等java字节码工具实现
3. 增加一些监控功能,为了增强服务的稳定性和服务的可控性,监控功能是不可或缺的
4. 目前应用协议采用的是最简单的协议,仅仅一个魔数+序列化的实体,这些需要增强,比如增加版本号以解决向前兼容性
5. 增加High availability的一些手段,目前只有负载均衡,其他的比如failover,多副本策略,开关降级等,过载保护等需要自己实现
6. 目前只支持java语言,后续可能会增加其他语言的支持

参考例子

1.  The service inteface:

public interface IServer1 {
   
    public Message echoMsg(String msg);
   
}

2.  The service inteface implement:

@ServiceAnnotation(name="myserver1")
public class MyServer1 implements IServer1{
    private static final Log log=LogFactory.getLog(MyServer1.class);

    @Override
    public Message echoMsg(String msg) {
        Message result=new Message();
        result.setMsg(msg);
        result.setData(new Date());
        return result;
    }

}

3.  The service main class:

public static void main(String[] args) {
        RpcServerBootstrap bootstrap=new RpcServerBootstrap();
        bootstrap.start(8080);
    }


4.  The client main class:


public class Client1 {
   
    public static void main(String[] args) {
        try {
            final IServer1 server1=RpcClientProxy.proxy(IServer1.class,"server1" , "myserver1");
            long startMillis=System.currentTimeMillis();
            for(int i=0;i<10000;i++)
            {
                final int f_i=i;
                send(server1,"hello"+f_i);
            }
            long endMillis=System.currentTimeMillis();
            System.out.println("spend time:"+(endMillis-startMillis));
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
   
    public static void send(IServer1 server1,int f_i)
    {
        Message msg = null;
        try
        {
            //Client config file used async="true",so we used future to get the async result,
            //if configured async="false",used msg=server1.echoMsg(f_i) instead
            server1.echoMsg(f_i);
            Future future = RpcContext.getContext().getFuture();
            msg=future.get();
            System.out.println("msg:"+msg.getMsg()+","+msg.getData());
        }
        catch(Throwable e)
        {
            e.printStackTrace();
        }
    }
}

5.  The config file at client side:


<application maxThreadCount="100">
    <service name="server1" connectStr="127.0.0.1:9090;127.0.0.1:8080" maxConnection="100" async="true"></service>
</application>


摘自: https://github.com/i1see1you/QiuRPC    轻量级学习RPC



摘自:https://github.com/wenbo2018/fox
分享到:
评论

相关推荐

    可参考的自定义实现rpc框架

    标题中的“可参考的自定义实现rpc框架”指的是一个关于如何设计和实现远程过程调用(RPC)框架的教程或示例项目。RPC允许不同计算机系统间的程序进行通信,仿佛它们是在同一台机器上直接调用函数一样。下面将详细...

    高性能RPC框架 nfs-rpc.7z

    RPC(Remote Procedure Call)是一种计算机通信协议,它允许程序在一台计算机上执行...以上是对“nfs-rpc”高性能RPC框架的一些可能实现和特性分析,具体的功能和实现细节需要参考该框架的文档或源代码进行深入学习。

    基于Python实现的一个简单的分布式高并发RPC框架+源代码+文档说明

    ## 用Python构建分布式高并发的RPC框架 ------ ### 一、为什么要写一个RPC框架? &gt; + 不是想要造轮子,Dubbo、gRPC、Thift...下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    基于自定义网络协议 、Reactor 网络模型的轻量RPC框架(源码+项目说明).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...基于 Connect UDP 和自定义网络协议(简单请求响应协议) 、Reactor 网络模型(one loop per thread + 线程池) 的轻量RPC框架(源码+项目说明).zip

    基于 Connect UDP 和自定义网络协议 、Reactor 网络模型 的轻量RPC框架(源码+项目说明).zip

    1、该资源内项目代码经过严格调试,下载即用确保可以运行!...基于 Connect UDP 和自定义网络协议(简单请求响应协议) 、Reactor 网络模型(one loop per thread + 线程池) 的轻量RPC框架(源码+项目说明).zip

    网络连接服务开发人员参考库(第3卷)RPC与Wnet

    6. **错误处理**:当远程调用失败时,RPC框架会提供一套标准的错误处理机制。 7. **实现**:多种编程语言都有RPC实现,如Microsoft的DCE/RPC和开源的gRPC。 **Windows网络(Wnet)** Wnet是Windows操作系统中用于...

    phprpc中文文档

    这个中文文档是对于Phprpc框架的详细解释,对于初学者和进阶用户都非常有用。文档包含了框架的基本概念、安装指南、使用方法、API参考以及常见问题解答等多个部分,旨在帮助用户快速理解和应用Phprpc。 1. **RPC...

    netty的rpc协议的简单实现

    Netty RPC(远程过程调用)是基于Java的高性能网络通信框架Netty实现的一种通信机制。...项目的源代码“rpc-demo”提供了具体的实现细节,包括服务端、客户端、编解码器以及相关配置,供开发者学习和参考。

    Java RPC框架熔断降级机制原理解析

    Java RPC框架熔断降级机制原理解析 Java RPC框架熔断降级机制是指在RPC调用过程中,出现服务端不可用或...Java RPC框架熔断降级机制原理解析可以作为开发者学习和工作的参考,帮助开发者快速构建高可用的分布式系统。

    小程序 高性能RPC框架 nfs-rpc(源码).rar

    免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...

    PHPRPC3.0分享

    RPC框架的一个显著特点是其跨语言的能力,这表明PHPRPC3.0不仅限于PHP,还支持ASP、Delphi、Java、ActionScript 2、ActionScript 3等多种语言。这意味着开发者可以利用他们熟悉的语言来实现远程调用,大大提高了灵活...

    网络连接服务开发人员参考库(第3卷)RPC与Wnet (前十章)

    常见的RPC框架有gRPC、Dubbo、Thrift等,它们提供了多种语言支持,以及高效、安全的通信机制。选择合适的RPC框架应考虑性能、易用性、社区支持等因素。 ### 6. Wnet(Windows Network)简介 Wnet是微软Windows操作...

    基于Java实现的基于netty轻量的高性能分布式RPC服务框架

    【作品名称】:基于Java实现的基于netty轻量的高性能分布式RPC服务框架 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】...

    Java RPC框架过滤器机制原理解析

    本文主要介绍了Java RPC框架过滤器机制原理解析,通过示例代码详细介绍了过滤器机制的实现原理,对大家的学习或者工作具有一定的参考学习价值。 一、过滤器机制的概念 过滤器机制是一种设计模式,用于将一个请求...

    参加阿里巴巴中间件比赛时的rpc项目源码,高性能RPC框架.zip

    计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。 全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的...

    Trick-Rpc-Framework:一个简单的RPC框架的实现

    了解Trick-Rpc-Framework的实现可以帮助我们更好地理解RPC的工作原理,同时也可以为我们自定义RPC框架或优化现有框架提供参考。在实际使用中,可以根据具体需求扩展其功能,例如添加负载均衡、服务治理等特性。 ...

    EasyRpc:EasyRpc是一个基于Netty,ZooKeeper和ProtoStuff的简单,高性能,易于使用的RPC框架。

    EasyRpc EasyRpc是基于Netty,ZooKeeper和ProtoStuff开发的一个简单易用,便于学习的RPC框架。 1特性简单易用;注释完善,方便学习;低延迟,基于Netty 4;解决TCP粘包/拆包问题;支持非双向的同步/异步调用;基于...

    koalas-rpc v1.0.zip

    通过阅读这份文档,用户可以更好地理解和使用koalas-rpc框架。 总结来说,"koalas-rpc v1.0.zip"是一个关于RPC框架的开源项目,包含了源代码、可能的毕业设计论文内容、计算机案例和可能的建站工具。开发者和学习者...

    2015年阿里巴巴中间件比赛,实现rpc框架基本功能.zip

    计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。 全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的...

Global site tag (gtag.js) - Google Analytics