轻量级RPC设计与实现第四版】的更多相关文章

在本版本中引入了SPI机制,关于Java的SPI机制与Dubbo的SPI机制在以前的文章中介绍过. 传送门:Dubbo的SPI机制与JDK机制的不同及原理分析 因为设计的RPC框架是基于Spring的,时常会遇到依赖注入问题.Spring中也有SPI机制,但是它有有个缺点,就是在利用SPI机制实例化具体的服务类时,如果具体的服务类中调用其他的bean,就会实例化失败.主要因为该具体的服务类并没有放入到Spring容器中.本项目将有效解决这个问题. 在设计的RPC框架中加入了该机制,来实现不同序列…
在前两个版本中,每次发起请求一次就新建一个netty的channel连接,如果在高并发情况下就会造成资源的浪费,这时实现异步请求就十分重要,当有多个请求线程时,需要设计一个线程池来进行管理.除此之外,当前方法过于依赖注册中心,在高并发情况下对注册中心造成了压力:另外如果注册中心出现宕机等情况,那么整合系统就崩溃了,为了解决这个问题,添加了一个适合高并发的服务缓存机制.以上为该版本的新增内容. 异步请求和线程池 这里就不具体介绍异步请求的概念了.用一个通俗的例子解释,如你在饭店点餐,当你点好餐后,…
在最近一段时间里,通过搜集有关资料加上自己的理解,设计了一款轻量级RPC,起了一个名字lightWeightRPC.它拥有一个RPC常见的基本功能.主要功能和特点如下: 利用Spring实现依赖注入与参数配置 利用Netty来实现客户端与服务端的远程通信 利用Hessian来实现序列化 设置Zookeeper作为注册中心 新设监控器,通过心跳机制来判断服务端与监控器的网络连接状况,当出现不稳定时,认为服务端出现了问题,在注册中心删除相关的服务信息. 利用Netty的Promise来实现异步的传送…
在上一个版本中利用netty实现了简单的一对一的RPC,需要手动设置服务地址,限制性较大. 在本文中,利用zookeeper作为服务注册中心,在服务端启动时将本地的服务信息注册到zookeeper中,当客户端发起远程服务调用时,先从zookeeper中获取该服务的地址,然后根据获得的这个地址来利用netty进行网络传送. 在服务端和注册中心之间需要建立监听,当服务信息发生变化或网络连接等问题时需要对注册中心的服务信息进行修改.在本文中创建了服务注册监控中心,利用心跳机制来判断与服务端是否有较稳定…
什么是RPC RPC (Remote Procedure Call Protocol), 远程过程调用,通俗的解释就是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样,不需要了解底层网络技术的协议. 简单的整体工作流程 请求端发送一个调用的数据包,该包中包含有调用标识,参数等协议要求的参数.当响应端接收到这个数据包,对应的程序被调起,然后返回结果数据包,返回的数据包含了和请求的数据包中同样的请求标识,结果等. 性能影响因素 利用的网络协议.可以…
最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们设计用户界面的时候,我们总是很多时候通过提供自定义应用资源和代码的方法来支持特定设备配置,但有一点特别需要注意的,那就是我们必须保证我们的设计方案有足够的灵活性来应对各种变化,让他们变得简单,而不是过度的挤压他们,一下是我的一些建议: 设计正常尺寸屏幕和中等分辨率的app.随着时间的推移,设备有着向更大尺寸,…
Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用.高可用的 RPC 服务框架. Motan 功能特点:简单.易用.高可用 无侵入集成.简单易用,通过 Spring 配置方式,无需额外代码即可集成分布式调用能力. 集成服务发现和服务治理能力,灵活支持多种配置管理组件,如 Consul.ZooKeeper 等. 支持自定义动态负载均衡.跨机房流量调整等…
支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用.高可用的 RPC 服务框架. Motan 功能特点:简单.易用.高可用 无侵入集成.简单易用,通过 Spring 配…
Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标 Redola.Rpc 的一个小目标:20000 tps. Concurrency level: 8 threads Complete requests: 20000 Time taken for tests: 0.886 seconds Time per request: 0.044 ms (avg) Requests per second: 22573 [#/sec] (avg) Concurrency level: 8…
<Thinking In Java第四版>拾遗 转自我的github(http://katsurakkkk.github.io/2016/05/Thinking-In-Java%E7%AC%AC%E5%9B%9B%E7%89%88-%E6%8B%BE%E9%81%97) 近日重读了<Thinking In Java第四版>(可能版本比较老),发现一些有趣的和值得注意的地方,在此作个记录. 返回值过载 不能用返回值对函数进行overload,因为有可能调用方并不关心返回值,这就造成了…