DDIA读书笔记第四章——编码与演化

编码&解码 or 序列化&反序列化在哪里需要:
1、跨进程通信,一端数据对象编码,网络传输;另一端接受数据,解码对象
2、内存和磁盘上的数据转换,内存编码,写磁盘;读磁盘,内存解码
编解码涉及的问题:
1、节省空间,提高性能
2、兼容,向前兼容:新代码能够读到旧数据;向后兼容:旧代码可以读到新数据
其中兼容性很重要,对于服务端,可以滚动灰度升级;对于客户端,必然要保证客户端的兼容性

编码数据的格式

程序中至少使用两种类型的数据:
1、内存中,数据保存在对象中,结构体,列表,数组,哈希表,树等中。一般通过指针高效操作
2、网络或者磁盘中,将数据编码成某种字节序列

语言特定的格式

java、python中内置编解码的库,但是有如下问题:
1、和特定语言绑定
2、安全问题
3、兼容性不好
4、效率不高

JSON、XML等基于文本的编码方式

好处:可读性好
坏处:
1、效率不高
2、占空间
3、对二进制和高精度数值类型不支持

二进制编码

好处:紧凑、高效
例子:MessagePack、BSON、BJSON等等

Thrift与Protocol Buffers

兼容性好

字段标签和模式演变

随着时间推移,不可避免的增删字段、修改字段,即模式演变。要保持兼容性

数据类型和模式演变

数据类型的演变需要兼容,否则会丢失精度

Avro

没用过,不了解

数据流的类型

数据库的数据流

服务中的数据流:REST和RPC

rpc的问题:
1、rpc调用不可预测,可能会返回各种不同的错误,需要错误处理
2、rpc需要处理超时错误,对于某些服务需要保证幂等
3、rpc需要编解码,在大对象时,可能会有性能问题

消息传递中的数据流

优点:
1、如果收件人不可用或过载,可以充当缓冲区,从而提高系统的可靠性。
2、它可以自动将消息重新发送到已经崩溃的进程,从而防止消息丢失。
3、避免发件人需要知道收件人的IP地址和端口号(这在虚拟机经常出入的云部署中特别有用)。
4、它允许将一条消息发送给多个收件人。
5、将发件人与收件人逻辑分离(发件人只是发布邮件,不关心使用者)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值