RPC分享.ppt

上传人:b****1 文档编号:1406208 上传时间:2022-10-22 格式:PPT 页数:36 大小:4.40MB
下载 相关 举报
RPC分享.ppt_第1页
第1页 / 共36页
RPC分享.ppt_第2页
第2页 / 共36页
RPC分享.ppt_第3页
第3页 / 共36页
RPC分享.ppt_第4页
第4页 / 共36页
RPC分享.ppt_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

RPC分享.ppt

《RPC分享.ppt》由会员分享,可在线阅读,更多相关《RPC分享.ppt(36页珍藏版)》请在冰豆网上搜索。

RPC分享.ppt

基础技术,RPC分享,Contents,背景,1.访问量逐年攀升服务器数不断增加,2.业务不断发展应用规模日趋庞大,3.对性能可靠性的要求越来越高,问题,对策,分布式服务架构,Allinone,垂直应用架构,流动计算架构,单一应用架构,VerticalApplication,DistributedService,ElasticComputing,。

application,service,110,101000,100010000,10000+,PV(万),架构演变过程,架构图,前端负载+缓存(lvs+nginx),web,web,web,web,webserver,user,user,product,product,order,order,消息中间件,统一配置平台,分布式缓存,DAL(分库分表、读写分离),db,db,db,db,db,db,Dbcluster,统一监控平台,使用RPC通信:

同步/异步调用client负载均衡.,orderweb,loginweb,order,distributedserver,LogicserverLayer,BaseserverLayer,RPC架构,底层IO,底层IO,client,sever,Transport,Tprotocol,TProcessor,用户代码,Netty,Tprotocol,TServiceClient,用户代码,Thritf通过接口描述文件生成存根代码,用Thritf的协议和序列化实现跨语言,服务端用netty做网络通信,Thrift提供客户端不同语言通信API,系统架构图,Registry,Monitor,Consumer,Consumer,init,syn,asyn,1.registry,0.start,2.subscribe,4.invoke,3.notify,5.count,与其它系统联系,Provider:

暴露服务的服务提供者(RPCServer)。

Consumer:

调用远程服务的服务消费者(RPCClient)。

Registry:

服务注册与发现的注册中心。

Monitor:

统计服务的调用次数和调用时间的监控中心。

Container:

服务运行容器。

Remoting,RPC,分布式事务,处理线程池,cluster,config,自动配置,monitor,registry,已完成,待完成,模块与功能,RPC相关技术,RPC要素,IO模型:

用什么样的通道将数据发送给对方(javabio/nio),数据协议:

用什么数据格式进行传输,双方的约定(Thrift),线程模型:

当接收到数据时,如何分发数据进行处理(netty),IO模型,IO请求划分两个阶段:

1.等待数据就绪2.从内核缓冲区拷贝到进程缓冲区按照请求是否阻塞分同步IO和异步IO,客服端,网络接口,远程内核,网络接口,本地内核,底层网络通信,服务器,Javabio/nio,Javabio/nio,系统调用,inTTransport,outTTransport,系统调用,inTTransport,outTTransport,inTProtocol,outTProtocol,TProcessor,业务代码,Tserver,ThreadPool,ThreadPool,ThreadPool,inTProtocol,outTProtocol,TServiceClient/TAsyncClient,通过IDL脚本生成存根代码,客户端代码,Thrift架构图,80,01,00,01,00,.,.,00,00,00,00,01,.,.,00,00,00,00,.,.,.,.,.,.,00,.,.,.,.,MessageVersion(I16),MessageType(I16),MessageName(string),MessageSeqid(I32),MessageEndTag(*),StuctBeginTag(*),StuctEndTag(*),Field1-N,0B,00,01,00,00,00,07,4d,69,63,68,61,65,6c,.,.,Field1(假设字符串:

Michael),FieldsStopTag(byte),FieldEndTag(*),FieldType(byte),Fieldid(I16),Length(I32),77,105,99,104,97,101,108,消息描述,参数体,参数结构,Thrift序列化协议,Thrift基础数据序列化,Thrift序列化压缩,可变长编码与zigzag编码:

Netty架构图,accept,client,Fork,Server,client,client,mainThread,普通网络服务模型,Reactor模式,DownStreamHandlerN,UpStreamHandler1,UpStreamHandler2,UpStreamHandlerN-1,DownStreamHandlerN-1,DownStreamHandler1,UpStreamHandlerN,DownStreamHandler1,ChannelPipeline,OtherdownStreamHandler,OtherupStreamHandler,OutBoundData,InBoundData,Socket(read/write),Nettyinternaliothreads(传输层实现),由channel/channelHandlerContext触发downrequest,sendUpStream,sendDownStream,Netty处理模型,accept,client,client,client,write,read,Register,数据统计,连接限制,数据统计,解码处理,超时机制,Thrift分发,编码处理,超时机制,异常日志,异常日志,OtherupStreamHandler,OtherdownStreamHandler,In/OutTransportadapter,In/OutTProtocol,In/OutTProcessor,业务实现,upStream,ChannelPipeline,downStream,Thrift,Thrift+Netty调用流程,功能介绍,.,.,上下文,80,01,00,01,00,.,.,ThriftMessage,.,.,.,.,.,.,.,.,.,.,80,01,00,01,.,.,.,.,00,00,00,01,MessageVersionAndType(I32),MessageName(string)固定标示上下文字符串”$_1_PC$_1_&_8_#”,MessageSeqid(I32),上下文消息,Thrift信息,MessageEndTag(*),Map,0B,0B,00,00,00,06,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,keyType(b),valueType(b),size(I32),mapEnd(*),Size个Key-value,Channelpool,server1,server2,server3,负载均衡,client.servers=192.168.49.63:

9090:

2,192.168.49.6:

9090:

4,192.168.49.25:

9090:

6,client,Requestqueue,信息在客户端标示,信息在服务端标示,client,server1,server1,server1,调用方式,Requestqueue,Channelpool,返回结果,ListenableFuture,1.同步请求,必须等待服务端返回结果,2.单向请求,只需将请求数据成功发送服务端,就立即返回。

3.异步请求,可以同时先发送多个请求,异步获取返回结果.ListenableFuture.get(),4.回调请求,通过异步实现。

ListenableFuture.addListener(),HeartbeatTimer,心跳检测,client,server1,server2,Requestqueue,Channelpool,1.发送心跳包(上下文中isHeartBeat=true),等待返回信息,2.在返回信息上下文中isHeartBeat=false,或者无返回信息,则移除相应的channel,3.将移除channel请求队列中没有发送的请求包,转移到其他存活channel。

已发送的请求包会在队列中等待超时处理,client.heartbeat-timeout=10s,客户端发送心跳信息,服务端发送心跳信息,超时机制,客户端:

client.read-timeout=60s#must=1ms客户端等待读数据时间client.write-timeout=60s#must=1ms客户端等待写数据时间client.serverProcess-timeout=10s#must=1s客户端传给服务端处理超时时间服务端:

server.processer-timeout=3s#若客户端没有传送处理超时时间,#服务端将用此默认处理超时时间,性能监控,Cpu与内存监控并发与线程监控运行时参数修改查看统计信息,开发易用性,1.Maven插件com.jumei.mojoparrot-maven-plugin1.0.02.两个goalt2p:

将thriftIDL文件生成java代码p2t:

将java代码生成thriftIDL文件,不要求精通ThriftIDL在java中通过标注方式编写接口通过maven插件实现java和Thrift相互转换,与Tomcat性能对比,后期功能,案例,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1