红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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

  • 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:004998
用户头像

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

关注

评论

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

Android 修改系统音量及监听

yechaoa

android 6月月更 AudioManager

vue导航路由

小恺

6月月更

uni-app进阶之创建组件/原生渲染【day9】

恒山其若陋兮

6月月更

【网络进阶】网络问题排查实例集锦(实战经验分享)

dvlinker

Linux 服务器 网络知识 网络进阶

JVM调优简要思想及简单案例-新生代回收算法

zarmnosaj

6月月更

AWS的运营管理类服务

冯亮

云计算 AWS

Java Core 「13」ReentrantReadWriteLock 再探析

Samson

学习笔记 Java core 6月月更

【网络入门】详解常用的基础网络知识(面试常考内容)

dvlinker

网络知识 TCP与UDP 心跳机制与丢包重传 网络命令 抓包分析

小红书严打买卖账号及刷量作弊行为:必须维护平台的公信力

石头IT视角

百度安全再次亮相高性能计算国际顶会SC 2022 — 采用Fuzzing技术防护高性能计算静默数据损坏安全风险

百度安全

百度安全 百度安全实验室 高性能计算国际顶会 SC 2022 Fuzzing技术防护

统一日志

卢卡多多

日志 6月月更

一问带你彻底了解JVM-Java虚拟机内存区域详解

派大星

JVM

攻防演练中红队的内网横向扩展

穿过生命散发芬芳

6月月更 攻防演练

leetcode 221. Maximal Square 最大正方形(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

接口测试(apipost、jmeter和python脚本)——测试工具

Xd

Java 后端 接口测试

数据资产管理

奔向架构师

数据资产 数据管理 6月月更

在线JSON转YAML工具

入门小站

工具

Larix真正的去中心化借贷平台,并开启double Mining活动

鳄鱼视界

透过华为军团看科技之变(四):互动媒体(音乐)

脑极体

新课上线 | 每次 5 分钟,轻松玩转阿里云容器服务!

阿里巴巴云原生

阿里云 云原生 容器服务

Any to Any 实时变声的实现与落地丨RTC Dev Meetup

声网

音频 RTC Dev Meetup 生态专栏 语音处理

linux之我常用的20条命令( 之三)

入门小站

Linux

军体拳代码

工程师日月

6月月更

Hoo虎符研究院 | 币圈后浪D/Bond一个基于ERC-3475标准开发的去中心化债券生态系统平台

区块链前沿News

Hoo 虎符交易所

稳住了,别抖!—— 看GetX 的Worker如何防抖

岛上码农

flutter ios 前端 安卓开发 6月月更

「微服务的细节」—— 周期性注册 or 一次性注册

袁世超

微服务

数据库每日一题---第18天:每天的领导和合伙人

知心宝贝

数据库 大数据 前端 后端 6月月更

在线文本列表批量添加行号工具

入门小站

工具

服务治理的工作内容

阿泽🧸

微服务 6月月更

Discourse 新用户可插入媒体的数量

HoneyMoose

深挖数据价值,2022隐私计算大赛开启!

Jessica@数牍

隐私计算 大数据技能大赛 隐匿查询性能优化 隐私求交性能优化

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