Last updated
Last updated
RAL,全称为 Resource Access Layer, 与后端服务进行交互,目前主要是统一下日志格式,方便日志监控
根据『资源定位服务』查找后端 ip port
后端服务的负载均衡
超时及重试
日志统一
这些可能五花八门,没有一个标准
ral 将网络交互过程分成了:
打包
网络传输交互
解包
三个过程。并且支持常用的后端交互协议(http,nshead等)。目前支持 http,nshead
nshead 与 mcpack 的区别
百度 nshead/mcpack
nshead 协议组成
百度 nshead 使用 36 字节代表 head, 也就是
head
Python 实现方式
format 中解析(共 36 个字节)
H : (unsigned shor integer)2 个字节, 0<= number <= 65535
I : (unsigned int integer)4 个字节, 'I' format requires 0 <= number <= 4294967295 ,即数字最多 42 亿多
16s: (char[]) 16 个字节
日志打点
什么是 mcpack?
mcpack 是一个用于模块间接口数据打包的工具库。
它提供了一系列的函数来帮助你组织接口数据,将它们打包成一个二进制的包,用于网络传输。
使用 mcpack 作为接口,相比传统的二进制接口的好处在于,接口修改时,可以很方便的做到向下兼容。
另外,使用 mcpack 作为接口,还能够提高程序的可配置性和可测试性。
mcpack 是一种内存对象的序列化形式
它能将内存中的数据结构以与计算机架构无关的形式序列化为 bit 流,并由 bit 流重建对象
mcpack 是一种数据交换的协议约定
他使得协议和数据结构能相对独立的变化和演进
实现原理
mcpack 对象模型
基于变量,对象和数组。如: “person”: { “name”:”baidu”, }
简单原理
mcpack的实现原理比较简单,就是把数据按照 key => value 的方式排列起来,在整个 pack 和其中每个数据项的前面加一些必要的头信息,如类型和大小等。
操作原理
数据项的添加均为追加操作,查找则是遍历每个数据项比较 key 是否相等,不支持修改和删除操作。
这样做是考虑实现逻辑简单,且对于绝大多数的接口数据,其效率都是能够接受的。
子 pack 的实现
子 pack 包括:对象 (object) 和数组 (arr). 对象 (object) ,可以认为是一个 pack.
对于子 pack,则是通过 key 的名字前缀来实现。
每个子 pack 会在 pack 中占有一个单独的数据项位置用来保存子 pack 的名字和子 pack 中数据项的个数。
子 pack 中的数据项的名字前会自动加上其所属子 pack 的名字作为前缀,并通过保留字符作为分隔。
对象(object)的分隔符为 MC_PACK_OBJDELIM (','),数组 (array) 的分隔符为 MC_PACK_ARRDELIM (':')。
因此,pack中数据项的名字中不可以出现这2个保留字符。
日志监控(统计模块的访问流量和响应时间)
目前日志会统一加上 reqid, 需要手动填写的信息, 手动填写的信息整体前后加上 "[]":
1 file : 调用 file:调用函数名:调用处行号
2 type : 类型
shell : shell
http : http_GET/http_POSt
3 req_path : 请求路径或命令
shell : shell 命令
http : http_url
4 req_data : 请求数据
shell : None
http : '{}'/'{"str_info": "meetbill"}'/'age=21&name=meetbill'
5 cost : 耗时
6 is_success: 是否执行成功
7 err_no : 返回结果码
shell : shell 状态码,返回为 0 时表示执行成功
http : http 状态码,返回为 200-300 内时表示执行成功
8 err_msg : 异常信息
9 res_len : 返回数据长度
10 res_data : 返回数据
11 res_attr : 返回附加属性,比如 http 返回 header 信息
基础
数字转为字节: xlib/auth/jwt/compat.py