热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

百亿级企业级RPC框架开源了!

今天给大家介绍给一款性能卓越的RPC开源框架,其作者就是我推荐每个Java程序员都应该看的《Java生态核心知识点整理》的原作者张玉龙。说实话我第一次看到这个资料的时候,就感觉作者

今天给大家介绍给一款性能卓越的 RPC 开源框架,其作者就是我推荐每个 Java 程序员都应该看的《Java 生态核心知识点整理》的原作者张玉龙。

说实话我第一次看到这个资料的时候,就感觉作者是一位真正的技术爱好者,后来通过朋友介绍终于认识了他。交谈之中得知他在美团工作,最初和朋友一起整理这份资料的初衷是为了面试,估计每天需要面试太多的应聘者,这份资料成了助手。强烈建议没有看这份资料的同学学习下,作为 Java 生态知识体系构建也是一份不错的资源。

后来得知业余时间他在研发一款开源的 RPC 开源框架,并且经过测试可支持百亿级别的调用,并且于近期终于完成推出 1.0 版本。这款开源软件名字叫做 Koalas,源代码地址:koalas-rpc,下面对这款开源软件做详细介绍,内容来源于 Koalas 。

百亿级企业级 RPC 框架开源了!

Koalas 介绍

企业生产级百亿日 PV 高可用可拓展的 RPC 框架。理论上并发数量接近服务器带宽,客户端采用 thrift 协议,服务端支持 netty 和 thrift 的 TThreadedSelectorServer 半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计,支持 trace 跟踪等,天然接入 cat 支持数据大盘展示等,持续为个人以及中小型公司提供可靠的 RPC 框架技术方案。

Thrift 是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由 Facebook 为“大规模跨语言服务开发”而开发的。

为什么叫 koalas

树袋熊英文翻译,希望考拉 RPC 给那些不太喜欢动手自己去造***的人提供可靠的 RPC 使用环境。

为什么要写这个 RPC

市面上常见的 RPC 框架很多,grpc,motan,dubbo 等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架和 spring 一样,虽然号称是轻量级,但是用起来却是让我们很蹩脚,大量的配置,繁杂的 API 设计,其实,我们根本用不上这些东西!!!

我也算得上是在很多个互联网企业厮杀过,见过很多很多的内部 RPC 框架,有些优秀的设计让我非常赞赏,有一天我突然想着,为什么不对这些设计原型进行聚合归类,于是自己搞一套【轻量级】 RPC 框架呢,于是利用业余时间开发此项目,希望源码对大家对认识 RPC 框架起到推进的作用。

技术栈

  • thrift 0.8.0
  • spring-core-4.2.5,spring-context-4.2.5,spring-beans-4.2.5
  • log4j,slf4j
  • org.apache.commons(v2.0+)
  • io.netty4
  • fastJson
  • zookeeper
  • 点评cat(V3.0.0+ 做数据大盘统计上报等使用,可不配置)
  • AOP,反射代理等

技术架构

Koalas 架构图
百亿级企业级 RPC 框架开源了!

序列化

考察了很多个序列化组件,其中包括jdk原生,kryo、hessian、protoStuff,thrift,json等,最终选择了Thrift,原因如下:原生JDK序列化反序列化效率堪忧,其序列化内容太过全面kryo和hessian,json相对来说比原生JDK强一些,但是对跨语言支持一般,所以舍弃了,最终想在protoBuf和Thrift协议里面选择一套框架,这俩框架很相通,支持跨语言,需要静态编译等等。但是protoBuf不带RPC服务,本着提供多套服务端模式(thrift rpc,netty)的情况下,最终选择了Thrift协议。

IO线程模型

原生socket可以模拟出简单的RPC框架,但是对于大规模并发,要求吞吐量的系统来说,也就算得上是一个demo级别的,所以BIO肯定是不考虑了,NIO的模型在序列化技术选型的时候已经说了,Thrift本身支持很多个io线程模型,同步,异步,半同步异步等(SimpleServer,TNonblockingServer,THsHaServer,TThreadedSelectorServer,TThreadPoolServer),其中吞吐量最高的肯定是半同步半异步的IO模TThreadedSelectorServer了,具体原因大家可自行google,这次不做多的阐述,选择好了模型之后,发现thrift简直就是神器一样的存在,再一想,对于服务端来说,IO模型怎么能少得了Netty啊,所以下决心也要支持Netty,但是很遗憾Netty目前没有对Thrift的序列化解析,拆包粘包的处理,但是有protoBuf,和http协议的封装,怎么办,自己在netty上写对thrift的支持呗,虽然工作量大了一些,但是一想netty不就是干这个事儿的嘛- -!

服务发现

支持集群的RPC框架里面,像dubbo,或者是其他三方框架,对服务发现都进行的封装,那么自研RPC的话,服务发现就要自己来写了,那么简单小巧容易上手的zookeeper肯定是首选了。

内容展示

实际性能压测

8C 16G mac 开发本,单机 10000 次请求耗时截图

百亿级企业级 RPC 框架开源了!

10w 次请求,大约耗时 12s,平均 qps 在8000左右,在集群环境下会有不错的性能表现

数据大盘展示

koalas2.0 已经接入了 cat 服务,cat 服务支持 qps 统计,可用率,tp90line,tp99line,丰富自定义监控报警等,接入效果图

百亿级企业级 RPC 框架开源了!

丰富的可视参数,流量统计,日,周,月报表展示等。

链路跟踪

对 RPC 服务来说,系统间的调用和排查异常接口,确定耗时代码是非常重要的,只要接入了 cat,koalsa-rpc 天然的支持链路跟踪,一切尽在眼前!

百亿级企业级 RPC 框架开源了!

最后

作者非常具有技术情怀,在聊天中说就剩这点爱好了,要坚持下去。听了这句话啥都不说了,点击下方链接,先 Star 为敬。

https://gitee.com/a1234567891/koalas-rpc


推荐阅读
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
    前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
author-avatar
迷茫的路人甲-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有