大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

软件系统开发中的数据交换协议

  • 2011-05-08
  • 本文字数:2101 字

    阅读完需:约 7 分钟

在很多地方都有“数据交换”这个概念,本文所说的“数据交换” 是指在计算机网络中,一个系统把数据传递给另外一个系统。这非常类似于一个人要告诉另外一个人一件事情。

当一个人要把一件事情告诉另外一个人的时候,我们可以通过电话、邮件、短信、IM 工具或者当面说的方式来交流。这种方式类似于系统数据交换要通过 tcp、udp、管道等等的方式实现。当两个人交流的时候,我们需要一种共同的语言才能明白对方的意思,同样的,两个系统要交换数据,也需要定义一种双方都明白的协议,我们称为“数据交换协议”。

数据交换协议

数据交换协议的目的是让两个系统进行正确的数据交互。所以几乎各种开发语言都提供了方便使用的数据交换功能。比如说使用 JAVA 语言的开发的系统使用 MySQL 数据库存储数据,就是通过 MySQL 数据交换协议跟 MySQL 做数据交换;通过 JAVA 的 RMI 可以方便的做跨机器的分布式数据交换,RMI 也就是一种数据交换协议。

一般我们在不同的系统、不同的语言之间交换数据的时候,我们会选择一种通用的交换协议或者自己定义一种容易使用的交换协议。 WebService 曾经非常流行, 在 Web 2.0 时代,轻量级的 REST 协议又开始受到追捧。那么究竟在我们的系统中应该选择什么样的协议呢?

如何选择数据交换协议

选择什么样的协议跟我们的应用场景有很大的关系。我们需要考虑我们开发是否方便、接口是否容易发布、是否需要考虑带宽占用成本、序列化和反序列化的性能、接口协议的扩展性等等。下面我们看下几个比较常用的交换协议实现。

协议 实现 跨语言 性能 传输量 RPC xml 广泛 几乎所有 低 很大 N(可实现) json 广泛 大量 一般 一般 N(可实现) php serialize PHPRPC 大量 一般 一般 Y hessian hessian 大量 一般 小 Y thrift thrift 大量 高 小 Y protobuf protobuf 大量 高 小 N(可实现) ice ice 大量 高 小 Y avro Apache Avro 少量 高 小 Y messagepack messagepack 大量 高 小 Y 上面表格列出了一些常用数据交换协议的一些特性的比较。这里并没有比较好坏,只是想说明不同数据交换协议是有区别的,所以我们需要在我们的应用场景中进行选择。

开放式

像微博,SNS 这种开放平台、对静态 html 页面提供 javascript 接口调用的系统都属于这种类型 。这种类型的特点是:

  • 调用方不完全可控,而且是针对公网的,你可能不知道是谁、是什么语言、是什么方式在调用你提供的数据接口;
  • 接口访问量一般都非常大,要求具有很高的性能和吞吐量;
  • 需要考虑安全问题,外部提交的数据可能不是合法的。

所以在这种情况下,需要考虑数据传输的带宽消耗和数据交换协议的易用性,以及多语言支持程度。以前对于 html 页面使用的 javascript 接口调用一般都使用 XML 格式,最近几年几乎都转成了 json 格式了,因为 json 传输量更小,比 XML 更加容易使用。 而对于开放平台,由于使用的场景很多,所以需要提供多种交换协议格式。基本上都会提供 XML 和 json。为了提高平台本身的性能和客户端的性能,也可以提供 protobuf 这种二进制交换协议并且增加压缩支持,以节省带宽传输和解析的性能消耗。

内部服务

对于一个大型系统来说,内部服务的数据交换无处不在。从最基本和常见的数据库数据交换、memcached 缓存数据交换、消息队列的数据交换到系统之间使用的 RPC 服务框架等等,都可以算作内部服务的数据交换。内部服务的特点是不用考虑防火墙,不对外开放,速度快(基本无带宽成本)。

内部服务的数据交换协议的选择空间非常大,一般需要考虑:

  • 数据交换协议的性能
  • 是否需要跨语言支持
  • 数据交换协议的消息体大小

持久化存储

对于持久化存储来说,每一种数据交换协议其实都可以实现。一般需要根据应用场景考虑:

  • 是否人工可阅读
  • 存储的空间消耗
  • 序列化和反序列化的性能
  • 是否经过压缩

