[译]分布式系统速成课程

原文链接:https://blog.bytebytego.com/p/a-crash-course-on-distributed-systems

分布式系统是多台计算机(也称为节点)的集合,它们协作执行特定任务或提供服务。

这些节点在物理上是分开的,并通过网络传递消息相互通信。分布式系统可以跨越地理边界,使其能够利用来自不同位置的资源。

img

分布式系统有几个区别于传统集中式系统的特点:

  • 分布式系统中的计算机在物理上是分开的,并通过网络连接。它们不共享内存或公共时钟。
  • 从外部视角来看,分布式系统对于最终用户来说是一个单一、统一的实体。
  • 分布式系统提供了在系统中添加或删除计算机的灵活性。
  • 分布式系统中的节点需要相互协调并达成一致才能一致地执行操作。
  • 分布式系统中的节点可能独立发生故障,并且消息可能会在网络上丢失或延迟。

分布式系统在我们的日常生活中无处不在。例如 Google 搜索等大型 Web 应用程序、在线银行系统、多人游戏等。这些系统利用多台计算机协同工作,提供无缝且响应迅速的用户体验。

More »

如何设计一个分布式ID生成器保证ID按时间有序?

很多业务有生成唯一 ID 并作为数据库主键的需求。数据库会在这个字段上建立聚集索引(参考 MySQL InnoDB),即该字段会影响各条数据再物理存储上的顺序。

ID还要尽可能,节省内存,让数据库索引效率更高。基本上64位整数能够满足绝大多数的场景,但是如果能做到比64位更短那就更好了。需要根据具体业务进行分析,预估出ID的最大值,这个最大值通常比64位整数的上限小很多,于是我们可以用更少的bit表示这个ID。

查询的时候,往往有分页或者排序的需求,所以需要给每条数据添加一个时间字段,并在其上建立普通索引(Secondary Index)。但是普通索引的访问效率比聚集索引慢,如果能够让ID按照时间粗略有序,则可以省去这个时间字段。为什么不是按照时间精确有序呢?因为按照时间精确有序是做不到的,除非用一个单机算法,在分布式场景下做到精确有序性能一般很差。

More »

分布式基础知识

什么是分布式系统?

分布式系统是指由多个独立的计算机节点(或服务器)通过网络相互连接和协作,共同完成某个任务或提供某个服务的系统。在分布式系统中,各个节点可以同时进行计算、存储和通信,并通过消息传递等方式进行协调和同步。

分布式系统的设计目标是提高系统的性能、可靠性和可扩展性,同时减少单点故障和提高系统的容错性。通过将任务和数据分布到多个节点上,分布式系统可以实现更高的并行性和处理能力。此外,分布式系统还可以提供更好的负载均衡,以应对不断增长的工作负载。

分布式系统的主要特征

分布式系统具有以下主要特征:

  1. 分布性:分布式系统中的计算机节点分布在不同的物理或逻辑位置上,可以是同一局域网内的多台机器,也可以是分布在全球不同地区的服务器。
  2. 并行性:分布式系统中的节点可以同时进行计算和处理任务,从而实现并行处理和提高系统的性能。并行性可以通过将任务划分为子任务,并在不同节点上并行执行来实现。
  3. 通信:分布式系统通过网络进行节点之间的通信和数据传输,以实现协作和信息交换。节点之间的通信可以通过消息传递、远程过程调用(RPC)或分布式共享内存等方式实现。
  4. 缺乏全局时钟:由于节点之间的通信延迟和不可靠性,分布式系统往往无法依赖全局时钟来进行同步。因此,分布式系统需要采用一些分布式算法来实现一致性和协调,如分布式锁、一致性协议等。
  5. 容错性:分布式系统需要具备容错机制,以应对节点故障、网络故障或其他异常情况。容错性的实现通常包括备份和冗余,例如使用冗余节点、数据复制和副本机制,以确保系统的可用性和数据的完整性。
  6. 可扩展性:分布式系统应具备良好的可扩展性,即能够方便地扩展节点数量和处理能力,以适应不断增长的工作负载。可扩展性的实现可能包括水平扩展、垂直扩展、负载均衡等技术手段。
  7. 不确定性:由于节点之间的通信延迟和不可靠性,分布式系统中的操作可能存在不确定性。例如,消息传递可能会有延迟,网络可能会发生分区,导致节点之间的信息不一致。因此,分布式系统需要考虑和处理这种不确定性情况。

