全文为我的学习笔记。本篇文章内容整理摘录自陈皓的《左耳听风》专栏。

学习分布式系统跟学习其他技术非常不一样,分布式系统涵盖面非常广。

具体来说涵盖如下几方面:
- 服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等。
- 资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
- 流量调度,涉及路由、负载均衡、流控、熔断等。
- 数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等。
- 容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
- 自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。
所有这些形成了分布式架构的整体复杂度,也就造成了分布式系统中很多论文、图书、项目。要学好分布式系统及其架构,需要用大量时间和时间才能真正掌握这些技术。
这里需要注意的地方。
- 分布式系统之所以如此复杂,就是因为其太容易也太经常出错了。这意味着,你要把处理错误代码当成正常功能的代码来处理。
- 开发一个健壮的分布式系统的成本是单体系统的几百倍甚至几万倍。这意味着,我们要自己开发一个,需要能力很强的开发人员。
- 非常健壮的开源分布式系统并不多,或者说基本没有。这意味着,如果你要用开源的,那么你需要hold得住其源码。
- 管理或者协调多个服务或者机器是非常困难的。这意味着我们要去读很多的分布式系统论文。
- 在分布式环境下,出了问题是很难debug的。这意味着,我们需要非常好的监控和跟踪系统。还要经常做演练和测试。
- 在分布式环境下,你需要更科学地分析和统计。这意味着,我们要用P90这样的统计指标,而不是平均值,我们需要做容量计划和评估。
- 在分布式环境下,需要应用服务化。这意味着,我们需要一个服务开发框架。如:SOA或微服务。
- 在分布式环境下,故障不可怕,可怕的是影响面过大,时间过长。这意味着,我们需要花时间来开发我们的自动化运维平台。
总之,在分布式环境下,一切都变得非常复杂。要进入这个领域,你需要足够多的耐性和足够强的心态来接受各式各样的失败。当拥有丰富的实践经验后,才能有所建树。这并不是一日之功,你可能要在这个领域花费数年甚至数十年的时间。

一、分布式架构入门

  • Scalable Web Architecture and Distributed Systems [译:可伸缩的Web架构和分布式系统]:大概的分布式架构是怎么来解决系统扩展性问题的粗略方法。

  • Scalability,Availability & Stability Patterns [译:可伸缩性、可用性和稳定模式] :这个PPT能在扩展性、可用性、稳定性等方面给你一个非常大的架构设计视野和思想,可以感受大概的全景图。

  • System Design Primer [译:系统设计入门] :GitHub这个仓库主要组织收集分布式系统的一些与扩展性相关的资源,帮我如何构建可扩展的架构。目前这个仓库收集到了好些系统架构和设计的基本方法。其中包括:CAP理论、一致性模型、可用性模式、DNS、CDN、负载均衡、反向代理、应用层的微服务和服务发现、关系型数据库和NoSQL、缓存、一步通讯、安全等。强力推荐

二、分布式理论

2、一致性方面的论文
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