推荐序一
随着互联网应用场景的逐步深化,轻客户端、重服务端成为各类复杂应用的必然之选。面对复杂的服务端应用,微服务成了越来越多技术公司的后端架构选择。各相关服务之间高效可靠的数据交互是后端技术人员必须考虑的因素。近年来,AI技术、大数据技术在越来越多领域的广泛应用,进一步提升了各项服务间数据交互的需求。序列化与反序列化技术作为数据交互的核心协议技术,从起初的网络传输、数据存储,向服务间实时交互、大数据支撑、跨语言方向持续演化。从早年的JDK内置序列化省心方案,适用于数据轻量级REST服务的JSON,跨语言IDL大行其道的Thrift、Protocol Buffer,到与大数据Hive、Pig等脚本系统高度适配的Avro,每个主流技术方案的诞生和演变都有着相应的背景,自然伴随着不同的侧重点和优劣势。作为一个技术选型者,只有对主流序列化方案的技术原理实现机制有全面而深入的了解,做到“知其所以然”,才能找到一个真正合适自己的应用场景的方案。
正因为序列化设计是开发者面临的一个日常问题,互联网上有不少与序列化相关的技术文章,但较难找到全面且系统覆盖该项技术的中文资料,有深度的博文往往侧重于一些单点技术讨论。要全面了解几个体系,也只剩下直接啃源码一条道了。本书作者将其在序列化领域的持续学习、积累及多年业界实战经验汇入本书,为读者提供了一条快速了解全貌进而深入探究该技术领域的路径。当然,对于要进一步了解核心技术实现的读者,源码还是得看的,本书起到了一个提纲挈领的作用,为读者划出重点、指明方向,大幅提升了看源码的效率,缩短了学习周期。
本书由浅入深,从基础的常用编码方法入手,阐述了大量编码类基本概念及知识,进而讲述主流的五大序列化技术方案,每项技术配以对源码实现机制的大量深入剖析,方便有兴趣深入了解的读者索引到源码进一步学习。每个技术章节结尾以深入浅出的方式给一个应用示例来收尾。当读者理解了一种主流技术方案的原理和实现机制后,在后续的学习过程中就会发现:主流方案的内部设计逻辑是共通的,也能够更清晰地看到方案间的差异点及如何取舍。本书最后一章从存储效率、编解码效率两个维度探讨了各个主流方案的差异。非常值得称道的是,在对比过程中,作者提供了11种测试数据集,给读者示范了如何严谨地进行技术选型。
上海乐言信息科技有限公司总经理
吴海华
推荐序二
这是一本把分布式系统核心处理流程中的序列化与反序列化环节描述得极为详尽的难得的好书。周末,我花了近两天时间把这本书看完。掩卷而思,作为一名兼具高校研究及传统转型企业、大型互联网企业混合从业经历的技术人员,我收获颇多。
本书作者从最原始的计算机编码基础、字符编码原理出发,循序渐进地引入序列化规范、各种具体的序列化技术并对其进行分析比较,最后根据自己丰富的分布式系统与大数据经验给出各种序列化技术在方案选型上面的指导原则。对于公司架构师而言,本书在选型方面的分析及背后的指导准则能够为最终决策提供充分的论据。
对于处于分布式浪潮中的技术人员而言,熟练掌握分布式体系中的各个底层模块的技术细节和原理是稳定系统、优化性能、快速定位故障和恢复系统所必备的。本书在序列化这个领域的理论和实践两个层面上的阐述都能很好地满足上述要求。尤其是在分布式架构中,I/O 处理和节点通信在完整链路中占较大比例,本书很好地描述了各种序列化技术的底层原理和实现细节,同时附上了丰富的代码示例。另外,本书也给出了很多关于实际序列化实现过程的中肯建议,有可以落地的设计开发规范,能够为团队进行方案选型、性能分析、编码规约等提供参考借鉴。
感谢洪安兄能够系统化地整理和分析现有的序列化技术,并花费大量精力将理论、实践进行有机整合,让本书兼具教科书、工具书的特点,希望本书能为业内架构师、程序员在进行序列化方案设计落地上提供帮助。
阿里巴巴架构师
吴一帆
前言
随着互联网技术的高速发展,涌现出了大数据、微服务等技术。这些技术背后都是分布式技术的高水平应用。分布式技术的核心之一便是服务或组件之间的数据交互。要在分布式系统中高效地交互数据,数据序列化与反序列化技术起着关键作用。将结构化的对象和扁平的二进制流进行相互转换,是序列化技术解决的核心问题。这个问题听起来简单,却耗费了几代技术人的心血。从JDK1.1提供序列化机制到盛行的Thrift、Protocol Buffer,序列化技术不断更替演进,其间出现过的序列化技术不少于20种。如今,那些令人尊敬的技术专家们仍未停止探索的脚步,这听起来确实令技术爱好者兴奋,毕竟技术可期。
序列化技术被广泛用于数据传输、数据存储中,不同业务场景的需求不尽相同,技术方案的侧重也不尽相同。要在众多序列化技术方案中选择一款适合应用场景的技术,要求技术选型者对序列化方案有深入且全面的了解。从实现机制到性能,从开发复杂度到快速应用,如何准确评估一款序列化技术是否适合应用场景?这无形中对开发人员提出了更高的要求。
互联网上有较多关于序列化技术应用的资料,但技术覆盖点不够全、重复点较多,未能较全面地梳理序列化技术知识体系。笔者也经历了这个技术学习过程,于是产生了一个想法:对现有的主流序列化技术进行较深入的梳理和解读,让读者能快速获取序列化技术体系的知识,深入理解各种序列化技术的实现原理、差异性及场景适用性。
本书兼顾技术原理和技术应用,适合初级开发者、高级开发人员、架构师及技术专家使用。为了帮助读者在阅读本书时达到事半功倍的目的,笔者给出两个学习建议:1)实践本书中的代码,将理解落地;2)结合源码和本书提供的原理阐述去理解技术内容。
感谢电子工业出版社编辑牛晓丽老师的严谨态度和辛勤付出,使得本书能够顺利完成。更感谢牛老师多次对日期的宽限,才使得笔者能安心写作。
感谢好友岳京杭,通过他的引荐,笔者才有机会和牛老师沟通并落实想法。
感谢工作以来帮助过我的领导和同事们,特别是在快手工作的两年,专家们的技术高度和对技术的态度,深深影响了我。
感谢业界的各位技术“大牛”不吝笔墨为本书撰写推荐序和推荐语。
最后,感谢家人和朋友们在本书写作过程中提供的支持和帮助。