周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54202 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/09:39
登录|注册

开篇词 | 如何构建一个可靠的分布式系统?

讲述:李海明大小:8.82M时长:09:39
你好,我是周志明,一名纯粹的软件开发者。之所以说“纯粹”,是因为我想强调,研究技术、编写程序不仅是我养家糊口的技能,也是我最大的兴趣爱好。
在十几年的职业生涯里,我有过很多种不同的标签。比如说,企业管理者、实验室研究员、技术布道师、计算机作家,等等。它们都有一个共同点,就是强调要把自己的想法、理念分享出来,影响他人。
所以,你很可能是从《深入理解 Java 虚拟机》这一类技术书籍知道我的名字的。确实,我之前出版过 7 本计算机技术类的书籍,还写过两部开源文档。特别开心的是,这些原创技术书的口碑和销量都得到了大家的认可,其中有四本书在豆瓣上的评分还超过了 9 分。现在,分享与布道这件事儿也成了我在技术与代码之外的另一个兴趣,当然它也给我带来了很多机会和荣誉。
不过除了分享和布道,其实最贴合我的标签,还是程序员。对我来说,这也是我最看重的身份。十几年间,我从一个面向业务逻辑与局部功能编码的程序员,逐步成长为了一名对系统全局负责的技术架构师。现在,我主要是在做一些大型企业级软件的研发工作,也参与和主导过多个国家级的软件项目。
那么,作为一名架构师,在软件研发的过程中,最难的事儿,其实并不是如何解决具体某个缺陷、如何提升某段代码的性能,而是如何才能让一系列来自不同开发者、不同厂商、不同版本、不同语言、质量也良莠不齐的软件模块,在不同的物理硬件和拓扑结构随时变动的网络环境中,依然能保证可靠的运行质量。
显然,这并不是一个研发过程的管理问题。一套“靠谱”的软件系统,尤其是大型的、分布式的软件系统,很难指望只依靠团队成员的个人能力水平,或者依靠质量管理流程来达成。
在我看来,这是一个系统性的、架构层面的问题,最终还是要在技术和架构中去解决。而这也正是我要在这门课中跟你一起探讨的主题:如何构建一个可靠的分布式系统

我是怎么规划课程的?

那么,为了能够讨论清楚这个话题,我把课程划分成了以下 5 个模块。
演进中的架构:我会借着讨论历史之名,从全局性的视角,帮你梳理微服务发展历程中出现的大量技术名词、概念,让你了解这些技术的时代背景和探索过程,帮你在后续的课程讲解中,更容易去深入理解软件架构设计的本质。
架构师的视角:我不会局限在某种架构的通用技巧,而是会带你系统性地了解在做架构设计的时候,架构师都应该思考哪些问题、可以选择哪些主流的解决方案和行业标准做法,以及这些主流方案都有什么优缺点、会给架构设计带来什么影响,等等。这样一来,我们才可以把“架构设计”这样比较抽象的工作具体化、具象化。
分布式的基石:我会聚焦在分布式架构,和你探讨分布式带来的问题与应对策略。我会带你剖析分布式架构中出现的一系列问题,比如服务的注册发现、跟踪治理、负载均衡、故障隔离、认证授权、伸缩扩展、传输通讯、事务处理等,有哪些解决思路、方法和常见工具。
不可变基础设施:我会按照云原生时代“基础设施即代码”的新思路,带你深入理解基础设施不变性的目的、原理与实现途径,和你一起去体会用代码和用基础设施,来解决分布式问题的差异,让你能够理解不可变基础设施的内涵,便于在实际工作中做运维、程序升级和部署等工作。
探索与实践:我会带你一起开发不同架构的 Fenix’s Bookstore(“导读”这一讲会具体介绍这个项目),并看看在不同环境下都应该怎么部署。这个模块的定位是“实战”,为了保证学习效果,我特意没有安排音频,所以建议你一定要自己动手去实操。
因为我相信,如果你是一名驾驶初学者,最合理的学习路径应该是先把汽车发动,然后慢慢行驶起来,而不是马上从“引擎动力原理”“变速箱构造”入手,去设法深刻地了解一台汽车。学习计算机技术也是同样的道理。所以在“探索与实践”模块,我会先带你从运行程序开始,看看效果,然后再搭建好开发、调试环境。
说到这里,我一定要和你说说怎么学习这门课,才能保证最好的效果。

你要怎么学习这门课?

