<p align="center">
<img src="https://images.gitee.com/uploads/images/2019/0417/122151_abcd2032_536094.png" width="300">
<br>
<a href="https://www.apache.org/licenses/LICENSE-2.0" align="center">
<img alt="code style" src="https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square">
</a>
<a href="https://github.com/996icu/996.ICU/blob/master/LICENSE" align="center">
<img alt="996icu" src="https://img.shields.io/badge/license-NPL%20(The%20996%20Prohibited%20License)-blue.svg">
</a>
</p>
# 一:项目介绍
[开发者接入](https://gitee.com/a1234567891/koalas-rpc/wikis/%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E?sort_id=1424137)
koalas-RPC 个人作品,提供大家交流学习,有意见请私信,欢迎拍砖。客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计等,QPS统计,TP90,TP99,TP95等丰富可视化数据,持续为个人以及中小型公司提供可靠的RPC框架技术方案。
##### 1:为什么要写这个RPC
市面上常见的RPC框架很多,grpc,motan,dubbo等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架和spring一样,虽然号称是轻量级,但是用起来却是让我们很蹩脚,大量的配置,繁杂的API设计,其实,我们根本用不上这些东西!!! 我也算得上是在很多个互联网企业厮杀过,见过很多很多的内部RPC框架,有些优秀的设计让我非常赞赏,有一天我突然想着,为什么不对这些设计原型进行聚合归类,自己搞一套【轻量级】RPC框架呢,碍于工作原因,一直没有时间倒腾出空,十一期间工作闲暇,说搞就搞吧,落地不易,很多细节性问题,比如tcp中怎么解决大量的wait-time,如何做到thrift和netty的兼容等等大量细节的优化,希望源码对大家对认识RPC框架起到推进的作用。东西越写越多,有各种问题欢迎随时拍砖
##### 2:为什么叫koalas
树袋熊英文翻译,希望考拉RPC给那些不太喜欢动手自己去造轮子的人提供可靠的RPC使用环境
##### 3:技术栈
- [x] thrift 0.8.0
- [x] spring-core-4.2.5,spring-context-4.2.5,spring-beans-4.2.5等spring源码
- [x] log4j,slf4j
- [x] org.apache.commons(v2.0+)
- [x] io.netty4
- [x] fastJson
- [x] zookeeper
- [x] 点评cat(V3.0.0+ 做数据大盘统计上报等使用,可不配置)
- [x] AOP,反射代理等
##### 4:关于技术选型
1. 序列化篇 考察了很多个序列化组件,其中包括jdk原生,kryo、hessian、protoStuff,thrift,json等,最终选择了Thrift,原因如下 原生JDK序列化反序列化效率堪忧,其序列化内容太过全面kryo和hessian,json相对来说比原生JDK强一些,但是对跨语言支持一般,所以舍弃了,最终想在protoBuf和Thrift协议里面选择一套框架,这俩框架很相通,支持跨语言,需要静态编译等等。但是protoBuf不带RPC服务,本着提供多套服务端模式(thrift rpc,netty)的情况下,最终选择了Thrift协议。
2. 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不就是干这个事儿的嘛- -!
3. 服务发现 支持集群的RPC框架里面,像dubbo,或者是其他三方框架,对服务发现都进行的封装,那么自研RPC的话,服务发现就要自己来写了,那么简单小巧容易上手的zookeeper肯定是首选了。
![输入图片说明](https://gitee.com/uploads/images/2019/0425/175955_058b77a7_536094.png "屏幕截图.png")
##### 5:安装教程
考拉RPC确保精简,轻量的原则,只需要zk服务器进行服务发现(后续版本服务治理可能需要Datasource),对于zookeeper的各个环境安装教程请自行google,不在本安装教程内特意说明 如果需要cat的数据大盘功能,想更方便的查看服务的调用情况,需要安装cat服务,至于cat的安装就更简单了,就是war包扔在tomcat里面运行,然后配置一些参数即可,当然你也可以不接入cat,单独的作为RPC框架来使用。 CAT接入参考:https://github.com/dianping/cat
# 二:使用说明
##### 1:前期准以及依赖
maven依赖
```
<dependency>
<groupId>koalas.rpc</groupId>
<artifactId>com.Koalas.rpc</artifactId>
<version>Koalas-1.0-SNAPSHOT</version>
</dependency>
```
关于私服的引用问题,记得全局文件不要把全局的依赖都代理掉,因为这么做只能从aliyun的私服上下载项目,由于koalas-rpc中的Cat依赖只在美团点评的私有仓库中存在,这么做会下载依赖失败,所以不要暴力的设置下面的代理做法。
```
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
```
正确的做法是将代理去掉,直接按照作者在pom.xml文件中给定的依赖仓库地址就可以了。
首先需要编写自己的thrift idl文件了,这里多说一句,在群里的小伙伴曾经说过idl文件编写不熟悉,有可能出错 这里顺带说一嘴,thrift的ldl文件和写java的请求体和service几乎没有任何区别,熟能生巧,上手之后非常简单,推荐大家去google一些相关的入门文章即可 下面截图为测试的thrift文件
```
namespace java thrift.service
include 'WmCreateAccountRequest.thrift'
include 'WmCreateAccountRespone.thrift'
service WmCreateAccountService {
WmCreateAccountRespone.WmCreateAccountRespone getRPC(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest1(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest2(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest3(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest4(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest5(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest6(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest7(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koaloasTest8(1:WmCreateAccountRequest.WmCreateAccountRequest wmCreateAccountRequest);
WmCreateAccountRespone.WmCreateAccountRespone koal
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
企业生产级百亿日PV高可用可拓展的RPC框架。理论上并发数量接近服务器带宽,客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,泛化调用,页面流量统计,泛化调用等,支持trace跟踪等,天然接入cat支持数据大盘展示等 1:为什么要写这个RPC 市面上常见的RPC框架很多,grpc,motan,dubbo等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架和spring一样,虽然号称是轻量级,但是用起来却是让我们很蹩脚,大量的配置,繁杂的API设计,其实,我们根本用不上这些东西!!! 我也算得上是在很多个互联网企业厮杀过,见过很多很多的内部RPC框架,有些优秀的设计让我非常赞赏,有一天我突然想着,为什么不对这些设计原型进行聚合归类,自己搞一套【轻量级】RPC框架呢,碍于工作原因,一直没有时间倒腾出空,十一期间工作闲暇,说搞就搞吧,落地不易,很多细节性问题,比如tcp中怎么解决大量的wait-time,如何做到thrift和netty的兼容等等
资源推荐
资源详情
资源评论
收起资源包目录
koalas-rpc开发框架.rar (100个子文件)
.gitignore 593B
spring.handlers 57B
WmCreateAccountService.java 375KB
KoalasAbstractNonblockingServer.java 32KB
HeartbeatService.java 30KB
GenericService.java 29KB
WmCreateAccountRequest.java 27KB
KoalasClientProxy.java 24KB
KoalasHandler.java 22KB
GenericRequest.java 21KB
ZookeeperClient.java 20KB
KoalasMethodInterceptor.java 19KB
KoalasTrace.java 17KB
HeartBeat.java 17KB
KoalasAnnotationBean.java 16KB
KoalasBinaryProtocol.java 16KB
KoalasBeanDefinitionParser.java 15KB
KoalasRpcException2.java 15KB
KoalasRpcException1.java 15KB
KoalasRpcException.java 15KB
KoalasThreadedSelectorServer.java 15KB
WmCreateAccountRespone.java 14KB
KoalasRsaUtil.java 11KB
TKoalasFramedTransport.java 11KB
TestServiceAsync.java 8KB
AbstractKoalsServerPublisher.java 7KB
WmCreateAccountServiceNettyImpl.java 7KB
WmCreateAccountServiceThriftImpl.java 7KB
WmCreateAccountServiceImpl.java 6KB
KoalasPoolableObjectFactory.java 6KB
ThriftServer.java 6KB
ZookeeperServer.java 6KB
NettyServer.java 6KB
GenericServiceImpl.java 5KB
TestServiceSync.java 5KB
DirectClisterImpl.java 5KB
ZookeeperClusterImpl.java 4KB
ThriftNativeClient.java 4KB
KoalasAsyncCallBack.java 3KB
ReleaseResourcesKoalasAsyncCallBack.java 3KB
AbstractBaseIcluster.java 3KB
ClientRunSync.java 3KB
TestServiceAsync.java 3KB
ZookServerConfig.java 2KB
KoalasAopUtil.java 2KB
KoalasServerPublisher.java 2KB
IPUtil.java 2KB
RemoteServer.java 2KB
TestServiceSync.java 2KB
KoalasClient.java 2KB
KoalasDecoder.java 1KB
GenericApi.java 1KB
KoalasThreadedSelectorWorkerExcutorUtil.java 1KB
ThriftNative.java 1KB
ClientRunSync.java 1KB
KoalasDefaultThreadFactory.java 1KB
ThriftNativeServer.java 1KB
NettyServerInitiator.java 1KB
RandomLoadBalancer.java 1KB
ClientRunAsync.java 1KB
HeartbeatServiceImpl.java 1KB
AbstractLoadBalancer.java 1KB
ClientRunAsync.java 1KB
KoalasBeanHandler.java 877B
LocalMockInterceptor.java 820B
ServerObject.java 812B
KoalasAop.java 755B
KoalasServer.java 721B
KoalasAop.java 637B
KoalasAop.java 610B
KoalasEncoder.java 565B
KoalasAop.java 546B
TraceThreadContext.java 544B
OutMaxLengthException.java 526B
KoalasExceptionUtil.java 506B
ServerRun.java 483B
ServerRunThrift.java 482B
ServerRunNetty.java 481B
RSAException.java 481B
Invocation.java 414B
Icluster.java 380B
KoalasRegexUtil.java 312B
ILoadBalancer.java 244B
IkoalasServer.java 195B
ErrorType.java 181B
LICENSE 11KB
README.md 40KB
java历史进程.pdf 214KB
log4j.properties 1KB
app.properties 21B
spring.schemas 61B
pom.xml 11KB
koalas-server-thrift.xml 2KB
koalas-api.xml 1KB
koalas-server-netty.xml 1KB
koalas-client.xml 1KB
koalas-client.xml 1KB
koalas-server.xml 1004B
koalas-api.xml 559B
koalas-rpc.xsd 5KB
共 100 条
- 1
资源评论
野生的大熊
- 粉丝: 229
- 资源: 247
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功