这些特征使得分布式系统能够实现高性能、高可用性和可扩展性,但也带来了挑战,如一致性问题、并发控制、故障处理等。因此,在设计和开发分布式系统时,需要考虑这些特征,并选择合适的技术和算法来解决相关问题。

More »
[译]《分布式系统:为了乐趣和利益》1.高层分布式系统

[译]《分布式系统:为了乐趣和利益》1.高层分布式系统

《分布式系统:为了乐趣和利益》是一本广受欢迎的资源,用于理解和学习分布式系统。该书由作者 Mikito Takada 撰写,介绍了构建分布式系统的基本概念、原则和挑战。

这本书涵盖了与分布式系统相关的广泛主题,包括网络、容错性、一致性模型、分布式算法、可扩展性等等。它旨在以清晰易懂的方式解释复杂的概念,适合初学者和有经验的分布式系统从业者阅读。

在整本书中,作者提供了各种实际案例和案例研究,以说明分布式系统的实际应用和实践方面。它还强调了构建分布式系统涉及的权衡和设计考虑,帮助读者全面理解这个主题。

《分布式系统:为了乐趣和利益》作为开源资源,可以免费在线获取,非常适合任何对学习分布式系统感兴趣的人。

原文链接:Distributed systems: for fun and profit

More »

[译]《分布式系统:为了乐趣和利益》2.抽象层次的上下

《分布式系统:为了乐趣和利益》是一本广受欢迎的资源,用于理解和学习分布式系统。该书由作者 Mikito Takada 撰写,介绍了构建分布式系统的基本概念、原则和挑战。

这本书涵盖了与分布式系统相关的广泛主题,包括网络、容错性、一致性模型、分布式算法、可扩展性等等。它旨在以清晰易懂的方式解释复杂的概念,适合初学者和有经验的分布式系统从业者阅读。

在整本书中,作者提供了各种实际案例和案例研究,以说明分布式系统的实际应用和实践方面。它还强调了构建分布式系统涉及的权衡和设计考虑,帮助读者全面理解这个主题。

《分布式系统:为了乐趣和利益》作为开源资源,可以免费在线获取,非常适合任何对学习分布式系统感兴趣的人。

原文链接:Distributed systems: for fun and profit

More »

[译]《分布式系统:为了乐趣和利益》3.时间及顺序

《分布式系统:为了乐趣和利益》是一本广受欢迎的资源,用于理解和学习分布式系统。该书由作者 Mikito Takada 撰写,介绍了构建分布式系统的基本概念、原则和挑战。

这本书涵盖了与分布式系统相关的广泛主题,包括网络、容错性、一致性模型、分布式算法、可扩展性等等。它旨在以清晰易懂的方式解释复杂的概念,适合初学者和有经验的分布式系统从业者阅读。

在整本书中,作者提供了各种实际案例和案例研究,以说明分布式系统的实际应用和实践方面。它还强调了构建分布式系统涉及的权衡和设计考虑,帮助读者全面理解这个主题。

《分布式系统:为了乐趣和利益》作为开源资源,可以免费在线获取,非常适合任何对学习分布式系统感兴趣的人。

原文链接:Distributed systems: for fun and profit

More »

[译]《分布式系统:为了乐趣和利益》4.复制

《分布式系统:为了乐趣和利益》是一本广受欢迎的资源,用于理解和学习分布式系统。该书由作者 Mikito Takada 撰写,介绍了构建分布式系统的基本概念、原则和挑战。

这本书涵盖了与分布式系统相关的广泛主题,包括网络、容错性、一致性模型、分布式算法、可扩展性等等。它旨在以清晰易懂的方式解释复杂的概念,适合初学者和有经验的分布式系统从业者阅读。

