专栏首页linjinhe的专栏设计数据密集型应用(8-9):从单机到分布式

设计数据密集型应用(8-9):从单机到分布式

这两章的内容介绍从单机转向分布式系会遇到的问题,简单提炼一下几个重要概念。

分布式系统中的问题

从单机到分布式会遇到很多新的问题。

1、网络。

网络是不可靠的,随时可能丢包。

网络是有延迟的,而且延迟可能很高。

所以,当你通过网络发送一个数据包的时候,程序必须考虑到这个数据包可能丢失、也可能延迟。

同样的,如果对端没回复,也不一定是因为对方挂了,有可能是网络问题。

2、时钟。

在分布式系统中,不同机器的时钟是无法完全同步的,并且机器的时钟有可能向前或向后跳跃,不保证单调递增。就算是 Google Spanner 中采用的 GPS + 原子钟,也只能保证不同机器的时钟误差是在一个几毫秒的范围内。

3、部分故障(partial failures)。

可能出现部分节点故障,这是分布式与单机的最大不同。分布式系统不能因为少部分节点的故障而影响整个系统的可用性。

分布式环境下,只能通过网络通信来检测节点是否故障,但是网络又是不可靠的,所以只能通过“节点超时未应答”来判定节点故障——实际上有可能是网络问题,这种情况如果没有处理好,可能会影响数据一致性。

4、超时。

在单机环境下,一个请求只有成功 or 失败两种状态。

在分布式环境下,还存在第三种状态——超时。

超时的请求,就是一只薛定谔的猫——有可能是成功,也有可能是失败。只能再发个请求去确定一下。

对于一些非常重要的请求,一般将其设计成幂等的来解决,遇到超时可以继续重试。

线性一致性(Linearizability)

Linearizability 是一种强一致性的模型,这个概念一开始应该是出自并发编程领域,感兴趣的话可以参考论文:Linearizability: A Correctness Condition for Concurrent Objects

对于提供线性一致性的的分布式系统,在这个系统中:

  1. 多副本的多份数据在外部看起来就像是一份数据。
  2. 所有操作在外部看起来都是原子的。

实现线性一致性的分布式共识算法主要有:

  1. Paxos
  2. Raft

分布式事务

前面讲到了分片和事务,分布式事务其实就是跨分片的事务。

有不少开源数据库实现了分布式事务,比如:

  • TiKV
  • CockroachDB
  • FoundationDB
  • Calvin

