您的位置:首页 > 编程语言 > Java开发

使用protostuff自定义编解码器优化springcloud-feign性能

2018-11-09 10:54 2376 查看
前言

Spring Cloud feign是伪RPC方式解决微服务间的调用。翻看FeignCloudFeign源码,可以看到Feign默认使用HttpUrlConnection; 代码在DefaultFeignLoadBalancedConfiguration 的Client.Default。

这里特意说明下,其他替代方式有OKhttp和HTTPClient,这两种方式有连接池,可以减少创建连接的性能损耗,但是多家实测效果表明,HttpUrlConnection的效率上是最高的,这也是feign默认的原因,如果在轻型应用不考虑速度考虑CPU的情况下,可以考虑替换成OKhttp和HttpClient。

在序列化方面,springboot中HttpMessageConverters 默认使用jackson2方式进行序列化和反序列化。 jackson的效率在于GSON和fastjson之上。

正常情况下使用jackson2支持前后端开发基本没有什么问题,但是如果是微服务间频频通信,使用jackson2序列化和反序列化会占用不少系统资源,并且效率较差。 这里有个git地址来对比各种序列化和反序列化框架的性能 https://github.com/eishay/jvm-serializers/wiki,部分内容如下:


Ser Time+Deser Time (ns)
View Code  

然后在需要用protostuff的feignClient上注明configuration = ProtoFeignConfiguration.class)即可

@FeignClient(value = "service",path ="/nafosRemoteCall/test" , configuration = ProtoFeignConfiguration.class)

 

详细代码请参考nafos-network: https://gitee.com/huangxinyu/BC-NETTYGO

 

 

NAFOS

一个基于netty的轻量级高性能服务端框架。 

简介

nafos是一个基于netty的高性能服务器框架,其目的在于易上手,易扩展,让开发人员更致力于业务开发。 在前后端分离的web架构上,或者APP,手游,nafos都是一个很不错的选择。

除此之外,sample中也给出了超简单的扩展方案,使得nafos在分布式扩展上能更胜一筹。

文档

特点

  • 1、简单易用:通过简单的配置文件即可建立完善的启动方案,然后就可以开心的关注业务代码了;
  • 2、串行设计 :单用户的所有请求都是串行进行,完美解决单用户并发问题,减少锁的使用;
  • 3、高性能:网络层采用netty作为中间件,同等配置及优化条件下,相比tomcat性能可提升一倍;
  • 4、易扩展:整合了springBoot,可完美支持spring大家族系列;
  • 5、强兼容: 可单机同时支持HTTP,TCP,websocket等服务,小规模应用下不用多开占用资源;
  • 6、工具类丰富:封装所有开发中常见工具类可直接调用;
  • 7、房间策略:封装常见游戏的房间策略,开房,比赛,聊天可直接调用,无需多写;
  • 8、模块化:多个模块之间相互解耦,喜欢哪个用哪个,不喜欢直接丢弃。
  • 9、脚本支持:内有现成的shell脚本可以直接使用,开关机,数据库备份等;
  • 10、自带分布式限流器,有IP策略和总流量策略等漏桶限流,抵御攻击。
  • 11、自带protostuff的feign编解码器,操作简单的同时可以极大程度优化feign端对端的通信问题。
  • 12、封装了kafa和rabbitMQ,工具类一般超简单使用,无需关注内部业务;
  • 13、丰富教程:除了详细文档外,在sample模块中还有多模块使用案例,开发无忧~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: