写点什么

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

  • 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:388182

评论

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

SolidUI AI生成可视化,开创性开源项目,版本0.1.0 功能讲解

李孟聊AI

Web 2D 3D AIGC ChatGPT

云原生K8S精选的分布式可靠的键值存储etcd原理和实践

不在线第一只蜗牛

云原生 k8s etcd

多领域应用落地,火山引擎ByteHouse加速云数仓升级

字节跳动数据平台

企业如何落地DevOps(下)

老张

DevOps 软件工程

2023开放原子全球开源峰会,蚂蚁图计算平台开源业内首个工业级流图计算引擎

TuGraphAnalytics

GitHub 开源 图计算 蚂蚁 GeaFlow

网心科技入选2023年“边缘计算技术创新先锋案例”

网心科技

边缘计算 边缘云 AIGC

如果我是一个小白,怎么开发网页

猫九

前端

SpringIoc容器之Aware | 京东云技术团队

京东科技开发者

spring aware springloc Aware 接口 企业号 7 月 PK 榜

使用第一性原理思维思考如何打造提高生产力的平台 | 京东云技术团队

京东科技开发者

数字化转型 平台工程 企业号 7 月 PK 榜

构建学生数据库

猫九

数据库·

数智化底座正在成为当前竞争的焦点

用友BIP

数智底座

APP流水线测试领域探索与最佳实践 | 京东物流技术团队

京东科技开发者

测试 app测试 app自动化测试 企业号 7 月 PK 榜

全新技术驱动预算管理全面升级

用友BIP

全面预算

DataBuff 如何结合 Opentelemetry 监控 golang 应用

乘云数字DataBuff

云原生 APM 可观测性 应用性能监控 智能运维AIOps

Kubernetes云原生实战:分布式GeaFlow实现图研发,构建第一个商业智能应用

TuGraphAnalytics

Kubernetes 云原生 k8s BI 商业智能

掌握 Dubbo:入门教程

Apifox

程序员 gRPC dubbo RPC 开发

华为云GaussDB亮相2023可信数据库发展大会,荣获三项评测证书!

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

CST电磁仿真软件配置的CPU、内存、显卡显存越大越好吗?

思茂信息

cst cst使用教程 cst操作 cst电磁仿真 cst仿真软件

从大数据到图计算-Graph On BigData

TuGraphAnalytics

GitHub 大数据 开源 图计算 GeaFlow

谁在以太坊区块链上循环交易?GeaFlow+Kafka的0元流图解决方案

TuGraphAnalytics

区块链 以太坊 kafka 图计算 GeaFlow

我感兴趣的技术四剑客 | 社区征文

法医

前端 年中技术盘点

从混沌到秩序的蜕变,SRE解码云计算运维奥秘

鲸品堂

云计算 SRE SRE实践 企业号 7 月 PK 榜

浅谈业务级灾备的架构模式

得物技术

运维 稳定生产

怎样实现纯前端百万行数据秒级响应

EquatorCoco

前端 表格控件

持续推进平台化、生态化用友助力数智化安全有效落地

用友BIP

信创 国产替代

Mybatis-SQL分析组件 | 京东云技术团队

京东科技开发者

mybatis sql mybatis入门 企业号 7 月 PK 榜

体系完整的数智化底座支撑企业创新发展,实现国产替代

用友BIP

国产替代

华为Mate X3、P60系列用户隐藏福利:唤醒小艺解决相册搜图难题

最新动态

TDengine“露面”中国油气田企业智慧油田技术交流大会,为时序数据处理带来全新思路

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

论文解读|TuGraph Analytics 流式图计算论文入选国际顶会 SIGMOD

TuGraphAnalytics

大数据 论文 图计算 SIGMOD GeaFlow

Unity JobSystem使用及技巧

快乐非自愿限量之名

Unity 教程

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