点击关注 InfoQ,置顶公众号

程序员的 8 点技术早餐

作者|陈皓

编辑|杨爽

学习任何技术,善于提纲挈领总是事半功倍。学习分布式系统架构也是如此,只要找到这张网的纲,就能更有效率地做好架构和工程。本文首发于陈皓在极客时间 APP 上开设的《左耳听风》专栏,推荐订阅。

写在前面

最近几年,我们一直在谈论各式各样的架构,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等。还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等。面对这么多纷乱的技术,我看到很多团队或是公司都是一个一个地去做这些技术,非常辛苦,也非常累。这样的做法就像我们在撑开一张网里面一个一个的网眼。

其实,只要我们能够找到这张网的“纲”,我们就能比较方便和自如地打开整张网了。那么,这张“分布式大网”的总线——“纲”在哪里呢?我希望通过这一系列文章可以让你找到这个“纲”,从而能让你更好更有效率地做好架构和工程。

分布式系统架构的冰与火

首先,我们需要阐述一下为什么需要分布式系统,而不是传统的单体架构。也许这对你来说已经不是什么问题了,但是请允许我在这里重新说明一下。使用分布式系统主要有两方面原因。

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

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

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

  • 因为模块化,所以系统模块重用度更高;

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

  • 系统扩展性更高;

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

  • ……

不过,这个世界上不存在完美的技术方案,采用任何技术方案都是“按下葫芦浮起瓢”,都是有得有失,都是一种 trade-off。也就是说,分布式系统在消除上述问题的同时,也给我们带来了其他的问题。因此,我们需要清楚地知道分布式系统所带来的问题。

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

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

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

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

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

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

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

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

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

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

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

这就出现了我前面所说的那些架构方式,以及各种相关的管理型的技术方法。这个世界就是这样变得复杂起来的。

分布式系统的发展

从 20 世纪 70 年代的模块化编程,80 年代的面向事件设计,90 年代的基于接口 / 构件设计,这个世界很自然地演化出了 SOA——基于服务的架构。SOA 架构是构造分布式计算应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它采用开放标准与软件资源进行交互,并采用标准的表示方式。

开发、维护和使用 SOA 要遵循以下几条基本原则。

  • 可重用,粒度合适,模块化,可组合,构件化以及有互操作性。

  • 符合开放标准(通用的或行业的)。

  • 服务的识别和分类,提供和发布,监控和跟踪。

但 IBM 搞出来的 SOA 非常重,所以对 SOA 的裁剪和优化从来没有停止过。比如,之前的 SOAP、WSDL 和 XML 这样的东西基本上已经被抛弃了,而改成了 RESTful 和 JSON 这样的方式。而 ESB(Enterprise Service Bus,企业服务总线)这样非常重要的东西也被简化成了 Pub/Sub 的消息服务……

不过,SOA 的思想一直延续着。所以,我们现在也不说 SOA 了,而是说分布式服务架构了。

下面是一个 SOA 架构的演化图。

我们可以看到,面向服务的架构有以下三个阶段。

  • 20 世纪 90 年代前,是单体架构,软件模块高度耦合。当然,这张图同样也说明了有的 SOA 架构其实和单体架构没什么两样,因为都是高度耦合在一起的。就像图中的齿轮一样,当你调用一个服务时,这个服务会调用另一个服务,然后又调用另外的服务……于是整个系统就转起来了。但是这本质是比较耦合的做法。

  • 而 2000 年左右出现了比较松耦合的 SOA 架构,这个架构需要一个标准的协议或是中间件来联动其它相关联的服务(如 ESB)。这样一来,服务间并不直接依赖,而是通过中间件的标准协议或是通讯框架相互依赖。这其实就是 IoC(控制反转)和 DIP(依赖倒置原则)的设计思想在架构中的实践。它们都依赖于一个标准的协议或是一个标准统一的交互方式,而不是直接调用。

  • 而 2010 年后,出现了微服务架构,这个架构更为松耦合。每一个微服务都能独立完整地运行(所谓的自包含),后端单体的数据库也被微服务这样的架构分散到不同的服务中。而它和传统 SOA 的差别在于,服务间的整合需要一个服务编排或是服务整合的引擎。就好像交响乐中需要有一个指挥来把所有乐器编排和组织在一起。