跨语言

假设我们的网站前端页面展示层使用 PHP 语言开发,中间业务逻辑使用 JAVA 语言开发,那么就涉及到跨语言数据交换的问题。只要系统不是单纯的使用一种语言,那么就必须考虑这个问题。事实上,考虑未来的扩展和需求变化问题,也最好考虑跨语言的数据交互协议。

数据交换协议可升级

在选择数据交换协议的时候,我们同样需要考虑类似于数据库表的?schema 设计时的扩展问题。比如一个提供用户信息的数据交换协议接口,现在包含用户名、性别、住址的信息,在升级过程中,增加了一个最后登录的 IP 信息。如果不考虑数据交换协议升级带来的影响,很可能会导致以前的客户端出现异常或者旧的数据无法正确解析的问题。

兼容协议的巧用

兼容协议的巧用非常有用,新产品兼容提供现有成熟的数据交换协议,可以降低使用门槛和产品的开发速度。比如新浪开源的 memcacheQ 就使用了 memcached 协议。

总结

数据交换协议的各种通用开源实现非常多,数据交换协议只是一个非常宽泛的说法,其实只要实现了数据的序列化和反序列化 ,那么就可以说是一个可以交换数据的协议。数据交换协议的性能其实就是序列化和反序列化的性能,如果加上 RPC,那么跟 RPC 实现本身的性能也有非常大的关系。

我的新浪微博 @sunli1223 , 欢迎与我讨论。

参考链接:

2011-05-08 21:388981

评论

发布
暂无评论
发现更多内容

协同办公零代码领先实践之企业用品管理

用友BIP

协同办公

PasteNow for mac(剪贴板工具)

展初云

Mac软件 剪切板工具

和小伙伴们仔细梳理一下 Spring 国际化吧!从用法到源码!

江南一点雨

Java spring

Mac看图软件:XnViewMP for Mac

加油,小妞!

看图软件 XnViewMP

iOS APP包分析工具 | 京东云技术团队

京东科技开发者

ios 包体积 企业号11月PK榜 ipa

提升编程效率:软件工程师必备的10个Git命令

南城FE

git 前端 软件工程 后端 代码

简单的剪贴板工具 PasteNow中文激活版

胖墩儿不胖y

Mac软件 剪切板工具 剪切板软件

UltraCompare 23 for Mac文件比较工具

展初云

Mac 文件对比工具 UltraCompare

Red Giant Trapcode Suite for Mac中文版 红巨星粒子插件

加油,小妞!

红巨星粒子插件 Red Giant Trapcode Suite

Vue3设计思想及响应式源码剖析 | 京东物流技术团队

京东科技开发者

Vue 前端 源码阅读 VUE 3.0 源码 企业号11月PK榜

iOS信号量造成线程优先级反转 | 京东云技术团队

京东科技开发者

ios 优先级反转 企业号11月PK榜 ios信号

华为云开源 | 线下meetup • 中国人民大学站

华为云开源

云原生 时序数据库 AI大模型 Meetup 华为云开源

做好数据治理,推动国有企业数据资产化加速落地!

用友BIP

数据治理 数据资产入表

测试人员在 Scrum 中的角色是什么?

敏捷开发

项目管理 Scrum 敏捷开发 自动化测试 bug管理

音色逼真、韵律自然的AI人声克隆限时福利!

阿里云CloudImagine

云计算 视频云

Trapcode Suite for Mac(红巨星粒子插件) 2024.0.2激活版

展初云

Mac 3D粒子插件 红巨星粒子插件 Red Giant Trapcode Suite

发挥云计算潜力:Amazon Lightsail 与 Amazon EC2 的综述

亚马逊云科技 (Amazon Web Services)

云计算 API Amazon EC2 VPS Amazon Lightsail

如何打破资产盘点壁垒,用友BIP资产云来支招!

用友BIP

资产盘点

第八期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

服务器如何搭建虚拟主机

Geek_f19a80

服务器

数据库系统概述之常用数据库

小齐写代码

app小程序开发的重点在哪里?|企业软件定制网站建设

Geek_16d138

小程序开发 软件定制 app定制开发

软件系统开发中的数据交换协议_Java_孙立_InfoQ精选文章