写点什么

在微服务中保证服务的一致性

  • 2016-03-22
  • 本文字数:1142 字

    阅读完需:约 4 分钟

在近期举办的 QCon London 大会上, Ben Stopford 在他的演讲中极力主张拥抱去集中化的思想、构建基于服务的系统,并通过流处理工具解决分布式状态所引起的问题。

Stopford 目前任职于 Confluent,参与 Kafka 的开发工作。对他来说,构建基于服务的系统的理由有很多,包括松耦合、边界上下文、易于扩展等等,这些特性让我们能够构建出可以随着时间的推移而不断改进的系统。但是,通过这种方式,我们实质上是在创建分布式的系统,而分布式系统自有其本身的复杂性,并且在延迟与故障等方面还存在着种种问题。

Stopford 描述了分布式系统的两种基本模式:

  • 请求 - 响应的方式对服务进行解耦,通常使用 REST 的服务实现。它很适合于 UI 以及提问的场景。
  • 事件驱动,这种模式的特征是异步的,或是“fire and forget”的消息传递。它非常适合于设计跨服务的复杂依赖。

这两种模式可以结合使用,例如使用请求 - 响应模式实现一个 REST 接口,随后以事件的方式进行后台处理。

Stopford 随后对异步与基于事件的通信,例如队列的使用展开了讨论。他认为这种模型非常简单,只要做到一次只取出一条消息,就能够保证消息的次序。即使将这一方式进行一定程度的扩展,仍然可以保证它的次序,但 Stopford 指出,在某些情况下,我们或许会失去可用性或是次序的保证。他还指出了该方式的另一个缺点,即消息的存在是短期的,因此服务一旦出现故障,就无法回到之前的时间点再次读取这些消息了。

Stopford 认为,更好的方法是使用某种分布式日志支持服务的开发,并以 Kafka 为例。Kafka 是基于日志的概念而设计的,而日志是一种只增的数据结构。因此读写操作都非常高效,对于读操作来说,只需定位到某个位置,并进行顺序读取。而对写操作来说,所做的只是简单的添加而已。

分布式的日志系统还能够为微服务带来以下好处:

  • 始终在线,这依赖于某种容错的代理,例如 Kafka。
  • 负载均衡,每个服务实例都将从一个代理中读取数据。
  • 容错性,这是因为服务可能会产生故障转移,但消息的次序仍然保持不变。
  • 倒带和回放,当系统发现了某个错误并修复之后,服务可以找回原始的消息,并进行回放。

但这种方式仍然有一个未解决的问题,即保持服务的一致性。因为在系统发生故障等一些情况下,很难避免出现一些重复的消息(“即至少一次”的提交机制)。因此,服务在处理他们收到的消息时必须保证幂等性(idempotent)。从逻辑上说,这相当于创建了一种“正好一次”的提交机制。Stopford 表示,这一功能在Kafka 中尚未实现(但相关功能已经在开发中了)。

Martin Kleppmann 在本次大会的另一场演讲中也提到了服务一致性的问题。

QCon 的参会者已经可以欣赏 Stopford 的演讲了,而 InfoQ 的读者很快也能够欣赏到演讲的内容。Stopford 同时也发布了这次演讲的幻灯片

查看英文原文 Microservices for a Streaming World

2016-03-22 19:005037
用户头像

发布了 428 篇内容, 共 173.3 次阅读, 收获喜欢 38 次。

关注

评论

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

定时任务原理方案综述 | 京东云技术团队

京东科技开发者

定时任务 线程 中间件 分布式定时任务 企业号 6 月 PK 榜

图数据库在通信行业有哪些应用?

悦数图数据库

见“芯”知著,浅析北斗芯片关键技术

江湖老铁

专访泛境科技:如何借助3DCAT实时云渲染打造元宇宙解决方案

3DCAT实时渲染

元宇宙 元宇宙解决方案 元宇宙实时云渲染

活动预告|6月15 日 Apache Paimon Meetup,深入解读 Apache Paimon 0.4.0 !

Apache Flink

大数据 flink 社区活动

文件管理开发指南全新登场,快来了解如何访问各类文件

HarmonyOS开发者

HarmonyOS

v7.1.0 Resource Control 功能测试

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

瓴羊Quick BI新增多项可视化分析的模块,为数据驱动决策带来更多可能

流量猫猫头

FreeRTOS使用 — 合理使用内存 “ 任务中创建任务 ”

矜辰所致

内存管理 FreeRTOS 任务创建 6 月 优质更文活动

企业级低代码平台:企业IT部门的得力助手

优秀

低代码 快速开发 企业级低代码

v7.1 LTS Resource Control 试用

TiDB 社区干货传送门

新版本/特性解读 7.x 实践

软件测试/测试开发丨Allure2报告中添加附件-html、视频

测试人

程序员 软件测试 自动化测试 测试开发 Allure

第十一届“创业江苏”科技创业大赛正式启动

科兴未来News

科兴未来|第四届中国·盐城创新创业大赛

科兴未来News

# 文盘Rust -- tokio绑定cpu实践

TiDB 社区干货传送门

开发语言

火热报名 |【崖山论“见”】第3期,如何让SQL速度飞起来

YashanDB

数据库 sql 技术沙龙 优化器 技术干货

全球LED租赁屏市场

Dylan

LED 市场 规模化 全球 技术指南

【架构设计】【问题分析】记一次调用内部es服务超时问题

如果晴天

架构设计 问题定位 问题分析 日志平台 失败策略

tidb变更大小写敏感问题的总结

TiDB 社区干货传送门

集群管理 故障排查/诊断

【TiDB Future App Hackathon 2023 】TiDB 首届全球黑客马拉松,开发者的狂欢夏日盛会!快来一起 Coding 吧!

TiDB 社区干货传送门

深度解析Java程序员从入行到被裁全过程

Java全栈架构师

程序人生 后端 架构师 java程序员 java面试

我对混沌工程的理解

老张

混沌工程

天翼云SD-WAN解决方案直播

天翼云开发者社区

云计算 服务器 云服务

【零售电商系列】走进亚马逊(二)

小诚信驿站

6 月 优质更文活动

软件测试/测试开发丨Allure2报告中添加附件-日志

测试人

程序员 软件测试 测试开发 Allure

想给业务松松绑,又怕数据泄漏隐患? 动态脱敏了解一下!

极盾科技

数据安全

华秋干货铺 | HDMI接口需注意的PCB可制造性设计问题

华秋电子

对线面试官-为什么要使用MQ

派大星

Java 面试题

海外直播源码技术文字聊天功能的配置

山东布谷科技

软件开发、 区块链二维码溯源系统开发 源码搭建 直播源码 海外直播源码

SAP ABAP SM50 事务码的另类用途 - ABAP工作进程对数据库表读取操作的检测

Jerry Wang

SAP abap Netweaver 思爱普 6 月 优质更文活动

为什么 Serverless 能提升资源利用率?

阿里巴巴云原生

阿里云 Serverless 云原生

在微服务中保证服务的一致性_语言 & 开发_Jan Stenberg_InfoQ精选文章