最近在极客时间看到一个课程叫《左耳听风》,第一反应是叫这个名字,太不突出重点了,能好卖吗。但当了解作者后,发现是我错了。作者好牛比啊。所以要感受下骨灰级程序员的魅力。先从分布式系统入手学习吧。

分布式系统架构的冰与火

首先,阐述一下为什么需要分布式系统,而不是传统的单体架构。这个其实对于大部分人来说已经不是问题了。但还是阐述下吧,使用分布式系统主要有两方面原因。

  • 增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。

  • 加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。

当然,分布式系统还有一些优势,比如:

  • 因为模块化,所以系统模块重用度更高;
  • 因为软件服务模块被拆分,开发和发布速度可以并行而变得更快;

  • 系统扩展性更高;

  • 团队协作流程也会得到改善;

  • ……

不过,这个世界上不存在完美的技术方案,采用任何技术方案都是“按下葫芦浮起瓢”,都是有得有失。

下面这个表格比较了单体应用和分布式架构的优缺点。

从上面的表格我们可以看到,分布式系统虽然有一些优势,但也存在一些问题。

  • 架构设计变得复杂(尤其是其中的分布式事务)。

  • 部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂。

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

  • 运维复杂度会因为服务变多而变得很复杂。

  • 架构复杂导致学习曲线变大。

  • 测试和查错的复杂度增大。

  • 技术可以很多样,这会带来维护和运维的复杂度。

  • 管理分布式系统中的服务和调度变得困难和复杂。

也就是说,分布式系统架构的难点在于系统设计,以及管理和运维。所以,分布式架构解决了“单点”和“性能容量”的问题,但却新增了一堆问题。而对于这些新增的问题,还会衍生出更多的子问题,这就需要我们不断地用各式各样的技术和手段来解决这些问题。

技术栈

正如我们前面所说的,构建分布式系统的目的是增加系统容量,提高系统的可用性,转换成技术方面,也就是完成下面两件事。

  • 大流量处理。通过集群技术把大规模并发请求的负载分散到不同的机器上。
  • 关键业务保护。提高后台服务的可用性,把故障隔离起来阻止多米诺骨牌效应(雪崩效应)。如果流量过大,需要对业务降级,以保护关键业务流转。

说白了就是干两件事。一是提高整体架构的吞吐量,服务更多的并发和流量,二是为了提高系统的稳定性,让系统的可用性更高。

提高架构的性能

先来看看,提高系统性能的常用技术。

  • 缓存系统。加入缓存系统,可以有效地提高系统的访问能力。从前端的浏览器,到网络,再到后端的服务,底层的数据库、文件系统、硬盘和 CPU,全都有缓存,这是提高快速访问能力最有效的手段。对于分布式系统下的缓存系统,需要的是一个缓存集群。这其中需要一个 Proxy 来做缓存的分片和路由。

  • 负载均衡系统,是做水平扩展的关键技术。其可以用多台机器来共同分担一部分流量请求。

  • 异步调用。异步系统主要通过消息队列来对请求做排队处理,这样可以把前端的请求的峰值给“削平”了,而后端通过自己能够处理的速度来处理请求。这样可以增加系统的吞吐量,但是实时性就差很多了。同时,还会引入消息丢失的问题,所以要对消息做持久化,这会造成“有状态”的结点,从而增加了服务调度的难度。

  • 数据分区和数据镜像数据分区是把数据按一定的方式分成多个区(比如通过地理位置),不同的数据区来分担不同区的流量。这需要一个数据路由的中间件,会导致跨库的 Join 和跨库的事务非常复杂。而数据镜像是把一个数据库镜像成多份一样的数据,这样就不需要数据路由的中间件了。你可以在任意结点上进行读写,内部会自行同步数据。然而,数据镜像中最大的问题就是数据的一致性问题。

提高架构的稳定性

  • 服务拆分,主要有两个目的:一是为了隔离故障,二是为了重用服务模块。但服务拆分完之后,会引入服务调用间的依赖问题。

  • 服务冗余,是为了去除单点故障,并可以支持服务的弹性伸缩,以及故障迁移。然而,对于一些有状态的服务来说,冗余这些有状态的服务带来了更高的复杂性。其中一个是弹性伸缩时,需要考虑数据的复制或是重新分片,迁移的时候还要迁移数据到其它机器上。

  • 限流降级。当系统实在扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。这些技术属于保护措施。

  • 高可用架构,通常来说是从冗余架构的角度来保障可用性。比如,多租户隔离,灾备多活,或是数据可以在其中复制保持一致性的集群。总之,就是为了不出单点故障。

  • 高可用运维,指的是 DevOps 中的 CI(持续集成)/CD(持续部署)。一个良好的运维应该是一条很流畅的软件发布管线,其中做了足够的自动化测试,还可以做相应的灰度发布,以及对线上系统的自动化控制。这样,可以做到“计划内”或是“非计划内”的宕机事件的时长最短

分布式系统的“纲”

总结一下上面讲述的内容,你不难发现,分布式系统有五个关键技术,它们是:

  • 全栈系统监控;
  • 服务 / 资源调度;
  • 流量调度;
  • 状态 / 数据调度;
  • 开发和运维的自动化。

