前言

最近在学习MIT6.824的分布式系统课程,正在看Raft的论文,Raft是一种共识算法(Consensus algorithms),共识算法是用来保证分布式系统里数据的一致性的算法,所以也可以说是一个一致性算法。

在学习这个课程的过程中,发现其实对分布式系统这个概念很模糊,好像知道是什么却又好像说不出来,不禁思考起来,究竟什么是分布式系统?为什么我们需要分布式系统?这个问题也许很简单,但是还是想通过自己的语言去表达,加深印象,希望我能阐述清楚。

单机系统遇到的问题

为什么我们需要分布式系统而不是单机系统呢?一个概念或者理论的出现,都是为了解决问题,单机系统遇到的问题是什么呢?分布式系统要解决的问题主要是单机系统中系统容量不足及提高系统可用性。

提高系统容量

随着业务越来越复杂,服务也会变得越来越复杂,单台机器的CPU、内存已经无法满足部署一个庞大系统的性能要求。当然可以通过提高系统配置暂时解决问题,但是不管如何提高系统的配置,单台机器总会达到性能瓶颈的时候,所以需要多台机器才能应对这些扩张的功能。通过水平(加机器)和垂直(拆分为多个子系统)拆分系统,变成了一个分布式架构。

解决单点故障

在单台机器上部署服务,如果机器出现故障导致服务挂了,那么整个系统就会崩溃了。因此就要提高系统的可用性,系统的高可用性意味着一群服务器运行时与单台机器运行时没区别。这意味着要解决系统架构中的单点故障问题,通过引入分布式架构来增加冗余,从而提高系统的可用性,即使单台机器挂了也能保证服务正常运作。

基于上面两个原因,我们就需要分布式系统来解决系统容量不足和系统高可用问题。

分布式系统是什么

看看维基百科上的定义:

A distributed system is a system whose components are located on different networked computers, which communicate and coordinate their actions by passing messages to one another.[1] The components interact with one another in order to achieve a common goal. Three significant characteristics of distributed systems are: concurrency of components, lack of a global clock, and independent failure of components.[1] Examples of distributed systems vary from SOA-based systems to massively multiplayer online games to peer-to-peer applications.

在计算机科学里,分布式系统是一个组件/软件分布在网络中不同服务器,服务器之间通过传递信息来通信和协作的系统。

分布式架构

举一个例子,来看看一个分布式系统架构:

如图所示,A、B、C三台机器,机器A部署了服务AA、BB,机器B部署了BB、CC,机器C部署了AA、CC,AA需要调用BB,BB需要调用CC,即AA与BB通信,BB与CC通信。

一个接口rpcA调用AA,AA调用BB,BB调用CC,调用路径如图(1->2->3),每一个调用所到达的机器都有可能为服务部署的机器之一。

图所表示的分布式系统架构有很多细节没有展示出来,但这是一个比较简单的分布式架构例子。

分布式系统中,要实现调用服务能到达部署的机器之一,就要用到负载均衡,可以分发集中的流量。像例子中的rpcA接口,调用链路rpcA->AA->BB->CC,整个链路较长,可以把全部的调用都写到rpcA接口中,但是如果某一步失败了,整个接口就失败了,因此可以将流程拆分到多个小的服务,微服务化,提高系统性能。

以上就是分布式系统的介绍及分布式系统诞生的原因,分布式系统的性价比很高、处理能力强、可靠性高、也有很好的扩展性,能为系统带来很好的性能和可用性。但是,分布式系统中还有很多不确定的问题存在。

分布式系统遇到的问题

做了负载均衡和微服务,是不是就可以高枕无忧,安心等待下一步的扩容扩展服务?很遗憾,分布式系统中还有很多的不确定性,比如应用架构引入了分布式系统之后,还有可能带来下面这些问题:

  • 系统的吞吐量会变大,但是响应时间会变长。

  • 某个非核心服务出现故障,为了不影响主流程,要加入服务降级和熔断策略

  • 同一个请求可能被服务集群里面的多台机器处理,然后保证幂等性

这些问题都需要引入其他手段解决来提高系统的稳定性,而加入了这些技术之后,还会衍生出更多的子问题,这就需要我们不断地用各式各样的技术和手段来解决这些问题。这些问题会在后面文章再做介绍。

总结

分布式系统领域里,还有一大片浩瀚的海洋可以探索,上面的例子只是从分布式应用角度介绍了这个概念,分布式系统里面还有分布式计算、分布式数据与存储等等领域。每一个领域都值得深入探索,这是一条漫长的学习之路。

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,顺手点个在看吧,谢谢

