java分布式系统操作 java 分布式有哪些技术( 四 )


功能设计
各种序列化框架需要考虑的主要有:
序列化框架本身的功能的丰富,支持的数据类型;多语言的支持;兼容性,往大了说:

    服务接口的前后兼容;协议的兼容;支持的数据类型的兼容 。
性能,目的是最少的资源,最快的速度,最大的压缩:
    序列化后码流大小;序列化的速度;序列化的资源占用 。
在扩展性这节,作者讲了netty的对序列化的一些内置支持,但实际开发中,一般不太会使用这些东西,都会提供序列化反序列接口,自行扩展定义,所以扩展性特重要 。
常用的序列化,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比较少,多得是可能是这种,一个物理机部署多个虚拟机,或者一个容器部署多个服务提供者,消费者不需远程调用,本机,本地或本机房优先 。路由规则

推荐阅读