想要深入了解分布式事务,这里推荐一些论文:

  1. Omid 四部曲:
    1. Omid: Lock-free Transactional Support for Distributed Data Stores
    2. Omid, Reloaded: Scalable and Highly-Available Transaction Processing
    3. A Critique of Snapshot Isolation
    4. Taking Omid to the Clouds: Fast, Scalable Transactions for Real-Time Cloud Analytics
  2. Google 家的实现
    1. Large-scale Incremental Processing Using Distributed Transactions and Notifications
    2. Spanner: Google’s Globally Distributed Database
  3. Deterministic Database
    1. Calvin: Fast Distributed Transactions for Partitioned Database Systems

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计数据密集型应用(6-7):分片、事务

    随着业务发展,用户数量、商品数量、订单数量都在持续增长,数据库的负载越来越高。我们开始对数据库进行垂直拆分(垂直分片),把这三张表拆到三个数据库,而业务代码改改...

    linjinhe
  • 大型分布式网站架构技术总结

    #0 系列目录# 大型分布式网站架构 大型分布式网站架构技术总结 本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进...

    java思维导图
  • 11种概率分布,你了解几个?

    了解常见的概率分布十分必要,它是概率统计的基石。这是昨天推送的 从概率统计到深度学习,四大技术路线图谱,都在这里!文章中的第一大技术路线图谱如下所示,图中左侧正...

    double
  • Github 项目 - CurriculumNet

    这里实现了关于论文里基于密度聚类算法(density-based clustering algorithm) 创建学习课程,以采用数据分布密度来评估训练样本的复...

    AIHGF
  • 回顾Java 8 9 10的新特性,展望即将来临的11和明年的12【大牛经验】

    1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议纪录;

    Java帮帮
  • 全球前十大证券交易所在区块链领域的探索和布局

    本文作者:中国(上海)自贸区研究院(浦东改发院)金融研究室主任 刘斌 微信号 shpdlb

    点滴科技资讯
  • 一文归纳总结分布式架构的那些事!

    进入十一月,最火热的话题与期待的日子自然是双十一狂欢购物节了,作为程序员的你除了要清空自己的购物车之外,最关心的是不是双十一架构技术是如何承受亿级用户流量的冲击...

    Java架构
  • 十面阿里,七面头条

    先解释一下十面阿里,总共分为阿里云四面,蚂蚁两面,菜鸟四面;七面头条分为金融三面,抖音一面,效率工程三面;六个Offer分别是阿里、腾讯、头条、华为、蘑菇街、三...

    好好学java
  • 11种概率分布,你了解几个?

    1) 离散随机变量的均匀分布:假设 X 有 k 个取值:x1, x2, ..., xk 则均匀分布的概率密度函数为:

    石晓文
  • 读《大型网站技术架构》

    《大型网站技术架构》是自己接触的第一本架构知识的书籍,还是在14年时买的实体书,前后读了几遍,颇有所得,后来实体书被朋友借走再没归还,也就没再翻过。

    高广超
  • 「首度揭秘」大规模HPC生产环境 IO 特征

    在王坚博士的《在线》一书中提到,单纯谈数据的“大”,意义是不大的。欧洲核子研究中心(CERN)进行一次原子对撞产生的数据大到惊人,而如何通过计算的方式去挖掘出这...

    焱融科技
  • 数据安全实践之数据资产管理

    在企业安全建设中,资产管理是很多安全工作的基础。而数据资产管理可以帮助我们更准确的发现安全风险,执行更有效的控制措施,在数据安全体系化建设中也有着举足轻重的作用...

    FB客服
  • windows下hashcat利用GPU显卡性能破解密码

    由于一般密码破解工具的破解速度实在是太慢,而且支持的密码破解协议也不多,暴力破解的话,有的密码1年时间也破不出来,

    剧终
  • Hadoop2.7.6_05_mapreduce-Yarn

      Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;

    踏歌行
  • 双非末流一本面霸,十面阿里,七面头条,4个月斩获六个Offer!

    从二月份看到阿里云的招聘贴就投了,那是我最早投递的公司,当时也没什么经验,导致表现得很糟糕,最后四面跪,当时伤心到谷底,幸好跪得比较早,跪了之后简历被释放掉,还...

    Java架构技术
  • 卡巴斯基实验室:2018 Q2 IT威胁演变的统计分析

    在2018年第二季度,卡巴斯基实验室检测到1,744,244个恶意安装包,比上一季度增加了421,666个。

    FB客服
  • 机器学习:基于网格的聚类算法

    俗话说:“物以类聚,人以群分”,在机器学习中,聚类算法是一种无监督分类算法。聚类算法很多,包括基于划分的聚类算法(如:kmeans),基于层次的聚类算法(如:B...

    张蓓
  • 单变量和多变量高斯分布:可视化理解

    高斯分布是统计中最重要的概率分布,在机器学习中也很重要。因为很多自然现象,比如人口的身高,血压,鞋子的尺码,教育指标,考试成绩,还有很多更重要的自然因素都遵循...

    deephub
  • 使用Redis实现UA池

    最近忙于业务开发、交接和游戏,加上碰上了不定时出现的犹豫期和困惑期,荒废学业了一段时间。天冷了,要重新拾起开始下阶段的学习了。之前接触到的一些数据搜索项目,涉及...

    Throwable

扫码关注云+社区

领取腾讯云代金券