zoukankan      html  css  js  c++  java
  • 大鹏RPC流程分析

    大鹏RPC

    1.概述

    采用Zookeeper作为注册中心,记录服务提供者IP端口信息.
    客户端读取Zookeeper上已注册的服务提供方信息.
    服务器与客户端采用 Netty 通讯.
    序列化方式为TProtocol
    

    2.通讯协议

    项层协议为:TProtocol
    

    2.1.数据包

    4bytes 1byte 1byte 1byte 4bytes header body 1byte
    包长度 起始标记固定 0x02 版本号固定1 协议 序列号 头部 正文 结束标志固定0x03

    2.2.序列化协议

    编号 协议类型 编码值
    1 二进制 0
    2 压缩二进制 1
    3 JSON 2
    4 XML 3

    2.3.头部(SoaHeader)

    序号 字段名称 数据类型 说明 例子
    1 serviceName String 服务名称
    2 methodName String 方法名称
    3 versionName String 版本号
    4 sessionTid Optional 服务会话ID,在服务调用中会一直蔓延
    本次服务调用引发的所有服务调用
    5 userId Optional 服务会话发起人Id,特指前台用户
    6 userIp Optional 服务会话发起人Ip
    7 operatorId Optional 服务发起操作人Id,特指后台用户
    8 callerTid Optional
    9 timeout Optional 超时时间
    10 callerMid Optional 调用源
    11 callerIp Optional 调用者IP
    12 callerPort Optional 调用者商口,只有在大鹏框架内才需要这个值
    13 respCode Option 响应返回码
    14 respMessage Option 响应返回信息
    15 calleeTid Optional
    16 calleeIp Optional
    17 calleePort Optional
    18 calleeMid Optional
    19 calleeTime1 Optional 服务提供方消耗时间
    (从接收到请求 到 发送响应),单位毫秒
    20 calleeTime2 Optional 服务提供方消耗时间
    (从开始处理请求到处理请求完成),单位毫秒
    21 transactionId Optional 全局事务ID
    22 transactionSequence Option 当前过程所属序例号
    23 cookies Map<String,String> 备用字段 以备后续使用

    3.流程分析

    3.1.服务注册

    3.1.1.Zookeeper目录

    |--soa//主目录
    |  |--config//配置信息
    |  |  |--routes//路由
    |  |  |  |--service.name.with.package.name
    |  |  |--services//服务列表
    |  |  |  |--service.name.with.package.name
    |  |--runtime//运行时信息
    |  |  |--services//运行时服务列表
    |  |  |  |--service.name.with.package.name//服务名称
    |  |  |  |  |--ip.port.version:sequenceid//服务实例
    

    3.1.2.注册流程

    image

    3.2.服务监听

    image

    3.3.处理请求

    image

    3.4.客户端

    3.4.1.客户端调用

    String serviceName = "com.github.dapeng.soa.service.PrintService";
    String version = "1.0.0";
    ServiceLoader<SoaConnectionPoolFactory> factories = ServiceLoader.load(SoaConnectionPoolFactory.class,getClass().getClassLoader());
    SoaConnectionPool pool = factories.iterator().next().getPool();
    SoaConnectionPool.ClientInfo clientInfo = this.pool.registerClientInfo(serviceName,version);
    String methodName = "print";
    print_args print_args = new print_args();
    print_result response = pool.send(serviceName,version,"print",print_args, new Print_argsSerializer(), new Print_resultSerializer());
    

    3.4.2.执行序例图

    image

    4.结构分析

    5.总结

    服务治理关键点:
        1.网络IO模型.
        2.通讯协议
        3.注册中心
        4.负载均衡
        5.使用方法
        6.监控
        7.MOCK
        8.
    
  • 相关阅读:
    云栖大会|盛宴之下,共赴一场视频云的进化论
    云栖大会|感受万物数字化,体验千行视频化
    浅谈语音质量保障:如何测试 RTC 中的音频质量?
    一朵云、一张网、一体化 ——GRTN 打造最佳流媒体场景实践
    穿越时空,跟我一起探索云栖数字谷(2021云栖大会免费送票)
    如何实现 iOS 短视频跨页面的无痕续播?
    如何实现 Android 短视频跨页面的流畅续播?
    揭秘盒马鲜生 Android 短视频秒播优化方案
    SQLServer2012SP1-FullSlipstream-CHS-x64标准版.iso
    mes系统是做什么的?MES是什么全称是什么?
  • 原文地址:https://www.cnblogs.com/hhbk/p/9546666.html
Copyright © 2011-2022 走看看