在整本书中,作者提供了各种实际案例和案例研究,以说明分布式系统的实际应用和实践方面。它还强调了构建分布式系统涉及的权衡和设计考虑,帮助读者全面理解这个主题。

《分布式系统:为了乐趣和利益》作为开源资源,可以免费在线获取,非常适合任何对学习分布式系统感兴趣的人。

原文链接:Distributed systems: for fun and profit

More »

[译]《分布式系统:为了乐趣和利益》5.复制:弱一致性模型协议

《分布式系统:为了乐趣和利益》是一本广受欢迎的资源,用于理解和学习分布式系统。该书由作者 Mikito Takada 撰写,介绍了构建分布式系统的基本概念、原则和挑战。

这本书涵盖了与分布式系统相关的广泛主题,包括网络、容错性、一致性模型、分布式算法、可扩展性等等。它旨在以清晰易懂的方式解释复杂的概念,适合初学者和有经验的分布式系统从业者阅读。

在整本书中,作者提供了各种实际案例和案例研究,以说明分布式系统的实际应用和实践方面。它还强调了构建分布式系统涉及的权衡和设计考虑,帮助读者全面理解这个主题。

《分布式系统:为了乐趣和利益》作为开源资源,可以免费在线获取,非常适合任何对学习分布式系统感兴趣的人。

原文链接:Distributed systems: for fun and profit

More »

[译]《分布式系统:为了乐趣和利益》6.进一步阅读和附录

《分布式系统:为了乐趣和利益》是一本广受欢迎的资源,用于理解和学习分布式系统。该书由作者Mikito Takada撰写,介绍了构建分布式系统的基本概念、原则和挑战。

这本书涵盖了与分布式系统相关的广泛主题,包括网络、容错性、一致性模型、分布式算法、可扩展性等等。它旨在以清晰易懂的方式解释复杂的概念,适合初学者和有经验的分布式系统从业者阅读。

在整本书中,作者提供了各种实际案例和案例研究,以说明分布式系统的实际应用和实践方面。它还强调了构建分布式系统涉及的权衡和设计考虑,帮助读者全面理解这个主题。

《分布式系统:为了乐趣和利益》作为开源资源,可以免费在线获取,非常适合任何对学习分布式系统感兴趣的人。

原文链接:Distributed systems: for fun and profit

More »

[译]给年轻的工程师们的关于分布式系统的一些笔记

我一直在思考分布式系统工程师在工作中学到的教训。我们大部分的教导都来自于在生产环境中犯过的错误留下的伤痕。这些伤痕固然是有用的提醒,但让更多的工程师能够完整地保留手指会更好。

新的系统工程师在自我学习中会遇到分布式计算的谬论和CAP定理。但这些都是抽象的概念,缺乏针对经验不足的工程师直接可行的建议。让人惊讶的是,新工程师在开始工作时所了解到的背景信息是如此之少。

下面是我作为一名分布式系统工程师学到的一些经验教训,值得告诉新工程师。其中一些经验是微妙的,一些是令人惊讶的,但没有一条是有争议的。这个列表是为了引导新的分布式系统工程师思考他们所从事领域的问题,虽然不是全面的,但是是一个很好的开始。

这个列表最糟糕的特点是它主要关注技术问题,很少讨论工程师可能遇到的社交问题。由于分布式系统需要更多的机器和资本,它们的工程师往往需要与更多的团队和更大的组织合作。社交问题通常是任何软件开发者工作中最困难的部分,也许对于分布式系统的开发来说尤其如此。

我们的背景、教育和经验使我们倾向于采用技术解决方案,即使社交解决方案可能更高效、更令人满意。让我们试着纠正这一点。与计算机相比,人们并不那么挑剔,即使他们的接口没有那么标准化。

好了,我们开始吧。

分布式系统是不同的,因为它们经常失败。 当被问及是什么将分布式系统与软件工程的其他领域区分开来时,这位新工程师经常引用延迟,认为这是使分布式计算变得困难的原因。

More »