跳转至

你好,我是陈皓,网名左耳朵耗子。

要学好分布式架构,你首先需要学习一些架构指导性的文章和方法论,即分布式架构设计原则。下面是几篇很不错的文章,值得一读。

设计模式

有了方法论后,你还需要学习一些比较细节的落地的技术。最好的方式就是学习被前人总结出来的设计模式,虽然设计模式也要分场景,但是设计模式可以让你知道一些套路,这些套路对于我们设计的分布式系统有非常大的帮助,不但可以让我们少走一些弯路,而且还能让我们更为系统和健壮地设计我们的架构。

下面是一些分布式架构设计模式的网站。

首先,需要重点推荐的是微软云平台 Azure 上的设计模式。 Cloud Design Patterns ,这个网站上罗列了分布式设计的各种设计模式,可以说是非常全面和完整。对于每一个模式都有详细的说明,并有对其优缺点的讨论,以及适用场景和不适用场景的说明,实在是一个非常不错的学习分布式设计模式的地方。其中有如下分类。

除此之外,还有其它的一些关于分布式系统设计模式的网站和相关资料。

我个人觉得微服务也好,SOA也好,都是分布式系统的一部分,这里有两个网站罗列了各种各样的服务架构模式。

当然,还有我在极客时间上写的那些分布式的设计模式的总结。

  • 弹力设计篇,内容包括:认识故障和弹力设计、隔离设计、异步通讯设计、幂等性设计、服务的状态、补偿事务、重试设计、熔断设计、限流设计、降级设计、弹力设计总结。
  • 管理设计篇,内容包括:分布式锁、配置中心、边车模式、服务网格、网关模式、部署升级策略等。
  • 性能设计篇,内容包括:缓存、异步处理、数据库扩展、秒杀、边缘计算等。

设计与工程实践

分布式系统的故障测试

弹性伸缩

一致性哈希

数据库分布式

  • Life Beyond Distributed Transactions ,该文是Salesforce的软件架构师帕特·赫兰德(Pat Helland)于2016年12月发表的针对其在2007年CIDR(创新数据库研究会议)上首次发表的同名文章的更新和缩写版本。业界谈到分布式事务通常指两段提交2PC事务(Spring/JEE中JTA等)或者Paxos与Raft,这些事务都有明显缺点和局限性。

而赫兰德在本文讨论的是另外一种基于本地事务情况下的事务机制,它是基于实体和活动(Activity)的概念,其实类似DDD聚合根和领域事件的概念,这种工作流类型事务虽然需要程序员介入,依靠消息系统实现,但可以实现接近无限扩展的大型系统。赫兰德文中提出了重要的观点:“如果你不能使用分布式事务,那么你就只能使用工作流。” - How Sharding Works ,这是一篇很不错的探讨数据Sharding的文章。基本上来说,数据Sharding可能的问题都在这篇文章里谈到了。 - Why you don’t want to shard ,这是Percona的一篇文章,其中表达了,不到万不得已不要做数据库分片。是的,最好还是先按业务来拆分,先把做成微服务的架构,然后把数据集变简单,然后再做Sharding会更好。 - How to Scale Big Data Applications ,这也是Percona给出的一篇关于怎样给大数据应用做架构扩展的文章。值得一读。 - MySQL Sharding with ProxySQL ,用ProxySQL来支撑MySQL数据分片的一篇实践文章。

缓存

消息队列

关于日志方面

关于性能方面

关于搜索方面

各公司的架构实践

High Scalability ,这个网站会定期分享一些大规模系统架构是怎样构建的,下面是迄今为止各个公司的架构说明。

小结

今天我们分享的内容是高手成长篇分布式架构部分的最后一篇——分布式架构工程设计,讲述了设计原则、设计模式等方面的内容,尤其整理和推荐了国内外知名企业的设计思路和工程实践,十分具有借鉴意义。

下篇文章中,我们将分享微服务架构方面的内容。敬请期待。

下面是《程序员练级攻略》系列文章的目录。