如果你已经是一名系统架构师或者高级开发工程师了,那这门课程就非常适合你。通过跟随学习,你会知道,在软件设计、架构工作中,都需要考虑哪些因素、需要解决哪些问题、有哪些行业标准的解决方案。而如果你是个刚入行不久的程序员,那你可以把这门课程作为一个概念名词的速查手册。
很多内容对你来说可能是全新的,甚至会颠覆你过去的一些认知。而这门课程的好处就是,在不同的技术水平阶段,你都会找到不同的使用方法。具体怎么做呢?
第一步,先完整地跟着课程的节奏学习一遍。你可以先去串一下各种技术名词和架构理论概念,拓展一下视野,去看看大型的架构项目是怎么搭建的,涨涨见识,不一定要求自己深入地理解和记住每一讲的内容。
第二步,根据自己当前的情况,按图索骥寻找对应的章节深入学习并实践。
第三步,当你有了一定的实践经验之后,再来重新学习对应的章节,看看自己曾经的理解是否有遗漏或者有偏差,或者看看我的内容是否还有不完善的地方,真正将知识变成自己的认知。

写在最后

最后,我想说的是,我在极客时间上开设这门课程,既是为了分享与技术布道,也是为了借这个机会,系统性地整理自己的知识,查缺补漏,将它们都融入既有的知识框架之中。
我一直认为,技术人员的成长是有“捷径”的,做技术不仅要去看、去读、去想、去用,更要去写、去说
把自己“认为掌握了的”知识给叙述出来,能够写得条理清晰,讲得理直气壮;能够让别人听得明白,释去心中疑惑;能够把自己的观点交给别人审视,乃至质疑。在这个过程之中,就会挖掘出很多潜藏在“已知”背后的“未知”。
那么既然如此,我也非常希望,你能够在学习课程的过程当中,也记录下自己的所学所得、所思所想,然后分享给我和其他同学。在分享的过程中,相信我们一定都会有所收获。
所以在这里,我也想发起一个活动:在课程更新的过程中,分享出你的学习心得、实践感悟等等,或者也可以分享出你自己在架构设计中的实践经历、遇到的坑以及避坑的经验。在期中和期末时,课程编辑会甄选出优秀的留言分享内容,专门做一个展示模块,最后还会送出这门课程的纸质版图书。
另外,我还会从中挑选一些比较有代表性的留言做针对性点评,期待在留言区看到你的身影呀!欢迎你的踊跃参与,这也是给自己增添一份学习动力~
OK,最后的最后,我还想正式认识一下你。你可以在留言区里做个自我介绍,和我聊聊,你目前对于软件架构设计的最大难点在哪?或者,你也可以聊聊你对软件架构都有哪些独特的思考和体验,欢迎在留言区和我交流讨论。
好了,让我们正式开始学习之旅吧!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

周志明在极客时间上分享了一门关于构建可靠分布式系统的课程规划。他强调了作为一名纯粹的软件开发者,对技术和编程的热爱和专注。课程分为五个模块,包括演进中的架构、架构师的视角、分布式的基石、不可变基础设施和探索与实践。建议学习者先完整地跟着课程的节奏学习一遍,然后根据自己的情况深入学习并实践,最后再重新学习对应的章节,真正将知识变成自己的认知。这门课程适合系统架构师或高级开发工程师,也可以作为刚入行不久的程序员的概念名词的速查手册。通过这门课程,学习者可以了解软件设计和架构工作中需要考虑的因素、需要解决的问题以及行业标准的解决方案。周志明还发起了一个活动,鼓励学习者在学习过程中记录所学所得、分享实践感悟,并承诺会挑选优秀留言进行展示并送出纸质版图书。