更多精彩内容,请关注个人公众号。

为什么需要分布式系统相关推荐

  1. 分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论

    文章目录 1. 一致性 概览 1.1 分布式系统的 "正确性" 1.2 线性一致性(Linearizability) 1.3 顺序一致性(Sequential consistenc ...

  2. 《异步处理在分布式系统中的优化作用》学习笔记

    原文地址:http://www.infoq.com/cn/presentations/optimization-of-asynchronous-processing-in-distributed-sy ...

  3. Travis CI : 最小的分布式系统(三)

    日志的作用有两个:当构建日志的数据块通过消息队列进来时,更新数据库对应行,然后推送它到Pusher用于实时的用户界面更新. 日志块以流的形式在同一个时间从不同的进程中进来,然后被一个进程处理.这个进程 ...

  4. Travis CI : 最小的分布式系统(一)

    (本文翻译自http://www.paperplanes.de/2013/10/18/the-smallest-distributed-system.html,由@金斌_jinbin 翻译) Trav ...

  5. 整理下.net分布式系统架构的思路

    最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...

  6. 如何选择分布式系统(区块链)协议?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 如何选择分布式系统(区块链)协议? 在构建包分布式系统功能的应用程序时,<财富>500强企业和创始人经常问我 ...

  7. 分布式系统的时间顺序

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 分布式系统的时间顺序 区块链被认为是分布式的系统,分布式系统中由于多节点,通讯.物理位置等的问题,各节点间时间一致的问题 ...

  8. 分布式系统中节点之间的同步形成区块链

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 分布式系统中节点之间的同步形成区块链 分布式系统由Tanenbaum定义,"分布式系统是一组独立的计算 ...

  9. 工作中感受到的消息中间件在分布式系统中的使用场景

    经历 以前在qunar实习,第一次接触消息中间件,那时候概念还不清楚,朦朦胧胧有个初步认识,现在正式工作了,又一次接触了消息中间件,初步总结几种场景. 场景 1.分布式系统中,不同系统之间传递消息. ...

  10. 美团即时物流的分布式系统架构设计

    背景 美团外卖已经发展了五年,即时物流探索也经历了3年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验.最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低 ...

最新文章

  1. Spring boot 忽略对mybatis的配置
  2. android学习笔记之十服务(Service)
  3. 机器学习实战第一步:特征选择与特征工程「附代码」
  4. XML Parser(Tinyxml)的使用
  5. OpenCV导出模板参数文件
  6. 用python爬取网页数据并存入数据库中源代码_Python爬取51cto数据并存入MySQL方法详解...
  7. linux 修改文件名_Linux常用命令
  8. linux防火墙ddos,Linux iptables防火墙详解 + 配置抗DDOS***策略实战
  9. (12)FPGA面试技能提升篇(IUS、PT、Leda)
  10. java读取http文件内容_使用HTTP读取文件的第一部分
  11. 优化理论09-----线性等式约束问题的投影方法、投影最速下降算法、解决方向查找问题(DFP)、牛顿法的修正在线性等式约束、变度量法
  12. 应用安全 - Web安全 - 文件包含攻防
  13. Linux 5.7将进一步支持龙芯处理器
  14. micropython源码分析之c模组注册
  15. 可解释机器学习- LIME模型讲解|interpretable machine learning-LIME
  16. jquery php 分页插件,JQ分页插件
  17. YOLO系列 yolov1 keras实现
  18. 基于php的海贼王动漫网站
  19. iOS-Core-Animation-Advanced-Techniques(三)
  20. 洛谷千题详解 | P1010 [NOIP1998 普及组] 幂次方【C++、Java、Python、Pascal语言】

热门文章

  1. html 背景图不随滚轮滚动 文字滚动
  2. VHDL语言基础-组合逻辑电路-基本逻辑门电路
  3. 知更鸟主题样式修改CSS
  4. 最新免费版 Office 全家桶Copilot,Gamma+MindShow 两大ChatGPT AI创意工具GPT-4神器助力高效智能制作 PPT,一键生成,与AI智能对话修改PPT(免安装)
  5. qt布局 setlayout无效
  6. [附源码]Java计算机毕业设计SSM防疫物资捐赠系统
  7. 未来元宇宙并不仅仅是基于单独某一项技术的发展
  8. java验证cron表达式_Cron表达式详解和表达式的验证
  9. 中职计算机网络课后题,中职计算机网络技术试题.doc
  10. 大数据展示 定位_大数据中心定位