learn-tech/专栏/周志明的架构课/00开篇词_如何构建一个可靠的分布式系统?.md
2024-10-16 06:37:41 +08:00

71 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
00 开篇词 _ 如何构建一个可靠的分布式系统?
你好,我是周志明,一名纯粹的软件开发者。之所以说“纯粹”,是因为我想强调,研究技术、编写程序不仅是我养家糊口的技能,也是我最大的兴趣爱好。
在十几年的职业生涯里,我有过很多种不同的标签。比如说,企业管理者、实验室研究员、技术布道师、计算机作家,等等。它们都有一个共同点,就是强调要把自己的想法、理念分享出来,影响他人。
所以你很可能是从《深入理解Java虚拟机》这一类技术书籍知道我的名字的。确实我之前出版过7本计算机技术类的书籍还写过两部开源文档。特别开心的是这些原创技术书的口碑和销量都得到了大家的认可其中有四本书在豆瓣上的评分还超过了9分。现在分享与布道这件事儿也成了我在技术与代码之外的另一个兴趣当然它也给我带来了很多机会和荣誉。
不过除了分享和布道,其实最贴合我的标签,还是程序员。对我来说,这也是我最看重的身份。十几年间,我从一个面向业务逻辑与局部功能编码的程序员,逐步成长为了一名对系统全局负责的技术架构师。现在,我主要是在做一些大型企业级软件的研发工作,也参与和主导过多个国家级的软件项目。
那么,作为一名架构师,在软件研发的过程中,最难的事儿,其实并不是如何解决具体某个缺陷、如何提升某段代码的性能,而是如何才能让一系列来自不同开发者、不同厂商、不同版本、不同语言、质量也良莠不齐的软件模块,在不同的物理硬件和拓扑结构随时变动的网络环境中,依然能保证可靠的运行质量。
显然,这并不是一个研发过程的管理问题。一套“靠谱”的软件系统,尤其是大型的、分布式的软件系统,很难指望只依靠团队成员的个人能力水平,或者依靠质量管理流程来达成。
在我看来,这是一个系统性的、架构层面的问题,最终还是要在技术和架构中去解决。而这也正是我要在这门课中跟你一起探讨的主题:如何构建一个可靠的分布式系统。
我是怎么规划课程的?
那么为了能够讨论清楚这个话题我把课程划分成了以下5个模块。
演进中的架构:我会借着讨论历史之名,从全局性的视角,帮你梳理微服务发展历程中出现的大量技术名词、概念,让你了解这些技术的时代背景和探索过程,帮你在后续的课程讲解中,更容易去深入理解软件架构设计的本质。
架构师的视角:我不会局限在某种架构的通用技巧,而是会带你系统性地了解在做架构设计的时候,架构师都应该思考哪些问题、可以选择哪些主流的解决方案和行业标准做法,以及这些主流方案都有什么优缺点、会给架构设计带来什么影响,等等。这样一来,我们才可以把“架构设计”这样比较抽象的工作具体化、具象化。
分布式的基石:我会聚焦在分布式架构,和你探讨分布式带来的问题与应对策略。我会带你剖析分布式架构中出现的一系列问题,比如服务的注册发现、跟踪治理、负载均衡、故障隔离、认证授权、伸缩扩展、传输通讯、事务处理等,有哪些解决思路、方法和常见工具。
不可变基础设施:我会按照云原生时代“基础设施即代码”的新思路,带你深入理解基础设施不变性的目的、原理与实现途径,和你一起去体会用代码和用基础设施,来解决分布式问题的差异,让你能够理解不可变基础设施的内涵,便于在实际工作中做运维、程序升级和部署等工作。
探索与实践我会带你一起开发不同架构的Fenixs Bookstore“导读”这一讲会具体介绍这个项目并看看在不同环境下都应该怎么部署。这个模块的定位是“实战”为了保证学习效果我特意没有安排音频所以建议你一定要自己动手去实操。
因为我相信,如果你是一名驾驶初学者,最合理的学习路径应该是先把汽车发动,然后慢慢行驶起来,而不是马上从“引擎动力原理”“变速箱构造”入手,去设法深刻地了解一台汽车。学习计算机技术也是同样的道理。所以在“探索与实践”模块,我会先带你从运行程序开始,看看效果,然后再搭建好开发、调试环境。
说到这里,我一定要和你说说怎么学习这门课,才能保证最好的效果。
你要怎么学习这门课?
如果你已经是一名系统架构师或者高级开发工程师了,那这门课程就非常适合你。通过跟随学习,你会知道,在软件设计、架构工作中,都需要考虑哪些因素、需要解决哪些问题、有哪些行业标准的解决方案。而如果你是个刚入行不久的程序员,那你可以把这门课程作为一个概念名词的速查手册。
很多内容对你来说可能是全新的,甚至会颠覆你过去的一些认知。而这门课程的好处就是,在不同的技术水平阶段,你都会找到不同的使用方法。具体怎么做呢?
第一步,先完整地跟着课程的节奏学习一遍。你可以先去串一下各种技术名词和架构理论概念,拓展一下视野,去看看大型的架构项目是怎么搭建的,涨涨见识,不一定要求自己深入地理解和记住每一讲的内容。
第二步,根据自己当前的情况,按图索骥寻找对应的章节深入学习并实践。
第三步,当你有了一定的实践经验之后,再来重新学习对应的章节,看看自己曾经的理解是否有遗漏或者有偏差,或者看看我的内容是否还有不完善的地方,真正将知识变成自己的认知。
写在最后
最后,我想说的是,我在极客时间上开设这门课程,既是为了分享与技术布道,也是为了借这个机会,系统性地整理自己的知识,查缺补漏,将它们都融入既有的知识框架之中。
我一直认为,技术人员的成长是有“捷径”的,做技术不仅要去看、去读、去想、去用,更要去写、去说。
把自己“认为掌握了的”知识给叙述出来,能够写得条理清晰,讲得理直气壮;能够让别人听得明白,释去心中疑惑;能够把自己的观点交给别人审视,乃至质疑。在这个过程之中,就会挖掘出很多潜藏在“已知”背后的“未知”。
那么既然如此,我也非常希望,你能够在学习课程的过程当中,也记录下自己的所学所得、所思所想,然后分享给我和其他同学。在分享的过程中,相信我们一定都会有所收获。
所以在这里,我也想发起一个活动:在课程更新的过程中,分享出你的学习心得、实践感悟等等,或者也可以分享出你自己在架构设计中的实践经历、遇到的坑以及避坑的经验。在期中和期末时,课程编辑会甄选出优秀的留言分享内容,专门做一个展示模块,最后还会送出这门课程的纸质版图书。
另外,我还会从中挑选一些比较有代表性的留言做针对性点评,期待在留言区看到你的身影呀!欢迎你的踊跃参与,这也是给自己增添一份学习动力~
OK最后的最后我还想正式认识一下你。你可以在留言区里做个自我介绍和我聊聊你目前对于软件架构设计的最大难点在哪或者你也可以聊聊你对软件架构都有哪些独特的思考和体验欢迎在留言区和我交流讨论。
好了,让我们正式开始学习之旅吧!