You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
9.3 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 开篇词 | 想吃透架构?你得看看真实、接地气的架构案例
你好我是王庆友前1号店首席架构师很高兴能在这里和你一起聊聊架构。
架构的内容,相信你也看过很多了,博客、书籍、技术大会等等,都会有大量架构方面的分享。但一方面,这些内容比较碎片化,比如这一次讲的是技术的高并发处理,下一次讲的是老业务的改造。表面上看,你脑子里塞得满满的,但实际上,你很难循序渐进、系统地去学习架构。
另一方面,这些内容大多比较含糊,看似说的要点很全,但缺乏关键的实现细节,这样的话,说的和做的联系不起来,结果就是你可能理解起来都有困难,更不用说在实际工作中落地了。因此,我想了想,要能为你提供全新的架构学习体验,那就是让理论和实战结合起来,理论讲透彻,实战提供大量接地气的案例,让你能够知行合一地学架构。
我先简单介绍下自己吧,我从事软件开发已有二十年,架构设计也超过十年了,所以也经历了软件发展的各个阶段。
一开始呢我从事的是企业级软件开发后来转到了大型互联网电商平台最近我奋战在新零售领域帮助传统的大型连锁餐饮企业搭建O2O平台打通他们的线上和线下系统。
从1号店开始我负责了许多大项目的架构设计积累了很多架构方面的经验。我是一个爱琢磨的人喜欢总结做过的东西形成一个体系化的认知。因此在架构这个话题上我有很多东西想和你分享。我希望这些总结过的经验可以帮你在成为架构师的道路上少走一些弯路也希望通过这个专栏能够抛砖引玉和你一起讨论一起成长。
## 为什么开发人员要学习架构?
这其实可以从系统和个人发展这两方面来看。
### 一、无架构,不系统
现在的软件系统规模越来越大,业务上和技术上都非常地复杂,大一点的互联网公司,技术人员都有几千号人。那么,如何开发这么复杂的系统?如何有效地组织他们的工作呢?
在这里,一个好的架构设计无疑是至关重要的,无论你是有一定经验的开发人员,还是已经开始从事系统设计的架构师,深入学习和理解架构都是必不可少的,掌握好架构设计,可以让你轻松应对技术和业务的挑战。但是很多技术人员,由于个人项目经验有限,又缺乏很好的学习途径,对架构设计一知半解。在实际工作中,不能把握好架构设计的度,要么设计不足,要么过度设计,导致系统变来变去,严重影响开发效率和质量。
### 二、拓展你的职业发展空间
此外,对于技术人员来说,公司通常会提供两个职业发展通道供你选择:管理路线和技术路线。
现实中,大部分同学应该都是走技术路线的,很多程序员的职业发展目标,也都是想要成为一名优秀的架构师。这不仅仅意味着更优渥的薪水和更持久的职业生涯,更因为在架构师这个舞台上,你可以凭借个人出色的架构能力,为项目的落地发挥巨大的作用,你会有更大的成就感。
所以说,无论从软件发展的趋势,还是从个人职业发展方向上考虑,你都应该拥抱架构,主动学习,尽快成长为一个能力全面的架构师。
## 如何学习架构?
但是,成为一名优秀的架构师,却不是一件容易的事情,你需要克服很多挑战。
* 首先,你需要跳出当前的小模块,站在系统整体的角度来考虑问题。
* 其次,你不仅要从技术的角度考虑问题,也要学会从业务的角度来考虑问题,深入理解系统的挑战在哪里,不要在错误的地方发力。
* 最后,你需要做好各方面的平衡,能在现有的各项资源约束下,寻求一个最优解。
而这些,无疑都是非常考验人,也非常锻炼人的,需要你能够快速成长起来。如果你在走向架构师这条路上,完全靠自己摸索,找不到正确的方向,不断地犯错,你很可能会半途而废。
那么,如何找到一个好的学习方式呢?
我们知道,一门新的语言,有很多书籍教你如何从入门到精通;一个新的开源框架,也有全面的资料教你如何深入掌握。但**在架构学习这方面,并没有十分系统的理论指导,教你如何一步步进阶。**
有时候,一些架构的术语和概念甚至都没统一,需要靠你自己去分辨。有时候,你可以从各种渠道找到一些项目的架构介绍,但不知是作者出于保密的目的,还是自己也没有深度参与项目,内容往往避实就虚,缺乏具体的东西。这样的架构介绍,参考性就很有限,你看过了,也就忘了,就像是中国的山水画,写意不写实,内行可以看门道,外行只能看热闹,无助于你实际能力的提升。
**此外,架构设计的实践性很强**,如果公司的业务比较简单,对架构设计的要求不高,你就未必有很好的实践机会;如果你只是抽象地了解了一些架构原则,不去具体地实践它,那么你很难去学透架构,让它变成自己的能力。
而在设计这个专栏的时候,我就有针对性地考虑到了这些问题,并给出了解决方案:
* 首先,我不会在这里罗列所有架构相关的知识点,而是选择实践中最有用的部分,形成一个精简的体系,让你可以快速掌握架构的核心内容,抓住学习的重点。
* **此外,本专栏的核心内容全部来自于本人实际项目的总结**。我会基于这些实战后的思考,和你深入分享我的经验和看法,让你能够透过现象看本质,对架构的认知快速到位。我想说的是,这将会是一个有态度的专栏,而不是架构知识的搬运工。
* **更为重要的是,每讲课程,我会根据不同的架构原则,给你提供很多完整且非常接地气的实际案例**。比如说通过1号店App服务端架构改造的案例你将会深入地理解系统从单体架构到分布式再到服务化演变的背后原因通过1号店订单水平分库的案例你将会了解大型互联网公司是如何解决单个数据库的性能和容量瓶颈的。这些案例都很典型不但让你能够理论结合实践深入理解和运用各种架构原则而且在很多情况下你甚至可以直接参考它们在公司落地类似的架构改造。
这个专栏,它有深度、有细节、实战性强。希望通过这个专栏,能让你对架构形成一个清晰的认知框架,并对各个架构要点形成自己的理解,同时,通过结合着大量实际案例的学习,希望最终你可以把这些知识变成实际的能力。
## 我是如何规划这个课程的?
首先,我会和你分享架构的本质,让你对架构形成一个体系化的认知。
接下来,我将整体内容划分为**业务架构**和**技术架构**两大部分,先理论后案例,带你深入理解每种架构要解决的问题,以及如何解决。
* **业务架构篇**:重点针对系统的扩展性和复用性两大目标展开。首先,我会介绍这两大目标的内涵和实现手段,让你明白如何通过业务的拆分和组合,搭建一个柔性可变的系统;然后,每部分都有三个实际案例,让你理解如何以服务化和平台化的方式升级改造系统,最终实现扩展性和复用性的目标。
* **技术架构篇**:重点针对系统高可用和高性能/可伸缩的目标展开。首先我会介绍实现这些目标的策略和架构原则比如说高可用的策略有避免事故、降低影响、快速恢复等高可用的架构原则有无单点、可监控、水平扩展等这样你可以总体了解实现这些目标都有哪些手段然后每个目标都有3个实际案例让你理解如何在项目中灵活应用这些策略和原则。
最后,我还会通过一篇架构总结,汇总架构原则,以及它们的适用场景,并就如何成长为优秀的架构师,为你提供一个可行的方向指导。
## 写在最后
那么在最后,我想说的是,架构对我们的工作是如此的重要,如果你想深入学习架构,除了有好的学习方法,你一定还要多思考,多交流,多实践。
在课程设计中,我在每一节课后都留了思考题,希望你能够结合每篇文章的知识点,给出自己的思考。
**这次当然也不例外,你可以给我留言,说说你对学习架构都有哪些困惑。**
另外,你也要大胆地抛出问题,我一定会尽我所能及时给你反馈。很多问题都是共性的,我们一起讨论和解决,成长一定会更快。
书上学来终觉浅,梅花香自苦寒来。好的指导方法加上你自身的努力实践,相信你的架构之路会越走越顺,越走越快。
希望这个专栏,能够帮你开启架构师的进阶之路,在接下来的两个月里,让我们在架构之路上一起成长吧。
我是王庆友,欢迎你把这个课程分享给你的朋友,我们一起学架构。感谢你的阅读,我们第一讲再见。