功能设计
各种序列化框架需要考虑的主要有:
序列化框架本身的功能的丰富,支持的数据类型;多语言的支持;兼容性,往大了说:
- 服务接口的前后兼容;协议的兼容;支持的数据类型的兼容 。
- 序列化后码流大小;序列化的速度;序列化的资源占用 。
常用的序列化,xml,json,hessian,kryo,pb,ps,看需求需要支持那种,具体可以搜索各序列化的性能和压缩后大小 。
协议栈 这一章最主要的是讲了自定义协议栈的设计,已经交互的过程,其他讲的可靠性设计什么的跟之前通讯框架一章有重复 。
通信模型
服务提供者和消费者之间采用单链路,长连接通信,链路创建流程:
1. 客户端发送握手请求,携带节点ID等认证信息;
2. 服务端校验:节点ID有效性,重复登录,ip地址黑白名单等,通过后,返回握手应答信息;
3. 链路建立后,客户端发送业务消息;
4. 客户端服务端心跳维持链路;
5. 服务端退出时,关闭连接,客户端感知连接关闭,关闭客户端连接 。
协议消息定义
通过attachment兼容了扩展性 。作者还讲了将消息头的通用序列化和消息体的自定义序列化,看需求吧,我们公司的框架没做这部分支持,做了简化,将消息头和消息体统一封装,然后再加一个序列化方式组成一条消息发送 。
安全性设计
- 内部的,不一定需要认证,也有基于系统,域名,ip的黑白名单,安全认证的;外部开发平台的话,基于秘钥认证;
透明化路由
- 基于zk的服务注册中心的发布订阅;消费者本地缓存服务提供者列表,注册中心宕机后,不影响已有的使用,只是影响新服务的注册和老服务的下线 。
随机轮循服务调用时延一致性Hash
- 有个一致性hash算法,挺有意思的,redis的客户端shard用的
- 这个应该不太常用,服务提供者多数无状态,一旦有状态,不利于扩展
本地路由优先策略
injvm:jvm也提供了消费端的服务,可以改成优先本jvm,对于消费端来说,不需关注提供者;innative:injvm比较少,多得是可能是这种,一个物理机部署多个虚拟机,或者一个容器部署多个服务提供者,消费者不需远程调用,本机,本地或本机房优先 。路由规则
推荐阅读
- 数码知识:华为mate30怎么设置两个系统 有两个系统吗
- r语言lag函数用法 java怎么把负数转正数
- 联想开机f2修复电脑步骤 联想拯救系统怎么用
- 教大家Windows10系统提示缺少mscomctl.ocx文件的解决方案
- 教大家Windows10系统下word工具栏消失了如何找回的方法
- 王者荣耀一天可以玩几个小时,王者荣耀健康系统时长限制介绍
- 华为手机系统修复教程,这种方法简单又实用
- 教大家windows10系统如何查看内存型号的方法
- erp系统操作方法 财务erp系统是什么软件
- 自助建站系统哪个好,国内最大自助建站介绍