一般来说,这个编排和组织引擎可以是工作流引擎,也可以是网关。当然,还需要辅助于像容器化调度这样的技术方式,如 Kubernetes。在 Martin Fowler 的 Microservices 这篇文章中有详细描述。

https://martinfowler.com/articles/microservices.html

微服务的出现使得开发速度变得更快,部署快,隔离性高,系统的扩展度也很好,但是在集成测试、运维和服务管理等方面就比较麻烦了。所以,需要一套比较好的微服务 PaaS 平台。就像 Spring Cloud 一样需要提供各种配置服务、服务发现、智能路由、控制总线……还有像 Kubernetes 提供的各式各样的部署和调度方式。

没有这些 PaaS 层的支撑,微服务也是很难被管理和运维的。好在今天的世界已经有具备了这些方面的基础设施,所以,采用微服务架构,我认为只是一个时间问题了。

写在最后

好了,今天的内容就到这里。相信通过今天的学习,你应该已经对为什么需要分布式系统,而不是传统的单体架构,有了清晰的认识。并且对分布式系统的发展历程了然于心。下一篇文章,我将结合亚马逊的分布式架构实践,来谈谈分布式系统架构的技术难点及应对方案。

本文首发在陈皓在极客时间 App 上开始的全年独家专栏《左耳听风》,是《分布式系统架构的本质》7 篇系列文章的第一篇,更多文章,正在专栏更新。

扫描下图二维码订阅,

永久阅读专栏内所有内容。

今日荐文

点击下方图片即可阅读

AI 从业者们怎么看人工智能领域发展现状?

左耳朵耗子:聊聊分布式系统架构相关推荐

  1. 左耳朵耗子:我做系统架构的一些原则

    作者:左耳朵耗子 原文地址:https://coolshell.cn/articles/21672.html 工作 20 多年了,这 20 来年看到了很多公司的很多的系统架构,也看到了很多问题,在跟这 ...

  2. 左耳朵耗子、池建强、江南白衣、余晟、朱赟限时赠书,3000本好书速领!

    学习新知.探索未知.提升自我是技术人的本能. 有些核心能力,是衡量一位技术领导者是否优秀的通用标准. 你已经走过了哪些路?又正走在哪条充满挑战的路上? 极客时间评选了三个评分最高的技术人成长类专栏,是 ...

  3. 今晚直播!池建强、二爷邱岳、左耳朵耗子、朱赟的技术夜话

    当你想出去旅游,放飞自我时, 困住你的是 996 的工作时长,你走不脱: 当你想静下心来,好好沉淀时, 困住你的是良莠不齐的各类信息,你学不好: 当你想打破困局,走出桎梏时, 困住你的是僵化的体制,墨 ...

  4. 左耳朵耗子、池建强、江南白衣、余晟、朱赟为你精选了17本好书,限时免费领取 !...

    学习新知.探索未知.提升自我是技术人的本能. 有些核心能力,是衡量一位技术领导者是否优秀的通用标准. 你已经走过了哪些路?又正走在哪条充满挑战的路上? 极客时间评选了三个评分最高的技术人成长类专栏,是 ...

  5. 左耳朵耗子:技术人如何更好地把控发展趋势?

    技术不断迭代,掌握一门其中一门技术就可以悠闲到老么?盲目搬砖就能以量变换取质变么?世界的快速发展,本质是什么?如何鉴别出有潜力的技术?如何突破自身能力的瓶颈,更好做到自我学习和管理?本文是左耳朵耗子老 ...

  6. 左耳朵耗子:谈谈Go语言、Docker和新技术

    更多左耳朵耗子的独家干货,请订阅极客时间出品的陈皓全年专栏<左耳听风>,一次订阅.永久阅读.即日起,戳此订阅立享以下两大福利: \\ 福利一:原价 ¥199/年,极客时间新用户注册立减 ¥ ...

  7. 左耳朵耗子:15条有效提高编程的小贴士

    左耳朵耗子 读完需要 3 分钟 速读仅需 1 分钟 陈皓(左耳朵耗子),任职于 MegaEase ,现任创始人&CTO 一职.作为行业知名人士,陈皓(左耳朵耗子)多次参与行业讨论和研究,有着丰 ...

  8. 沉痛悼念互联网[云原生领域]技术大牛----左耳朵耗子(陈皓老师)

    陈皓老师,网名"左耳朵耗子",是一位在互联网界享有盛誉的伟大人物.他的一生充满了创造力.智慧和奉献精神,对技术领域做出了卓越的贡献. 陈皓老师 为什么网名叫 左耳朵耗子? 陈皓老师 ...

  9. 纪念左耳朵耗子(陈皓)

    5月17日,MegaEase 公司在 GitHub 创建了「纪念左耳朵耗子」仓库,用于记录关于陈皓本人的一些生平经历,您如果认识陈皓, 或曾经和陈皓打过交道,欢迎您通过PR来写出您和陈皓的故事. 仓库 ...

  10. 突发!47岁技术传奇陈皓(左耳朵耗子)去世,叛逆人生不断创业,网友纷纷悼念...

      视学算法报道   编辑:编辑部 [导读]年仅47岁的陈皓老师在创业中途,忽然离开了.我们失去了一位优秀的技术人. 沉痛悼念! MegaEase创始人.资深技术专家.骨灰级程序员陈皓(左耳朵耗子)于 ...

