最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

左耳朵耗子:从亚马逊的实践,谈分布式系统的难点

  • 2018-03-28
  • 本文字数:1980 字

    阅读完需:约 6 分钟

本文摘自陈皓(左耳朵耗子)在极客时间 App/ 小程序上开始的全年付费专栏《左耳听风》,已获授权。更多分布式系统关键技术、性能调优攻略,点击此处订阅专栏阅读(支持微信支付),全年订阅199 元,新用户立减30 元。

从目前可以得到的信息来看,对分布式服务化架构实践最早的应该是亚马逊。因为早在 2002 年的时候,亚马逊 CEO 杰夫·贝索斯(Jeff Bezos)就向全公司颁布了下面的这几条架构规定(来自《 Steve Yegge 对 Google 平台吐槽》一文)。

  1. 所有团队的程序模块都要通过 Service Interface 方式将其数据与功能开放出来。
  2. 团队间程序模块的信息通信,都要通过这些接口。
  3. 除此之外没有其它的通信方式。其他形式一概不允许:不能直接链结别的程序(把其他团队的程序当做动态链接库来链接),不能直接读取其他团队的数据库,不能使用共享内存模式,不能使用别人模块的后门,等等。唯一允许的通信方式是调用 Service Interface。
  4. 任何技术都可以使用。比如:HTTP、CORBA、Pub/Sub、自定义的网络协议等。
  5. 所有的 Service Interface,毫无例外,都必须从骨子里到表面上设计成能对外界开放的。也就是说,团队必须做好规划与设计,以便未来把接口开放给全世界的程序员,没有任何例外。
  6. 不这样做的人会被炒鱿鱼。

这应该就是 AWS(Amazon Web Service)出现的基因吧。当然,前面说过,采用分布式系统架构后会出现很多的问题。比如:

  • 一个线上故障的工单会在不同的服务和不同的团队中转过来转过去的。

  • 每个团队都可能成为一个潜在的 DDoS 攻击者,除非每个服务都要做好配额和限流。

  • 监控和查错变得更为复杂。除非有非常强大的监控手段。

  • 服务发现和服务治理也变得非常复杂。

为了克服这些问题,亚马逊这么多年的实践让其可以运维和管理极其复杂的分布式服务架构。我觉得主要有以下几点。

  1. 分布式服务的架构需要分布式的团队架构。在亚马逊,一个服务由一个小团队(Two Pizza Team 不超过 16 个人,两张 Pizza 可以喂饱的团队)负责,从前端负责到数据,从需求分析负责到上线运维。这是良性的分工策略——按职责分工,而不是按技能分工。
  2. 分布式服务查错不容易。一旦出现比较严重的故障,需要整体查错。出现一个 S2 的故障,就可以看到每个团队的人都会上线。在工单系统里能看到,在故障发生的一开始,大家都在签到并自查自己的系统。如果没问题,也要在线待命(standby),等问题解决。(我在《故障处理最佳实践:应对故障》一文中详细地讲过这个事)。
  3. 没有专职的测试人员,也没有专职的运维人员,开发人员做所有的事情。开发人员做所有事情的好处是——吃自己的狗粮(Eat Your Own Dog Food) 最微观的实践。自己写的代码自己维护自己养,会让开发人员明白,写代码容易维护代码复杂。这样,开发人员在接需求、做设计、写代码、做工具时都会考虑到软件的长期维护性。
  4. 运维优先,崇尚简化和自动化。为了能够运维如此复杂的系统,亚马逊内部在运维上下了非常大的功夫。现在人们所说的 DevOps 这个事,亚马逊在 10 多年前就做到了。亚马逊最为强大的就是运维,拼命地对系统进行简化和自动化,让亚马逊做到了可以轻松运维拥有上千万台虚机的 AWS 云平台。
  5. 内部服务和外部服务一致。无论是从安全方面,还是接口设计方面,无论是从运维方面,还是故障处理的流程方面,亚马逊的内部系统都和外部系统一样对待。这样做的好处是,内部系统的服务随时都可以开放出来。而且,从第一天开始,服务提供方就有对外服务的能力。可以想像,以这样的标准运作的团队其能力会是什么样的。

在进化的过程中,亚马逊遇到的问题很多,甚至还有很多几乎没有人会想到的非常生僻的东西,它都一一学习和总结了,而且都解决得很好。

构建分布式系统非常难,充满了各种各样的问题,但亚马逊还是毫不犹豫地走了下去。这是因为亚马逊想做平台,不是“像淘宝这样的中介式流量平台”,而是那种“可以对外输出能力的平台”。

