周志明的软件架构课

构筑可靠的大型软件系统

软件架构,分布式系统,基础设施,架构演进,单体架构,SOA架构,微服务,云原生

周志明 博士,远光软件研究院院长,《深入理解Java虚拟机》《凤凰架构》等书作者

周志明的软件架构课

构筑可靠的大型软件系统

软件架构,分布式系统,基础设施,架构演进,单体架构,SOA架构,微服务,云原生

周志明 博士,远光软件研究院院长,《深入理解Java虚拟机》《凤凰架构》等书作者

2020年11月16日

作为一名架构师,在做软件研发、架构设计的时候,你遇到的最困难的问题是什么呢?是要具体解决系统的某个缺陷,还是要提升某段代码的运行性能?

周志明老师说,在软件研发的过程中,最难的事儿,其实是怎么样才能让一系列来自不同开发者、不同厂商、不同版本、不同语言、质量也参差不齐的软件模块,在不同的物理硬件和拓扑结构随时变动的网络环境中,还能保证可靠的运行质量。

很明显,这不是一个研发过程的管理问题。因为一套“靠谱”的软件系统,尤其是大型的、分布式的软件系统,很难指望只靠团队成员的个人能力水平,或者是质量管理流程来实现。

那么,在周志明老师看来,这其实是一个系统性的、架构层面的问题,最终还是要在技术和架构中去解决。而这也正是周老师要在这门课中跟你一起探讨的主题:如何构建一个可靠的分布式系统

如果你是一名架构师,或者是高级开发工程师,这门课可以帮你梳理出现代软件架构各条分支中繁多知识点的技能地图。通过跟随学习,你会知道架构师都应该掌握哪些架构知识,在软件研发的过程中,都需要考虑哪些因素、解决哪些问题、有哪些行业标准的解决方案。

而如果你是一个刚入行的工程师,那你可以把这门课程作为一个概念名词的速查手册。通过学习课程,你会理解一些技术名词和架构理论,拓展技术视野,提升自己的技术认知水平。

课程模块设计

课程主体划分为以下5大模块。

演进中的架构:该模块会借着讨论历史之名,从全局性的视角,帮你梳理微服务发展历程中出现的大量技术名词、概念,让你了解这些技术的时代背景和探索过程,帮你在后续的课程讲解中,更容易去深入理解软件架构设计的本质。

架构师的视角:该模块不会局限在某种架构的通用技巧,而是会带你系统性地了解在做架构设计的时候,架构师都应该思考哪些问题、可以选择哪些主流的解决方案和行业标准做法,以及这些主流方案都有什么优缺点、会给架构设计带来什么影响,等等。这样一来,我们才可以把“架构设计”这样比较抽象的工作具体化、具象化。

分布式的基石:该模块会聚焦在分布式架构,和你探讨分布式带来的问题与应对策略。带你剖析分布式架构中出现的一系列问题,比如服务的注册发现、跟踪治理、负载均衡、故障隔离、认证授权、伸缩扩展、传输通讯、事务处理等,有哪些解决思路、方法和常见工具。

不可变基础设施:该模块会按照云原生时代“基础设施即代码”的新思路,带你深入理解基础设施不变性的目的、原理与实现途径,和你一起去体会用代码和用基础设施,来解决分布式问题的差异,让你能够理解不可变基础设施的内涵,便于在实际工作中做运维、程序升级和部署等工作。

探索与实践:该模块会带你一起开发不同架构的Fenix’s Bookstore,并看看在不同环境下都应该怎么部署。这个模块的定位是“实战”,为了保证学习效果,特意没有安排音频,所以建议你一定要自己动手去实操。

架构师的视角

07 | 远程服务调用(上):从本地方法到远程方法的桥梁

08 | 远程服务调用(下):如何选择适合自己的RPC框架?

09 | RESTful服务(上):从面向过程编程到面向资源编程

10 | RESTful服务(下):如何评价服务是否RESTful?

11 | 本地事务如何实现原子性和持久性?

12 | 本地事务如何实现隔离性?

13 | 全局事务和共享事务是如何实现的?

14 | 分布式事务之可靠消息队列

15 | 分布式事务之TCC与SAGA

16 | 域名解析系统,优化HTTP性能的第一步

17 | 客户端缓存是如何帮助服务器分担流量的?

18 | 传输链路,优化HTTP传输速度的小技巧

19 | 如何利用内容分发网络来提高网络性能?

20 | 常见的四层负载均衡的工作模式是怎样的?

21 | 服务端缓存的三种属性

22 | 分布式缓存如何与本地缓存配合,提高系统性能?

23 | 认证:系统如何正确分辨操作用户的真实身份?

24 | 授权(上):系统如何确保授权的过程可靠?

25 | 授权(下):系统如何确保授权的结果可控?

26 | 凭证:系统如何保证与用户之间的承诺是准确完整且不可抵赖的?

27 | 保密:系统如何保证敏感数据无法被内外部人员窃取滥用?

28 | 传输(上):传输安全的基础,摘要、加密与签名

29 | 传输(下):数字证书与传输安全层

30 | 验证:系统如何确保提交给服务的数据是安全的?