报名了阿里中间件性能大赛,我来说是一个全新的挑战,一切从空白学起,比赛的过程也是学习的过程
是的,想让自己学好,给自己报一个比赛吧~
就像当初学围棋,也是报了围棋比赛,为了不至于输的太惨,一个星期里学了好多东西
第一天 Java回调机制 晴
首先还是来看看赛事介绍
比赛总共分为两道题:"RPC"与"MOM”,两题都需完成。我们会对"RPC"成绩(qps)进行排名,排名前100位的队伍有资格进入MOM的比赛环节,若未进入前100名直接淘汰,最终名次由"MOM"成绩决定 。
首先解决RPC的,从今天开始,边学变解决这个问题
RPC赛题
一个简单的RPC框架
RPC(Remote Procedure Call )——远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
框架——让编程人员便捷地使用框架所提供的功能,由于RPC的特性,聚焦于应用的分布式服务化开发,所以成为一个对开发人员无感知的接口代理,显然是RPC框架优秀的设计。
题目要求
1.要成为框架:对于框架的使用者,隐藏RPC实现。
2.网络模块可以自己编写,如果要使用IO框架,要求使用netty-4.0.23.Final。
3.支持异步调用,提供future、callback的能力。
4.能够传输基本类型、自定义业务类型、异常类型(要在客户端抛出)。
5.要处理超时场景,服务端处理时间较长时,客户端在指定时间内跳出本次调用。
6.提供RPC上下文,客户端可以透传数据给服务端。
7.提供Hook,让开发人员进行RPC层面的AOP。
衡量标准
满足所有要求。性能测试。
基础的RPC知识这里就不提了,同学们自己参考 RPC
实现基础的RPC框架也不难,主要使用了动态代理技术,简单说就是把客户端调用的方法代理到服务器端中执行,服务器端返回执行结果给客户端
难点在于 异步调用、返回异常类型、处理超时场景等
首先开始解决异步调用问题,如何实现异步框架,参考 http://www.cnblogs.com/Hybird3D/p/3346582.html
要实现异步调用,首先又得掌握Java回调
回调问题,有点类似于ajax的原理,把自己传递给对方,当对方要传递数据给自己时,直接调用自己的方法就可以了
参考
http://hellosure.iteye.com/blog/1130176
今天先学习了Java的回调原理,明天使用它来做出异步RPC框架
版权声明:本文为博主原创文章,未经博主允许不得转载。