今天谈一个技术问题:“可类化”(Classable)。这个话题是Laxcus社区一位开发者,也是我们的用户提出来,下面就来说说它。
“可类化”是Laxcus分布式操作系统一项基本技术,能够将一个类(class)或者数据结构(struct)转换成字节数组。在Laxcus分布式操作系统里,可类化被封装成 一组底层函数库,由开发者调用。可类化的目标是取代现在普遍使用“串行化”,目前主要用于Laxcus集群的网络通信的指令、消息、数据传递上,可类化或者也可以取代JSON,用于本地数据存储。可类化相比串行化有以下一些优点:
1. 产生的字节数组尺寸会大幅压缩。
2. 允许用户自由定义数据格式和上下文,摆脱了串行化硬性规定的数据格式。
3. 支持非对称加密和对称加密,适合高安全场景的数据传输。
同时可类化也有自己的一些缺点:
1. 需要开发者在编程继承可类化接口,被可类化类需要明确指定压缩的参数。
2. 如果被可类化类的版本前后不一致,将出现解析异常,所以被可类化类要明确当前版本,并支持向下兼容。
可类化接口提供两个方法(虚函数),被可类化类要实现它们:
1.int ClassableInterface::build(ClassWriter writer);
2.int ClassableInterface::resolve(ClassReader reader);
编程时处理可类化是以下两步操作:
1. 将被可类化类输出到可类化写入器(ClassWriter)中,写入器会调用被可类化接口ClassedInterface::build,完成从类到字节数组的转换工作。
2. 可类化的反向动作,即类读取器把字节数组变成指定的类对象。
设计可类化的初衷是,在Laxcus集群里,有大量的指令、消息、数据需要传输和保存,序列化产生数据量非常庞大,对网络通信、网络计算、数据存储都造成了巨大的担负。更关键的问题是,在序列化的数据里面,有很多数据是计算过程中并不需要的,它们成为网络通信中的“鸡肋”。
目前的Laxcus集群经过可类化改造后,传输的数据量明显减少,普遍减少量在4-5倍左右,个别已经超过10倍。数据在Laxcus集群网络中的传输速度,以及计算机对数据的处理反应能力也得到明显的提高。
可类化对提升数据传输和分布式计算作用非常明显。