左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

21 | 分布式系统架构的冰与火

陈皓 2017-12-12
最近几年,我们一直在谈论各式各样的架构,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等。还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等。面对这么多纷乱的技术,我看到很多团队或是公司都是一个一个地去做这些技术,非常辛苦,也非常累。这样的做法就像我们在撑开一张网里面一个一个的网眼。
其实,只要我们能够找到这张网的“纲”,我们就能比较方便和自如地打开整张网了。那么,这张“分布式大网”的总线——“纲”在哪里呢?我希望通过这一系列文章可以让你找到这个“纲”,从而能让你更好更有效率地做好架构和工程。

分布式系统架构的冰与火

首先,我们需要阐述一下为什么需要分布式系统,而不是传统的单体架构。也许这对你来说已经不是什么问题了,但是请允许我在这里重新说明一下。使用分布式系统主要有两方面原因。
增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。
加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。
当然,分布式系统还有一些优势,比如:
因为模块化,所以系统模块重用度更高;
因为软件服务模块被拆分,开发和发布速度可以并行而变得更快;
系统扩展性更高;
团队协作流程也会得到改善;
……
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(52)

  • javaee
    微服务通常根据业务来划分边界,粒度通常是一个独立的业务,具体多大合适不是一开始就决定的,这是一个逐步拆分细化的过程,李智慧老师说任何复杂的架构都是从最简单的应用慢慢演化过来的,就像当年的淘宝发展到现在。单体应用,为了高可用,需要集群多实例部署。查询太慢,访问太慢,加缓存,DB读写分离。业务发展到一定复杂程度,单体应用太庞大,会产生一系列问题。例如开发方面,一个工程几十上百人不停的改动,如何协作,一个人的代码有问题,影响了所有业务。每一个版本的迭代与发布,开发、测试、沟通得花大把时间,可能还会出错,牵一发而可能动全身。运维上,发布一次可以睡个午觉,发布一次影响线上所有功能。资源方面,扩容到几十上百台机器的时候,DB、NoSQL等的连接数撑爆了……
    2017-12-11
    34
  • coco
    我遇到的比较麻烦的就是数据一致性问题。一个操作需要调用好几个服务,后面的服务异常,前面的服务怎么回滚,如何保证事务。
    2017-12-07
    17
  • 左耳朵
    @ lfn 当然不是
    2017-12-07
    10
  • 左耳朵
    @ helloworld 关于技术细节,我会单开另一个系列讲各种Pattern。敬请期待。
    2017-12-07
    10
  • 左耳朵
    @ coco 后面的“数据调度”会讲
    2017-12-07
    9
  • whhbbq
    服务化过程中代码层面需要注意以下几点1.序列化。接口的入参出参需要序列化;之前在单体应用中适用的service接口,可能不适用远程调用,需要改造,如匿名函数作为参数的接口。2.既当入参又当出参的接口,在服务化后,不再适用,需要改造。即调用更新接口后,需要调用查询接口以返回正确的值。3.服务化后,要考虑写接口是否是幂等。4.考虑接口超时,设置合理的超时时间。
    2017-12-24
    7
  • Michael
    我很想知道对于新手来说,应该如何去学习分布式系统?耗子哥能给一些建议或者列一些书单么?
    2017-12-07
    7
  • godtrue
    阅后留痕

    单机在中间,往下研究是多线程高并发,往上研究是分布式高并发,往下是线程级别,往上是进程,集群级别,不过他们的根本是为了速度,为了快,为了快点将任务做完。

    1:什么是分布式?
    我认为相对单机而言,分布式至少是多机部署,多机共同分担任务处理

    2:分布式核心解决的问题是什么?
    我认为本质如浩哥所言,一是增加系统容量,二是实现系统高可用,其他还有并行开发、服务解耦

    3:分布式引入的问题是什么?
    数据不一致性,测试、运维复杂,排障链路长

    4:分布式实现的难点是什么?
    CAP

    5:目前有哪些分布式的最佳实践?
    不太清楚?

    6:分布式必备技术有哪些?
    RPC、MQ、各种集群存储系统、负载均衡、容器化部署
    2018-12-29
    5
  • 梁汉泉
    15年,部署在阿里云服务,服务A访问服务B,因没有内网DNS以及阿里云的网络原因,流量走到公网又回来,延时秒级,更有甚者,服务B访问服务X也走的是公网,延时3s+…同样部署在AWS的服务在1秒内!
    2017-12-07
    5
  • lfn
    是不是说,采用「微服务」之后,就不需要「中间件」了?
    2017-12-07
    4
  • TH
    耗子叔这篇文章简洁明了,但是在了解微服务的过程中仍有一些结合实际情况产生的疑问,希望能得到解答。
    1.服务化和分布式是什么关系?是否把单体应用拆成服务就意味着一定要分布式部署?
    2.包含本地操作和业务逻辑的桌面应用应当如何改造?把业务逻辑从本地客户端挪到服务端是不是会带来性能损失?
    3.在企业内部应用(用户都在同一个局域网)的情况下,使用分布式架构是否有必要?
    2018-03-15
    3
  • krugle
    可不可以讲一些架构设计的基础,很多概念都不清楚,网上的概念也不统一

    作者回复: 后面有相应的设计模式系列

    2018-03-14
    3
  • 张向阳
    微服务粒度怎么把握?什么东西可以被拆分出来独立为一个服务?有没有方法论可以遵循。期待老师能够分享
    2017-12-10
    3
  • Michael
    耗子哥 你好 一直就对分布式感兴趣 但是不知道该从哪里入手 要学的东西太多了。耗子哥能不能给个建议或者入手的地方
    2017-12-08
    3
  • xzyline
    服务的部署问题,需要按业务线,重要等级,服务性能,服务类型高cpu还是高io好多维度需要考虑。
    还有服务的负载均衡也不好处理。
    2017-12-08
    3
  • yunfeng
    既然分布式架构的难点和痛点在维护和运维,能否讲讲分布式架构下的如何维护好软件和运维呢
    2017-12-07
    3
  • Silence
    我们在分布式架构下开发时,当时遇到的问题主要是数据一致性的问题,就是有些时候必须采用分布式锁实现
    2017-12-07
    3
  • bullboying
    公司的新产品研发基本上是沿着分布式,微服务这个路线发展的,我们的产品是行业软件,to b的,发现分布式之后定制研发成本增加了不少,另外可能很多客户的体量还达不到需要部署微服务的程度,没法平摊越来越高的运维成本,所以最新的版本同时保留了单体应用和微服务架构两个方向的产品,适应不同的客户要求。这种一国两制的方式应该是挺正确的选择。
    虽然微服务是将来的方向,如果只是一套系统自己运维,客户是自己,那自然是没得选。如果是离岸交付,那还是要权衡一下迈进的速度。
    2017-12-07
    3
  • 艾小祥
    期待下一篇文章
    2017-12-07
    3
  • missa
    目前比较流行的分布式,应该算是微服务了。难点是服务之间的管理,调度。
    2018-03-20
    2
收起评论
52
返回
顶部