该免费文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(91)

  • 最新
  • 精选
  • 一个好人
    期待了好久,终于等到周老师的专栏了,从大学到现在,周老师的《深入理解Java虚拟机》一直指引着我对Java的探索。我都充好钱准备买老师的课了,没想到是公开课,太给力了!👍🏻👍🏻👍🏻

    作者回复: 感谢支持

    2020-11-18
    114
  • 水中之石
    周老师,想了解一下你走之前是怎样从业务往架构转型的? 我是工作两年的小白,一直都很想学习架构方面的课程,但是由于工作全是业务逻辑,而且是极其复杂繁琐的业务,每天都是对着协议研究业务实现,感觉自己都困在业务里面无法自拔。

    作者回复: 工作中的职责完全与自己感兴趣的方向一致,也许对于多数人来说都是可遇不可求的。 就我自己而言,也是在一家以业务开发为主的企业中工作,大多数知识最初都不是从工作中学习到或者接触到的,而是源于一些对看起来对工作毫无帮助的探索,譬如编译原理、程序语言设计、Java虚拟机方面就是典型的例子,在工作中压根用不到。 但是随着这些看起来很没有实用价值的知识的广度、深度积累起来,到一定程度之后,对新知识的理解速度与深度都会有显著提升,因为它们大多能在既有的知识框架中找到适合的类比与安放的位置。 然后,也是随着这些知识的逐渐积累,在工作中技术、架构方面就有了自己的观点,解决的疑难杂症多了,在合作伙伴心中逐渐形成了权威,然后顺其自然地工作中心就有了转向,或者说有了一些自己选择工作内容的便利。

    2020-12-26
    6
    79
  • 慕然
    非常期待,jvm这本书前前后后读了快10遍了,从第2版到第3版,每次读都能发现以前没注意到的点。期待周老师的架构课。顺便吐槽一下,也正是jvm这本书,导致跳槽时jvm面试难度比以前难了个数量级。

    作者回复: 感谢支持:)

    2020-11-18
    5
    33
  • 稻田守望者
    有两套书是我从第一版一直买到第三版的:一套是《JavaScript高级程序设计》,这书已经出了第四版了,不过现在工作上较少涉及前端,也就没有继续买;另一套就是周老师的《深入理解Java虚拟机》。很玄怪的是,在我粗读一遍之后准备精读的时候,这两套书的第三版竟然都找不到了! 在《深入理解Java虚拟机》基础之上,我把JVM总结为:一令、二规、三“街”、四程、多“获”。为此还虚构了一个简单的场景加深影响:接到老婆/女友的一个命令“陪她一起逛街”;需要遵守两个规章制度“不准看手机、不准看美女”;经过了三条街;走过了四段路,最终买了很多东西,收获满满! 对应到JVM,一令:表示一套虚拟机指令;二规:表示Java语言规范和JVM规范;三“街”是谐音,表示三种结构,也就是class文件结构、Java对象头结构和运行时的jvm内存结构;四程表示和jvm相关的四个过程,即:编译过程、类加载过程、对象分配与垃圾回收过程、基于栈结构的程序执行过程;多获表示jvm提供了很多需要活学活用的工具,比如jmap、jstat、jstack……

    作者回复: 感谢支持。

    2021-01-27
    23
  • 小马哥
    架构是一门权衡的艺术

    作者回复: 是的

    2020-11-27
    14
  • 米凤君
    周老师,我有一个关于虚拟机书中对方法区概念理解上的问题,书中您讲到hotspot使用永久代来实现了方法区。而后的内容描述我理解为在hotspot中没有方法区的概念。您看我理解的对吗?具体章节第三版2.2.5方法区。

    作者回复: 不是,方法区是写在《Java虚拟机规范》中的逻辑概念,它不会因为JVM实现版本的变化而消失。 只是HotSpot采用metaspace代替原本的perm gen去实现方法区而已,如何实现一个逻辑概念是具体虚拟机的自由。 关于JVM的问题与课程无关,建议提到https://github.com/fenixsoft/jvm_book

    2020-12-10
    2
    13
  • Geek_74e410
    感谢极客时间请来周志明前辈

    作者回复: 感谢支持

    2020-11-18
    12
  • 梦想天空
    我是一个想当厨师的中级程序员

    作者回复: 祝你实现梦想

    2020-12-02
    9
  • Empty
    已看了14节课,课程免费,质量还这么高,这不太符合经济学原理啊,哈哈。之前就拜读过老师的《深入理解Java虚拟机》,是我看过的关于JVM最通俗易懂又不失深度的一本好书。

    作者回复: 感谢认可。

    2020-12-14
    7
  • 熊斌
    敲代码的过程当中听了第一遍,热血沸腾。 老师好,我叫熊斌,一名Java软件工程师,做了五年后端开发加项目管理。后来自学前端相关的知识,开发过app、微信小程序等应用程序。 由于过往团队中的成员水平参差不齐,我们开发自己的开发平台,程序员只用写增删改查业务层的东西,页面也是组件化的拖拽。 这种做法的难点是,我们封装的底层的那些核心技术可能已经过时,平台升级困难、团队成员的能力没法得到提升之类的问题

    作者回复: 感谢支持,共勉。

    2020-11-20
    7
收起评论
大纲
固定大纲
我是怎么规划课程的?
你要怎么学习这门课?
写在最后
显示
设置
留言
91
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部