开篇词 想吃透架构?你得看看真实、接地气的架构案例
你好,我是王庆友,前1号店首席架构师,很高兴能在这里和你一起聊聊架构。
架构的内容,相信你也看过很多了,博客、书籍、技术大会等等,都会有大量架构方面的分享。但一方面,这些内容比较碎片化,比如这一次讲的是技术的高并发处理,下一次讲的是老业务的改造。表面上看,你脑子里塞得满满的,但实际上,你很难循序渐进、系统地去学习架构。
另一方面,这些内容大多比较含糊,看似说的要点很全,但缺乏关键的实现细节,这样的话,说的和做的联系不起来,结果就是你可能理解起来都有困难,更不用说在实际工作中落地了。因此,我想了想,要能为你提供全新的架构学习体验,那就是让理论和实战结合起来,理论讲透彻,实战提供大量接地气的案例,让你能够知行合一地学架构。
我先简单介绍下自己吧,我从事软件开发已有二十年,架构设计也超过十年了,所以也经历了软件发展的各个阶段。
一开始呢,我从事的是企业级软件开发,后来转到了大型互联网电商平台,最近我奋战在新零售领域,帮助传统的大型连锁餐饮企业搭建O2O平台,打通他们的线上和线下系统。
从1号店开始,我负责了许多大项目的架构设计,积累了很多架构方面的经验。我是一个爱琢磨的人,喜欢总结做过的东西,形成一个体系化的认知。因此,在架构这个话题上,我有很多东西想和你分享。我希望,这些总结过的经验,可以帮你在成为架构师的道路上,少走一些弯路,也希望通过这个专栏能够抛砖引玉,和你一起讨论,一起成长。
为什么开发人员要学习架构?
这其实可以从系统和个人发展这两方面来看。
一、无架构,不系统
现在的软件系统规模越来越大,业务上和技术上都非常地复杂,大一点的互联网公司,技术人员都有几千号人。那么,如何开发这么复杂的系统?如何有效地组织他们的工作呢?
在这里,一个好的架构设计无疑是至关重要的,无论你是有一定经验的开发人员,还是已经开始从事系统设计的架构师,深入学习和理解架构都是必不可少的,掌握好架构设计,可以让你轻松应对技术和业务的挑战。但是很多技术人员,由于个人项目经验有限,又缺乏很好的学习途径,对架构设计一知半解。在实际工作中,不能把握好架构设计的度,要么设计不足,要么过度设计,导致系统变来变去,严重影响开发效率和质量。
二、拓展你的职业发展空间
此外,对于技术人员来说,公司通常会提供两个职业发展通道供你选择:管理路线和技术路线。
现实中,大部分同学应该都是走技术路线的,很多程序员的职业发展目标,也都是想要成为一名优秀的架构师。这不仅仅意味着更优渥的薪水和更持久的职业生涯,更因为在架构师这个舞台上,你可以凭借个人出色的架构能力,为项目的落地发挥巨大的作用,你会有更大的成就感。
所以说,无论从软件发展的趋势,还是从个人职业发展方向上考虑,你都应该拥抱架构,主动学习,尽快成长为一个能力全面的架构师。
如何学习架构?
但是,成为一名优秀的架构师,却不是一件容易的事情,你需要克服很多挑战。
- 首先,你需要跳出当前的小模块,站在系统整体的角度来考虑问题。
- 其次,你不仅要从技术的角度考虑问题,也要学会从业务的角度来考虑问题,深入理解系统的挑战在哪里,不要在错误的地方发力。
- 最后,你需要做好各方面的平衡,能在现有的各项资源约束下,寻求一个最优解。
而这些,无疑都是非常考验人,也非常锻炼人的,需要你能够快速成长起来。如果你在走向架构师这条路上,完全靠自己摸索,找不到正确的方向,不断地犯错,你很可能会半途而废。
那么,如何找到一个好的学习方式呢?
我们知道,一门新的语言,有很多书籍教你如何从入门到精通;一个新的开源框架,也有全面的资料教你如何深入掌握。但在架构学习这方面,并没有十分系统的理论指导,教你如何一步步进阶。
有时候,一些架构的术语和概念甚至都没统一,需要靠你自己去分辨。有时候,你可以从各种渠道找到一些项目的架构介绍,但不知是作者出于保密的目的,还是自己也没有深度参与项目,内容往往避实就虚,缺乏具体的东西。这样的架构介绍,参考性就很有限,你看过了,也就忘了,就像是中国的山水画,写意不写实,内行可以看门道,外行只能看热闹,无助于你实际能力的提升。
此外,架构设计的实践性很强,如果公司的业务比较简单,对架构设计的要求不高,你就未必有很好的实践机会;如果你只是抽象地了解了一些架构原则,不去具体地实践它,那么你很难去学透架构,让它变成自己的能力。
而在设计这个专栏的时候,我就有针对性地考虑到了这些问题,并给出了解决方案:
- 首先,我不会在这里罗列所有架构相关的知识点,而是选择实践中最有用的部分,形成一个精简的体系,让你可以快速掌握架构的核心内容,抓住学习的重点。
- 此外,本专栏的核心内容全部来自于本人实际项目的总结。我会基于这些实战后的思考,和你深入分享我的经验和看法,让你能够透过现象看本质,对架构的认知快速到位。我想说的是,这将会是一个有态度的专栏,而不是架构知识的搬运工。
- 更为重要的是,每讲课程,我会根据不同的架构原则,给你提供很多完整且非常接地气的实际案例。比如说,通过1号店App服务端架构改造的案例,你将会深入地理解系统从单体架构到分布式,再到服务化演变的背后原因;通过1号店订单水平分库的案例,你将会了解大型互联网公司是如何解决单个数据库的性能和容量瓶颈的。这些案例都很典型,不但让你能够理论结合实践,深入理解和运用各种架构原则,而且在很多情况下,你甚至可以直接参考它们,在公司落地类似的架构改造。
这个专栏,它有深度、有细节、实战性强。希望通过这个专栏,能让你对架构形成一个清晰的认知框架,并对各个架构要点形成自己的理解,同时,通过结合着大量实际案例的学习,希望最终你可以把这些知识变成实际的能力。
我是如何规划这个课程的?
首先,我会和你分享架构的本质,让你对架构形成一个体系化的认知。
接下来,我将整体内容划分为业务架构和技术架构两大部分,先理论后案例,带你深入理解每种架构要解决的问题,以及如何解决。
- 业务架构篇:重点针对系统的扩展性和复用性两大目标展开。首先,我会介绍这两大目标的内涵和实现手段,让你明白如何通过业务的拆分和组合,搭建一个柔性可变的系统;然后,每部分都有三个实际案例,让你理解如何以服务化和平台化的方式升级改造系统,最终实现扩展性和复用性的目标。
- 技术架构篇:重点针对系统高可用和高性能/可伸缩的目标展开。首先,我会介绍实现这些目标的策略和架构原则,比如说,高可用的策略有避免事故、降低影响、快速恢复等,高可用的架构原则有无单点、可监控、水平扩展等,这样你可以总体了解,实现这些目标都有哪些手段;然后,每个目标都有3个实际案例,让你理解如何在项目中,灵活应用这些策略和原则。
最后,我还会通过一篇架构总结,汇总架构原则,以及它们的适用场景,并就如何成长为优秀的架构师,为你提供一个可行的方向指导。
写在最后
那么在最后,我想说的是,架构对我们的工作是如此的重要,如果你想深入学习架构,除了有好的学习方法,你一定还要多思考,多交流,多实践。
在课程设计中,我在每一节课后都留了思考题,希望你能够结合每篇文章的知识点,给出自己的思考。
这次当然也不例外,你可以给我留言,说说你对学习架构都有哪些困惑。
另外,你也要大胆地抛出问题,我一定会尽我所能及时给你反馈。很多问题都是共性的,我们一起讨论和解决,成长一定会更快。
书上学来终觉浅,梅花香自苦寒来。好的指导方法加上你自身的努力实践,相信你的架构之路会越走越顺,越走越快。
希望这个专栏,能够帮你开启架构师的进阶之路,在接下来的两个月里,让我们在架构之路上一起成长吧。
我是王庆友,欢迎你把这个课程分享给你的朋友,我们一起学架构。感谢你的阅读,我们第一讲再见。
- 250ZH 👍(6) 💬(1)
成为好的架构师,需要对各种组件掌握到什么程度呢?知晓大概原理还是要清楚比较细节的实现方法。先深度后广度,那深度要多深,广度要多广?
2020-03-16 - 粗线条Jackie 👍(4) 💬(1)
很荣幸能够拜读到王老师多年的经验心得,并有机会与您进行交流。老师的质朴的风格,很有金庸小说中大侠的"重剑无锋,大巧不工"的厚重感,十分期待您的后续新作。 做为一个IT从业超15年的"老兵",从传统企业应用开发一路走来,经过产品研发,项目管理,目前在一家外资背景的new entrant快消零售公司做数字解决方案架构师。平时工作更多是梳理和打磨企业内部应用资源整合,以及摸索微信/电商平台新玩法用于更好的支持市场营销活动,有时也会兼顾一些外部IT供应商的项目管理工作。 老师在课程中提到的"业务架构"和"技术架构"话题,我各有一些疑惑想与您探讨,希望能指点一二: 1. "业务架构"部分:这部分目前是我投放精力比较多的部分,对于空降的项目管理者/企业架构师,需要尽快对企业内部各烟囱式业务系统(含历史Legacy System)有一个全局的了解,但由于一些历史的原因,很多系统的原始资料非常匮乏(有此前供应商要求不严格和部门壁垒等因素),除了借助行政层级施压,可有方法快速破局? 2."技术架构"部分:虽然自己是技术出身,也有过多年行业Top IT厂商和BAT大厂的从业经历,但八年前跳槽甲方后,更多是供应商交付及项目管理,对于行业业务的关注多过技术。对于技术的"保鲜",我目前采取多听取供应商招投标解决方案,以及闲暇时间写一些主流框架的整合POC原型(SpringBoot及Netflix架构体系),但感觉还不是很系统。请教老师,是如何跟进技术的发展趋势,保持个人技术的成长,以及平衡业务与技术比重分配的呢?
2020-02-25 - Geek_zbvt62 👍(0) 💬(1)
您在文章开头提到的,当前众多架构相关的内容,所具有的通病,真是一针见血。 我工作13年,做所谓“架构工作” 4,5年的时间,我的困惑就是觉得自己越来越不懂如何做架构,也不懂什么是架构师了。 首先是,架构师要学那么多知识,学习的边界是什么?哪怕有个模糊的边界。 其次,我们要如何看待架构中的方法论?方法论似乎在软件行业里特别不容易落地,以至于我认识的几个大佬都不太重视。但有不少人处于反面,认为方法论很重要,要贯穿整个研发周期,但当我和他们细聊时发现,他们对此方法论的理解还都不统一,应用起来也不遵守规则。那方法论不就仅仅起到一种团队内规章规范的作用了么? 最后,我一直觉得架构师的工作就是发现问题,解决问题,预防问题。但很多时候我们对需求,对系统压根没法获得一个清晰的认识,这也就发现不了问题。这时除了“套用已有的经验先完成一版简单的设计,之后根据反馈进行演进”这种方法外,还有什么积极些的办法么?
2020-02-22 - Geek_kevin 👍(0) 💬(1)
王老师您好,请问我们这个课程谈的架构和企业架构EA有没有关联? 是否会涉及架构师的角色和定位?对于架构师来讲,会涉及开发团队分工,开发策略,版本管理,架构管理,以及团队IT能力建设相关方面的内容吗?
2020-02-22 - 偏偏 👍(14) 💬(2)
王老师,你好,很高兴能有机会与您交谈,我架构时间不长,最近有一些困惑,刚听了一次您的课,感觉很贴切,有几个问题希望老师能有时间给出点建议。 第一个问题: 是关于DDD与一致性分布式事务结合怎样设计更合理。 第二个问题: 是关于网关的问题,我一般的都是使用自研netty。 a. 对于自定义服务聚合应该如何处理比较恰当. b. 请求鉴权到达什么力度比较合适,如果权限比较复杂,如果使用jwt 在下游服务中该如何设计,有没有更好的方式。 c. 在使用k8s时,网关如何设计才能与与k8s的ingress更好的结合。 d.对于服务发现,如果在k8s中还是否有必要在网关中设计,产品应该如何选取? 第三个问题: 关于监控 日志:一般使用底层ES+K,收集用FileBeat推到Kafka,有没有比filebeat更好的产品选型或收集方式? 监控: 一般需要监控的地方主要分为几大类,除了地址,我用了skywalking,还有预警,一般还需要考虑那些,如果上云平台的k8s,该如何搭配比较好? 第四个问题: 关于多租户SaaS和私有云,如何结合实现比较好,以及数据和升级该如何考量 第五个问题: 关于分库分表,考量范围和如何设计才更合理?
2020-02-21 - 李青 👍(8) 💬(1)
老师我一直不知道什么是软件架构,架构师在软件开发做了什么
2020-02-20 - 唐高为 👍(36) 💬(6)
我刚考过了软考的系统架构师,也学习完了极客时间的《从0开始学架构》,感觉还是挺虚,可能还是缺乏大型系统的设计经验。除了缺乏经验以外,我觉得还有一点也很关键,那就是缺乏对各种架构组件的认识,比如 MongoDB、ElasticSearch、Kafaka、K8s、Hadoop 等等。我觉得要学好架构,除了架构师思维外,还得紧跟前沿技术,了解各种工具的特点,这样才能在设计出更加合适的系统框架。
2020-02-20 - sakyawang 👍(11) 💬(1)
请问老师,架构选型一般要从哪几个方面入手进行整理比对呀
2020-02-19 - 学要有所用 👍(21) 💬(1)
我之前给老师留言过,不过没得到解答,希望老师这次有空解答下,我在极客时间上买过一些课程,而且讲的不错,但碍于自身基础的不足导致学习效果不佳,而这种不限于某种技术又较为艰深对综合能力也提出更高要求的架构,该怎么学习?又该怎么学好呢?希望老师给些建议!
2020-02-19 - cricket1981 👍(5) 💬(1)
中台概念是属于业务架构吗?
2020-02-23 - 冬天的树 👍(4) 💬(1)
老师,我加入目前的公司是以高级研发加入的,但一跃成架构师,跳过了技术专家这一步,然而实际上基础,深度都不扎实,后来又做项目负责人,做的又是政府行业的,所以架构的职责并没有那么重。在这家公司一呆就5年了,导致深度不够,架构实践也不足了,换工作都比较慌。 对于这样情况,有什么建议么?
2021-07-21 - 神经旷野舞者 👍(3) 💬(2)
老师有知识积累的经验吗?比如架构肯定要画流程图,平时怎么积累流程图呢?试了很多,都放弃了,博客也没积累,不知道老师能不能分享下架构师的知识管理和工具
2020-09-06 - 夜空中最亮的星 👍(3) 💬(4)
老师,您是我失散多年的兄弟吧,我叫王庆华,必须订阅一个了。
2020-02-19 - karen 👍(2) 💬(2)
看到老师说会从实际案例来讲解架构,感觉这个点特别好,之前也看过架构的课程,感觉都比较虚,偏理论。有两个问题,想请教下老师。 1、刚开始做项目规划和架构设计,面对一个未知的领域,感觉没有太多想法。从业务那只能拿到商业价值输入,还是感觉无从下手,设计不出来架构和规划。 这块老师有什么建议吗? 2、感觉看待问题的视角有点窄,思路放不太开,这块老师有什么建议吗?
2022-01-05 - 技术修行者 👍(2) 💬(1)
如何体系化的学习实践架构?如何做一名成熟的架构师? 我想了一下,抛砖引玉,欢迎讨论。 1. 要有技术深度,架构师首先应该是一名合格的资深开发,对具体技术要熟练掌握。 2. 要有技术广度,要熟谙各种常见的中间件,对其优缺点心中有数。 3. 要有套路,要熟练掌握各种常见应用类型和行业解决方案的架构设计套路。 4. 眼中有业务,架构师切记不能炫技,脱离业务场景去谈架构是没有意义的。
2020-06-08