亚马逊觉得自己没有像史蒂夫·乔布斯(Steve Jobs)这样的牛人,不可能做出像 iPhone 这样的爆款产品,而且用户天生就是众口难调,与其做一个大家都不满意的软件,还不如把一些基础能力对外输出,引入外部的力量来一起完成一个用户满意的产品。这其实就是在建立自己的生态圈。虽然在今天看来这个事已经不稀奇了,但是贝索斯早在十五年前就悟到了,实在是个天才。

所以,分布式服务架构是需要从组织,到软件工程,再到技术上的一个大的改造,需要比较长的时间来磨合和改进,并不断地总结教训和成功经验。

分布式系统中需要注意的问题

我们再来看一下分布式系统在技术上需要注意的问题。

注:以上仅为文章的一部分,欲阅读全文,请点击此处订阅专栏(支持微信支付)。一次订阅,永久阅读,现在订阅,立享福利:

福利一:原价¥199/ 年,极客时间新用户注册立减¥30

福利二:每邀请一位好友购买,你可获得 36 元现金返现,多邀多得,上不封顶,立即提现(提现流程:极客时间服务号 - 我的 - 现金奖励提现)

2018-03-28 18:302898

评论

发布
暂无评论
发现更多内容

地铁3D可视化,让一切尽在掌握

ThingJS数字孪生引擎

可视化

J2PaaS低代码开源版,10月1号即将上线,企业数字化转型优选!

J2PaaS低代码平台

低代码 零代码 开发工具

腾讯云TDSQL助力金融核心系统数字化转型

腾讯云数据库

数据库 tdsql

成为一名月薪2万的web安全工程师需要掌握哪些技能??

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

读懂Redis源码,我总结了这7点心得

Java redis 架构 面试 后端

2021年金九银十必问的1000道Java面试题及答案整理

Java 架构 面试 程序人生 编程语言

被阿里奉为神册!2021公认最权威的分布式微服务指导手册

Java 架构 面试 程序人生 编程语言

TDSQL数据同步和备份

腾讯云数据库

数据库 tdsql

第4章-《Linux一学就会》- vim编辑器和恢复ext4下误删文件-Xmanager工具

学神来啦

vim Linux 运维 VI

斯图飞腾Stratifyd亮相Smart Retail,AI赋能零售新增长

网络攻防学习笔记 Day148

穿过生命散发芬芳

等级保护 9月日更

力扣前400题解答笔记,全被字节大神整理到了这份文档里

Java 编程 架构 面试 程序人生

写给“后浪”们的职业生涯规划建议

轻口味

android 生涯规划 音视频 9月日更

MyBatis Plus 批量数据插入功能,yyds!

王磊

mybatis springboot

2021西部云安全峰会召开:“云安全优才计划”发布,腾讯云安全攻防矩阵亮相

腾讯安全云鼎实验室

云安全 峰会

腾讯云TDSQL-C云原生数据库技术

腾讯云数据库

数据库 tdsql

拥抱云原生,华为云GaussDB全新助力金融行业数字化转型

华为云数据库小助手

GaussDB GaussDB(for openGauss) 华为云数据库

硬件Scrum指南

AmyGuo

Scrum 敏捷开发 硬件架构 硬件开发‘ 硬件敏捷

考试试卷redis存储详细设计

小智

架构训练营

喜讯 | 拍乐云创始人赵加雨荣获「2021企业数智化转型升级先锋人物」奖

拍乐云Pano

音视频 数智化

java 虚拟机 GC 学习笔记三

风翱

GC 9月日更

从浏览器地址栏输入url到显示页面的步骤

Augus

浏览器 9月日更

阿里资深架构师整理分享全套Java核心技术面试题及答案

Java 编程 架构 面试 程序人生

阿里藏经阁天花板:高性能Java架构核心原理手册,一定要偷偷看

Java 编程 架构 面试 程序人生

设计千万级学生管理系统的考试试卷存储方案

缘分呐

架构设计实战

陌陌和它的解药,聊聊出海社交产品的思路

拍乐云Pano

社交APP出海 社交APP 泛娱乐出海

消息队列:Kafka Consumer源码解读

正向成长

kafka

阿里大牛再写传奇:并发原理JDK源码手册GitHub下载量已破百万

Java 编程 架构 面试 程序人生

时间转换不在变bug

卢卡多多

时间戳 时间转换 9月日更

2021中国规模化敏捷大会(早鸟票倒计时)

AmyGuo

DevOps 敏捷开发 Scrum精髓 硬件敏捷 规模化敏捷

人工智能、机器学习和数据工程 InfoQ 趋势报告 - 2021 年 8 月

Regan Yue

人工智能 9月日更 数据工程 趋势报告

左耳朵耗子:从亚马逊的实践,谈分布式系统的难点_语言 & 开发_陈皓_InfoQ精选文章