精选留言(15)
  • NonStatic 👍(62) 💬(2)

    吐槽只放链接的,一般自己是做不出这个链接列表的,更别说读完这些链接了。说句实在话,我花钱就是看耗子哥这个链接列表的!这里的链接列表能让我节省出用来找到和甄别哪片文章该读的学习时间,用来读更多的文章。 文章和书,就要读原始的那个。别人给你讲的都是他/她认为值得讲的,却不一定是你需要的。一个领域,入门的时候可以听听别人讲的,真到用的时候,只有自己读过原始资料才能给你你应该用到的细节。

    2018-07-17

  • C_love 👍(16) 💬(1)

    看到很多人吐槽只有链接,其实个人感觉这才是精华。 现在很多知识网上都能找到,但信息过滤所消耗的时间和精力是极大的。有像耗子哥这样的过来人的指引,会极大的减少这样的消耗。 技术学习往往都是自我驱动,由内而外,只看别人的总结或者嚼过的食物一般都会比较片面。从技术的源头去学习才能真正领悟其中三味。很多人追求的总结分析,大多是术,但不是道。 不过每个人需求不同,新人往往更多对术的东西感兴趣,这也很正常。如果基本的coding尚未得心应手就去学习更底层或者更难的知识会感觉眼高手低。这也是耗子哥反复强调要把前面的基础打好,虽然基础部分只有几章内容,但真正融会贯通可是需要几年。只能说专栏目前的内容并不很适合新人。 所以大家先专注于适合自己的部分去学习就好啦

    2018-07-18

  • Milo 👍(11) 💬(2)

    越来越没意思了,就给个文章列表,花这个钱不值得了!

    2018-07-17

  • 又双叒叕是一年啊 👍(7) 💬(1)

    老师请问这些文章您是怎么找到能教教获取这种干货的方法吗?我觉得这个方法更有价值

    2018-07-19

  • Field Li 👍(7) 💬(1)

    怎么说呢?虽然资料确实都是好的,但是可能很多人跟我一样更想看一些结合作者的理解的文章,或者纯粹作者自身加工的文章吧。而不是纯放些链接上去了,链接的内容很好,但是感觉还是有敷衍的嫌疑

    2018-07-18

  • 小鱼儿 👍(5) 💬(1)

    大部分都是英文版的,有对应中文版就更好了!

    2018-07-17

  • 我是李香兰小朋友 👍(4) 💬(1)

    耗子哥,可以提个意见吗?作为一个两年的工作经验的人,其实比较希望看到是某种技术的详细介绍或者某个知识点的详细理解,或者是一些工作上的技术选型的一些经验,你最近这几篇文章都是介绍一些书籍资料,感觉对我来说帮助不大,我可以自己去找啊,希望耗子哥理解!

    2018-07-17

  • kuzan 👍(3) 💬(1)

    这些文章链接让读者自己找不知道要花多大力气,支持目前这种方法,希望老师不要改变,师父领进门 修行在个人,成长要靠自己去领悟的

    2018-07-18

  • JasonYang 👍(3) 💬(1)

    每期都有在看,突然觉得标题过大,程序员练级攻略与进阶 这个话题太大了,看到后面更像是您对自身熟悉的技术领域的老生常谈,链接确实不错,干货满满,但是标题太大了,这么多程序员,好比不同期待的食客,他们期待 你有满汉全席 ,但是你并不完美,你只能做川菜或是粤菜,所以我想由于您的标题过大,总有一部分的人是不满意的,其实酷壳老版的练级攻略之所以所欢迎,一方面是免费指导,另一方面是对未来趋势的预判,第三就是亲切,而且实用,可能是老版太好,难免期待会有落差,其实我一开始挺期待你说 大家都会遇见的瓶颈或者疑问 如何高效的使用Google 或者其他软技能,因为这些东西具有普遍性,人人皆宜,话说回来,就是由于标题过大,你忙着把主线路说完,却忘了一些重要的东西

    2018-07-17

  • 斯盖丸 👍(2) 💬(1)

    耗子叔,您好。最近在看您推荐的经典书了。有个很古老的问题,这些书里大量的代码要背下来吗,如果不需要,那这些代码需要掌握到什么程度才算过关,谢谢。

    2018-07-18

  • TomnyYear 👍(0) 💬(1)

    为什么写了那么多篇,没有讨论如何测试分布式的。还有代码级别的测试?

    2018-08-22

  • sipom 👍(0) 💬(1)

    多谢,获益良多!耗子哥,除了资料还能再增加些您多年来工作中的实战经验体会吗?比如分布式架构设计、应用架构设计等方面的。谢谢!

    2018-07-20

  • Camio1945 👍(11) 💬(0)

    回答Roger同学的问题:一直都有网页版啊。 所有专栏列表地址: https://time.geekbang.org/columns

    2018-07-17

  • 黄强 👍(10) 💬(1)

    对习惯了喂养模式的人来说这是一个极度不负责任的专栏,都是各种罗列; 对有自驱力的人来说,这是一个极度干货并有方向的专栏,只要专注学习,必成高手;

    2020-05-10

  • 李春霖 👍(7) 💬(0)

    应该会有很多人意识不到高价值信息索引意味着什么…… 收录的这些文章估计够我消化几年的了,支持耗子哥坚持下去!

    2018-07-18