讨论网站处理数据交换时的序列化和反序列化
2020-12-30 13:47:05 阅读(159) 评论(0)
#摘要序列化和反序列化几乎是工程师每天都要面对的事情,但要准确地掌握这两个概念并不容易:一方面,它们往往作为框架的一部分而消失在框架中;另一方面,它们会出现在其他更容易理解的概念中,如加密和持久性。然而,序列化和反序列化的选择是系统设计或重构的重要环节,在分布式和大数据系统设计中更为明显。适当的序列化协议不仅可以提高系统的通用性、强度、安全性和优化性能,还可以使系统更容易调试和扩展。本文从多个角度分析和解释了“序列化和反序列化”,并比较了几种流行的序列化协议,希望能帮助读者进行序列化选择。作者服务于美团推荐和个性化团队,致力于为美团用户提供高质量的个性化推荐和排序服务。从Terabyte级别的用户行为数据到Gigabyte级别的Deal/Poi数据;从实时地理位置数据到定期后台job数据,推荐和重排序系统需要多种类型的数据服务。推荐和重排序系统客户包括各种内部服务、美团客户端和美团网站。为了提供高质量的数据服务,实现与上下游系统的良好对接,序列化和反序列化的选择往往是我们系统设计的重要考虑因素。本文以下方式组织:第一部分给出了序列化和反序列化的定义,以及它们在通信协议中的位置。第二部分从用户的角度探讨了序列化协议的一些特征。第三部分描述了典型的序列化组件在具体实施过程中,并与数据库组建进行了类比。第四部分解释了几种常见的序列协议的特性、应用场景和相关组件的例子。最后一部分,根据各种协议的特点和相关的benchmark数据,提出了作者的技术选择建议。#互联网的定义和相关概念带来了机器间通信的需求,互联网通信双方需要采用约定的协议,序列化和反序列化是通信协议的一部分。通信协议通常采用分层模型,不同模型的功能定义和粒度不同,如:TCP/IP协议是四层协议,而OSI模型是七层协议模型。显示OSI七层协议模型中的层(PresentationLayer)主要功能是将应用层的对象转换为连续的二进制串,或将二进制串转换为应用层的对象——这两个功能是序列化和反序列化。一般而言,TCP/IP协议的应用层对应于OSI七层协议模型的应用层、显示层和会话层,因此序列化协议是TCP/IP协议应用层的一部分。本文对序列化协议的解释主要基于OSI七层协议模型。序列化:将数据结构或对象转换为二进制串的过程反序列化:将序列化过程中产生的二进制串转换为数据结构或对象的过程数据结构、对象和二进制串的计算机语言、数据结构、对象和二进制串的表达方式不同。数据结构和对象:对于Java等完全面向对象的语言,工程师所操作的一切都是对象(Object),实例化来自类。POJOJO是Java语言中最接近数据结构的概念(PlainOldJavaObject)或者Javabeann--只有setter/getter方法的类别。而在C 在这种半面向对象的语言中,数据结构对应struct,对象对应class。二进制串:序列化生成的二进制串是指存储在内存中的数据。C 语言有内存操作符,因此二进制串的概念很容易理解,例如,C 传输层可以直接使用语言字符串,因为它本质上是'\0'内存中最后存储的二进制串。在Java语言中,二进制串的概念很容易与String混淆。事实上,String是Java的一流公民,是一个特殊的对象(Object)。对跨语言通信而言,序列化后的数据当然不能是某种语言的特殊数据类型。Java中的二进制串指的是byte[],byte是Java8中原生数据类型之一(Primitivedatatypes)。#每个序列协议都有优缺点,在设计之初就有自己独特的应用场景。在系统设计过程中,需要考虑序列化需求的各个方面,综合比较各种序列化协议的特点,最终给出折衷的解决方案。一是技术层面,序列化协议是否支持跨平台、跨语言。若不支持,技术层面的通用性将大大降低。第二,流行程度、序列化和反序列化需要多方参与,很少有人使用的协议往往意味着昂贵的学习成本;另一方面,低流行的协议往往缺乏稳定成熟的跨语言和跨平台公共包。强健性/鲁棒性以下两个原因会导致协议不够强:第一,成熟度不够,从制定到实施再到最终成熟的协议往往是一个漫长的阶段。该协议的强度取决于大量和全面的测试。对于致力于提供高质量服务的系统,在测试阶段采用序列协议将带来很高的风险。第二,语言/平台的不公平。为了支持跨语言、跨平台的功能,序列协议的制定者需要做大量的工作;然而,当支持的语言或平台之间存在不可调和的特征时,协议制定者需要做出一个艰难的决定——支持更多人使用的语言/平台,或者支持更多的语言/平台而放弃特征。如果协议的制定者决定为某一语言或平台提供更多的支持,那么对于用户来说,协议的强度就会被牺牲。调试可调/可读序列化和反序列化的数据正确性和业务正确性往往需要很长时间,良好的调试机制将大大提高开发效率。序列化后的二进制串往往没有人眼可读性。为了验证序列化结果的正确性,写入方不得同时编写反序列化程序或提供查询平台——这需要时间;另一方面,如果读取方未能成功实现反序列化,将给问题搜索带来巨大挑战——难以定位是由于自己的反序列化程序的bug还是写入方序列化后的错误数据造成的。对于跨公司调试,由于以下原因,问题会更加严重:一是支持不到位,问题出现后跨公司调试可能得不到及时支持,大大延长了调试周期。二是访问限制,调试阶段的查询平台可能不公开,增加了读取方的验证难度。人眼可读数据如果序列化,将大大提高调试效率,XML和JSON具有人眼可读性的优点。性能性能包括时间复杂性和空间复杂性两个方面:第一,空间费用(Verbosity),序列化需要在原始数据上添加描述字段,以为反序列化解析是有用的。如果序列化过程引入的额外费用过高,可能会导致网络、磁盘等方面的压力过大。对于大量的分布式存储系统,数据量往往以TB为单位,巨大的额外空间成本意味着成本高。第二,时间开销(Complexity),对于整个系统来说,复杂的序列化协议会导致较长的分析时间,这可能会使序列化和反序列化阶段成为瓶颈。在可扩展性/兼容性移动互联网时代,业务系统需求的更新周期变得更快,新需求不断涌现,旧系统仍需维护。如果序列协议具有良好的可扩展性,并且支持在不影响旧服务的情况下自动增加新的业务字段,这将大大提供系统的灵活性。在序列化选择过程中,安全性/访问限制,跨局域网访问场景中经常会出现安全性考虑。当通信发生在公司之间或跨机房时,出于安全考虑,跨局域网的访问通常仅限于基于HTTP/HTTPS的80和443端口。如果使用的序列化协议没有成熟的HTTP传输层框架支持,则可能导致以下三个结果之一:第一,由于访问限制,服务可用性降低。二是被迫重新实现安全协议,导致实施成本大幅增加。以牺牲安全为代价,开放更多的防火墙端口和协议访问。#第三,典型的序列化和反序列化组件的序列化和反序列化过程往往需要以下组件:IDL(Interfacedescriptionlanguage)文件:参与通信的各方需要就通信内容达成相关协议(Specifications)。为了建立与语言和平台无关的协议,需要使用与具体开发语言和平台无关的语言进行描述。这种语言被称为接口描述语言(IDL),IDL写的协议称为IDL文件。IDLCompiler:为了在每种语言和平台上看到IDL文件中约定的内容,需要一个编译器将IDL文件转换为每种语言对应的动态库。Stub/SkeletonLib:负责工作代码的序列化和反序列化。Stub是部署在分布式系统客户端的代码。一方面,它接收应用层的参数,并通过底层协议栈将其序列化发送到服务端。另一方面,它接收服务端序列化后的结果数据,反序列化后交给客户端应用层;Skeleton部署在服务端。其功能与Stub相反。它从传输层接收序列参数,反序列化后交给服务端应用层。并将应用层的执行结果序列化,最终传输给客户端Stub。Client/Server:它指的是应用层程序代码,它们面对的是IDL生存的特定语言的class或struct。Client/Server:它指的是应用层程序代码,它们面临着IDL生存的特定语言的class或struct。底层协议堆栈和互联网:序列化后的数据通过底层传输层、网络层、链路层和物理层协议转换为互联网中的数字信号。对许多工程师来说,序列化组件与数据库访问组件的对比数据库访问相对熟悉,使用的组件也相对容易理解。下表类比了序列化过程中使用的部分组件与数据库访问组件的对应关系,以便更好地把握序列化相关组件的概念。#互联网早期的序列化协议主要包括COM和CORBA。COM主要用于Windows平台,并没有真正实现跨平台。此外,COM的序列化原理利用编译器中的虚表,使其学习成本巨大(想想这个场景,工程师需要一个简单的序列化协议,但他们必须首先掌握语言编译器)。扩展属性非常麻烦,因为序列化数据与编译器紧密耦合。在早期阶段,CORBA更好地实现了跨平台、跨语言的序列协议。COBRA的主要问题是参与者太多,版本兼容性差,使用复杂晦涩。这些政治经济、技术实现和早期设计不成熟的问题最终导致COBRA的逐渐消亡。J2SE1.后续版本提供了基于CORBA协议的RMI-IIOP技术,使Java开发者能够使用纯Java语言开发CORBA。这里主要介绍和比较几种流行的序列化协议,包括XML、JSON、Protobuf、Thrift和Avro。前面提到的一个例子,序列化和反序列化的出现往往晦涩而隐蔽,往往与其他概念相互包容。为了更好地理解每个协议中序列化和反序列化相关概念的具体实现,我们在各种序列化协议的解释中穿插了一个例子。在这个例子中,我们希望在多个系统中传输用户信息;在应用层中,如果使用Java语言,类对象如下所示:Javacode将内容复制到剪贴板class Address { private String city; private String postcode; private String street; } public class UserInfo { private Integer userid; private String name; private List address; } XML&SOAPXML是一种常用的序列化和反序列化协议,具有跨机器、跨语言等优点。XML历史悠久,其1.0版本早在1998年就形成了标准,并得到了广泛的应用。XML历史悠久,其1.0版本早在1998年就形成了标准,并得到了广泛的应用。XML的最初目标是互联网文档(Document)标记,所以它的设计理念包含了人和机器的可读性。然而,当这个标记文档的设计被用来序列对象时,它是冗长和复杂的(VerboseandComplex)。XML本质上是一种描述语言
推荐阅读
- java开发是做什么的
JAVA主要是用来干什么的?百战程序员IT问题专业解答 java是一种面向对象的编程语言 现在我们日常使用的很多软件都是java语言开发的。 比如安卓上的各种app,界面都是使用java语言写的。 当然java最强大的地方还不是写a…查看详情
- 用什么软件去做市场?市场管理软件排名
对于市场管理软件来说,是一个十分庞大的数据,所做的行业不同所需要的数据就不一样,比如说销售,在销售中,产品的库存销各种数据,还有每日经营数据对比,及时发现商品数据波动等等,那我们今天就盘点一下市场管理软件都有哪些把。1、企管宝CRM企管宝C…查看详情
- 拼车软件哪个好用又便宜 哪个拼车平台比较靠谱
现在人们的出行方式都越来越多样化了,拼车算是人们常用的一种出行方式,市面上的拼车软件也是有很多的,下面万商云集小编给大家来详细介绍一下拼车软件哪个好用又便宜 哪个拼车平台比较靠谱方面的内容,希望能帮助到大家解决出行问题。 1.滴滴出行 …查看详情
- 营销|没客户电话也能短信联系,这是什么黑科技?
每到618、双十一和双十二你的手机是不是也会经常收到促销短信呢? 短信群发较于传统的推广方式而言算是一种成本低、速度快、阅读量大而且比较“接地气”的宣传方式之一但许多中小企业却…从未接触过活动的内容编辑重要吗?短信的内容决定用户是否会点击活…查看详情
- 杀毒软件排名,这些可以放心用
现在的工作和生活中都会使用电脑,其中的信息也是比较多的,除了公司内部的信息之外,还有个人的一些隐私,如果不小心受到病毒的感染,那么危害不可小视,甚至还会导致信息泄露影响严重,所以杀毒软件的选择很重要,下面就针对于杀毒软件的排名进…查看详情
- 质量管理软件如何选择?这几款值得尝试
产品的质量是一个企业的生存命脉与基础,本所以说企业对于产品的质量,往往是要求比较严格的,而通过使用质量管理软件,则可以很好的进行质量方面的管理和规范的实施,能够让操作变得更为规范,也是针对于产品的设计人员,还有制造的人员等等,所…查看详情
- 已失效的专利可不可以转让?
依据我国相关法律的规定,向专利管理部门申请专利后,经专利管理部门批准,申请人获得专利权,而专利权是可以依法转让的,那么已失效的专利可不可以转让?下面万商云集小编就给大家来介绍一下这方面的详细内容,希望能帮助到大家解决这一块的问题。 …查看详情
- msf是什么文件
1、什么是MSF文件?2、什么是NLB文件?3、什么是LST文件?MSF是流媒体功能的内容格式为.msf,兼容avi等格式是通过专用工具制作内容分为头文件和动画文件用专门的软件打开如新版的暴风影音NLB是Oracle7数据文件LST是列表文…查看详情
- 新媒体运营怎么自学 怎么学好新媒体运营
现在新媒体一运营算是比较热门的一个职业,很多人都转行做新媒体,下面万商云集小编给大家来详细介绍下新媒体运营怎么自学 怎么学好新媒体运营这方面的内容。 01内容的价值性 不管是做文章还是做视频,内容最重要的一点就是带有价值含量,说得简…查看详情
- 盘点好用的微信分销系统,适合创业新手
目前做微信分销系统的很多,商家到底应该如何选择一款适合自己的微分销系统呢?市面上主流的分销系统特别多,主流的微信分销系统哪个好大致包括HiShop销客多等等,企业或者创业新手往往不知道如何挑选。 1、微巴人人店分销系统 人人…查看详情
- 微信小程序定制开发都需要经过哪些流程
微信庞大的流量资源对于做线上营销的人有着巨大的吸引力,各类小程序层出不穷只为能获得一部分资源。想要在数量众多的微信小程序中占据有利的竞争优势,那进行微信小程序定制开发就是很好的选择。如果你对这一领域还不太清楚,不妨跟小万一起来看看都有哪些流…查看详情
- 客户端是什么意思啊
客户端是计算机网络中的一个术语,通常指的是连接到网络的设备或软件,用于与服务器进行通信和交互。客户端一般用于请求服务器上的资源或服务,例如发送电子邮件、下载文件或访问网站等。在互联网上,客户端是与浏览器或移动应用程序等一起使用的。 在…查看详情
- 如何强制删除文件夹
在计算机使用过程中,经常会遇到一些无法删除的文件夹,这些文件夹可能由于权限问题、病毒感染、损坏等原因导致不能删除。本文将详细介绍如何强制删除文件夹。 一、使用命令行删除文件夹 命令行是Windows操作系统中一个十分强大的工具,可以…查看详情
- 网站怎样做流量分析
流量对于网站来说非常重要,网站运营的首要目的就是获得流量,但是流量不同价值也不同,我们需要对流量进行分析,通过流量的分析更好的运营我们的网站,流量的分析主要是流量的来源以及流量在网站上的流向两个方面的分析。通常流量的来源主要有三个途径:搜索…查看详情
- 飞鱼CRM是什么东西?高效低成本的客户管理系统
让用户接触到广告不难,但想要留住客户,产生最大的投放收益却一直是一项难题,飞鱼CRM系统作为一款优秀的客户管理系统,究竟有哪些作用?下面小万就来详细为大家介绍一下究竟飞鱼CRM是什么东西。 飞鱼CRM是什么东西? 飞鱼CRM系统是巨量引擎推…查看详情
猜你喜欢
最新文章
扫码二维码
立即领取《千元实战营销秘籍》
还可免费试用营销管理系统
*如有疑问,请随时拨打免费咨询热线:400-0033-166
服务时间:8:30-18:00
软件企业
认定号:川RQ-2018-0216
高新技术企业
认定号:GR201951001121
关注微信公众号
和10万中小企业共同成长
扫码下载APP
享全方位服务一触即达
Copyright © 2004-2022 万商云集(成都)科技股份有限公司 版权所有 蜀ICP备12001963号-2 川公网安备 51010402000322号
快速找产品
找一找哪款产品适合您?
咨询热线:400-0033-166
免费查找信息保护中请放心填写-
-
电话沟通
在线咨询
获取方案
下载APP
官方微信
扫码下载APP
全方位服务一触即达
关注万商云集
和10万中小企共成长
TOP
企业首选的数字选用平台