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.
    
  • 相关阅读:
    (Power Strings)sdutoj2475
    KMP(http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2772)
    spfa 判断负环 (转载)
    图的存储
    图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)
    poj1753Flip Game(dfs)
    poj2524(简单并查集)
    VC++ GetModuleFileName()获取路径字符串中带波浪线~
    VC++ : error LNK2005: ... already defined in *.obj
    InstallSheild的一些常量
  • 原文地址:https://www.cnblogs.com/hhbk/p/9546666.html
Copyright © 2011-2022 走看看