而最后一项——开发和运维的自动化,是需要把前四项都做到了,才有可能实现的。所以,最为关键是下面这四项技术,即应用整体监控、资源和服务调度、状态和数据调度及流量调度,它们是构建分布式系统最最核心的东西。

分布式系统的冰与火与技术栈相关推荐

  1. 【分布式系统】分布式系统架构的冰与火

    什么是分布式系统 分布式系统(distributed system)是建立在网络之上的软件系统. 以上是摘自百度百科的解释,不可否则,分布式系统的基础是网络.计算.存储.比如常见的一个Web单体系统, ...

  2. 12.16 Day 1 - 分布式系统架构的冰与火

    大家好,我是 Snow Hide,作为<左耳听风>这个专栏的学员之一,这是我打卡的第一天,也是我第一次进行打卡这种操作. 今天我温习了该专栏里一篇叫<分布式系统架构的冰与火>的 ...

  3. 03 分布式系统的技术栈

    参见:  https://blog.csdn.net/william_n/article/details/103564312 1.学习/操作 打卡02 1. 构建分布式系统的目的是增加系统容量,提高系 ...

  4. 分布式系统技术栈(from左耳朵耗子)

    提高架构的性能 1.缓存系统. 加入缓存系统,可以有效地提高系统的访问能力.从前端的浏览器,到网络,再到后端的服务,底层的数据库.文件系统.硬盘和 CPU,全都有缓存,这是提高快速访问能力最有效的手段 ...

  5. 堪称神级的 Java 技术栈手册火了!

    本文是为了帮大家快速回顾 Java 中知识点,这套面试手册涵盖了诸多 Java 技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果. 本来想将文件上传到 GitHub ...

  6. 堪称神级的Java技术栈手册火了!

    前言 本文是为了帮大家快速回顾了Java中知识点,这套面试手册涵盖了诸多Java技术栈的面试题和答案,相信可以帮助大家在最短的时间内用作面试复习,能达到事半功倍效果. 本来想将文件上传到github上 ...

  7. 分布式(技术栈、关键技术、PaaS平台、资料推荐、相关论文)

    2019独角兽企业重金招聘Python工程师标准>>> 分布式系统架构的冰与火 首先,我们需要阐述一下为什么需要分布式系统,而不是传统的单体架构.也许这对你来说已经不是什么问题了,但 ...

  8. iOS 冰与火之歌 - 利用 XPC 过 App 沙盒

    蒸米是阿里巴巴的移动安全工程师,香港中文大学博士,也是发现并命名了XcodeGhost的人.这次他所在的iOS安全小组发现了影响最新版iOS 9.3的0day漏洞.此漏洞杀伤力巨大,在非越狱手机上一个 ...

  9. 互联网后端技术栈大全!

    大家好,我是宝哥! 使用Java后端技术的目的就是构建业务应用,为用户提供在线或者离线服务.因此,一个业务应用需要哪些技术.依赖哪些基础设施就决定了需要掌握的后端技术有哪些. 纵观整个互联网技术体系再 ...

最新文章

  1. Kafka基本的概念
  2. Py之av:av库的简介、安装、使用方法之详细攻略
  3. idea编辑器关闭重复代码检查
  4. 0320-学习进度条
  5. 计算机的好处和坏处的英语作文,电脑的利弊英语作文
  6. python 中的if else 和in
  7. ASP.NET 2.0中发送电子邮件
  8. JAVA对象的值与引用
  9. java getoutputstream_Java Connection.getOutputStream方法代码示例
  10. 微信开发经常会用到的一些方法
  11. 数据挖掘算法-矩阵分解在推荐系统中的应用
  12. 机房运维服务器,机房服务器维护指导
  13. cocos creator实现读取白鹭movieClip组件(尝试)
  14. Nginx-动静分离与 URLRwrite
  15. 计算机学硕报考院校人数,2020考研报考人数:这些学校人数过万!
  16. D38| DP理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
  17. QueryPerformanceCounter
  18. matlab中sub2ind函数
  19. [开关电源]浪涌电流有点高?我来给你支支招
  20. 分贝,毫瓦分贝与瓦特之间的关系

热门文章

  1. 格式化数据恢复|u盘格式化恢复
  2. 交易时间与开盘价确定
  3. Spark RDD的窄依赖和宽依赖
  4. Springboot手机验证码
  5. 壹号本 深度 linux,壹号本4代迷你笔记本开箱,10.1英寸大小,平板电脑二合一设计...
  6. 中国工程院院士高文ICTC演讲《国家新一代人工智能发展规划》
  7. Ubuntu 有望成为最jia Linux 游戏桌面
  8. 共享文件夹:请检查名称的拼写,否则,网络可能有问题错误代码0x80070035
  9. 八卦:大量放送Gmail,Orkut,Wallop的邀请函
  10. 时光相册 php,一周 App 派评:支持插图表格 iA Writer 4、智能修颜 Facetune 2、新海诚滤镜「时光相册」、脑力锻炼「大脑之旅」...