最新文章

  1. 再见,Navicat!同事安利的这个IDEA的兄弟,真香!
  2. EVA 4400存储数据恢复报告
  3. 反射_Class对象功能概述
  4. Sublime text使用快捷键
  5. 如何将HBuilder中的项目Push至Gitee中!
  6. 【Python】实现最大最小距离算法
  7. react-native---配置reactnative报红,run-Android时候报错unable to load script from assets 'index.android.bundl
  8. 为什么很多人赚不到钱?
  9. 完美解决鼠标单击变双击问题^_^
  10. 凭据分配没有加密oracle_两种方法解决远程桌面出现“这可能是由于CredSSP加密Oracle修正”的问题-网络教程与技术 -亦是美网络...
  11. AI公开课:03月26日未来十年 AI如何进化—圆桌探讨(乌镇智库理事长、CSDN 创始人董事长、智源人工智能研究院副院长)之《AI:昨天 · 今天 · 明天》
  12. Android中的保活机制
  13. vue移动端网页微信分享
  14. 如何保证GIS图件中字体大小是所要求的
  15. android 4.4 art模式,安卓4.4的ART模式怎么打开 安卓4.4开启art模式方法图解
  16. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码
  17. 2021阿里实习生前端面试题
  18. 下载tomcat最新版本
  19. scrapy_splash动态ip代理和请求头的动态修改
  20. (六)安装xdd-plus的保姆级搭建教程+xdd-plus修复+对接青龙+指令用途/看了你就能学废【2022年5月23日】【更新】

热门文章

  1. nginx代理tomcat,https
  2. ELK中Kibana6.2.3下Timelion使用
  3. 升级阿里云主机系统镜像
  4. Postgre 中的空值判断
  5. CSS webkit
  6. java的反射机制--关于类中属性的反射。
  7. 2011年1月28日早会资料「招き猫」(汉语版)
  8. linux 查看 shell进程,Linux之shell 和进程
  9. kdtree java_KdTree理解与实现(Java)
  10. 解决keil5不支持Samsung 2440A等较旧型号Soc的方法