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.

98 lines
8.9 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.

# 结束语 | 和你聊聊我的架构心路历程
你好,我是王庆友。
今天是专栏的最后一讲,我和你分享的核心内容马上就要结束了,我是感到既欣慰,又觉得如释重负。
说实话,架构的话题不好写,内容涉及面比较广,既要有理论的高度,又要有实践的细节,才能把这个话题讲得透彻。我看到很多的同学在评论里反馈课程的内容很干,都在反复地吸收和体会,这说明课程的内容对你有价值,相信你也有了很多的收获。在这里,我也很感谢你一直保持着学习的热情。
不知你有没有感觉到,整个专栏的内容既很虚又很实,这里“虚”指的是理论的高度概括,“实”指的是接地气的案例介绍。所以在这里,我想再和你简单地分享一下专栏的写作思路,帮助你更好地理解和使用这个专栏。
## 专栏的写作思路
整个专栏一共有7讲是理论篇这个也是专栏的主体内容框架如下图所示。
![](https://static001.geekbang.org/resource/image/d5/16/d50f83ee90b87ff3cf525f24274f9616.jpg)
* 第1讲“架构的本质”是专栏的总纲通过架构的本质和架构分类体系介绍让你迈进架构认知的大门。
* 然后,针对业务架构和技术架构,分别有一讲内容深入介绍它们的定位,帮助你从源头区分这两种架构,**业务架构聚焦人脑如何理解业务**,针对的是业务性功能;**技术架构聚焦电脑具体如何干活**,针对的是系统性功能,这两者的目标以及处理手段都是不同的。
(补充说明:应用架构更多的是业务架构的具体落地,在专栏中,我把应用架构和业务架构糅合,比如说[第4讲](https://time.geekbang.org/column/article/205832)“电商平台架构是如何演变的”,实际上讲的是应用架构。)
* 最后,针对每种架构的核心目标,也都有一讲内容专门分析每个目标的实质和实现手段。
通过这7讲偏理论性的课程内容我希望帮你建立对架构的体系认知让你能从总体上清楚架构设计要做什么以及如何做。以后当你碰到更多的架构相关内容都可以往这个架构框框里面套进一步丰富和完善这个体系。
除了相对体系化,整个专栏还有一个特点就是**案例丰富**在我刚才说的偏理论的7讲内容当中就有大量的案例片段。此外针对4个核心的架构目标我也分别提供了3个完整的实际案例让你能够从多个角度理解实现架构目标的手段你也可以通过这些案例深入体会架构设计的具体过程。
你可以发现,无论是理论,还是案例部分,我都是用自己的语言来描述,和你分享的是我自己对架构的理解。如果你在架构上有比较多的经验,可以马上领悟到要点;如果一下子消化不了,你也可以多读几遍,相信你每次都会有新的收获。
## 我的架构实践
我在成为架构师的过程中,其实也是自己一路摸索过来的,现在回头再看这个过程,我觉得有些知识和技能,对于架构师的成长非常重要,这里我想和你分享一下,希望能对你有所启发。
* **GoF设计模式和J2EE设计模式**
我对GoF的23个设计模式和J2EE设计模式都作过深入了解**GoF设计模式的粒度比较小**,针对的是类级别的关系定义;**J2EE设计模式的粒度比较大**,针对的是企业级系统设计。
这些设计模式都很经典它们提炼了不同业务场景下的解决方案让你能够很体系地理解问题是什么What怎么解决的How以及为什么要这么做Why。通过学习这些设计模式我培养了良好的抽象设计能力也很好地了解了具体的设计手段。
* **JVM/Java规格说明**
我看过很多遍JVM/Java设计规格说明书通过理解语言的底层机制我对Java的上层特性有了更透彻的了解。比如对于Java的垃圾收集如果你很清楚它的原理和运行机制你就知道如何优化代码以及当系统出现OOM的时候如何去快速定位和解决问题。
* **源代码阅读**
对源代码的阅读也很重要, 我读过很多JDK核心类的源码比如说String、HashMap和Future等等我也深入阅读过一些开源框架比如CXF框架、Hessian通信协议等等。
通过阅读源码,你可以深入了解相应的内容,还可以通过理论结合实际,深入掌握设计技巧。
* **分布式通信**
我从开发一路走过来接触过很多分布式通信协议比如最早的DCOM、RMI、CORBA和Web Service再到后面百花齐放的Hessian、gRPC、Thrift等等至于具体的开发框架我也深入了解过Axis、Dubbo、Spring Cloud等等。对这些技术的优劣点和适用场景的系统了解和学习让我在设计分布式系统时能够选择合理的应用之间的集成方式。
* **数据库和API设计**
数据库设计和接口设计是架构设计中很重要的内容。
我做过大量的数据库设计它代表了系统数据层面的抽象。如果你能合理地定义数据模型那么系统的业务逻辑和性能基本也就确定了。另外我也曾经做过比较完整的Open API平台这些接口设计经验让我掌握了如何通过适度的抽象保证接口的复用。
* **1号店架构设计**
我在1号店承担了很多大项目的设计有些是偏业务的比如针对基础业务的服务化改造有些是偏技术的比如订单水平拆库和灰度发布系统。通过这些架构实践把我很多的架构知识变成了实际的架构能力并且通过方案的整体设计让我可以把原有各个部分的能力整合在一起。
总而言之,你可以看到,我的成长经历虽然没有一个明显的主线,但还是隐隐有迹可循的,大致可以遵循以下过程。
### 打造基础能力
首先,你要对架构设计的各个要点有深入的了解,包括数据结构和算法、设计模式、数据库和服务设计、分布式通信等等。对于这些要点,你不能仅仅停留在使用层面,而是要深入理解它们的内部机制,这样你就打造了扎实的基础能力。
### 建立体系
在了解了各个设计要点的基础上,你需要对架构设计建立体系化的认知,能够从整体上认识架构,清楚架构的设计目标、设计过程和设计手段。你之前是从各个局部来考虑问题,现在要变为从整体的角度来考虑问题。在架构设计上,我们宁可要精确的模糊,也不要模糊的精确。
### 纳入体系
有了整体的认知体系以后,你就有了存放架构内容的框架。然后,你可以从**广度和深度**两个方面,来不断丰富和完善你对架构的认知。
### 实践运用
最后,通过大量的实践,你就可以把原先储备的架构知识,以及各项基础能力有效地串接起来,最终打造完整的架构能力。
架构师的能力,既涉及到业务和技术,又涵盖了它们的广度和深度。在成为架构师的过程中,你可以积累各项能力,把以往的知识和经验串起来,这其实就相当于一个银行,你可以不断地储蓄,然后进行整体输出,这是一个很好的个人成长和发挥价值的途径。
## 写在最后
最后,我想说的是,这是技术最好的时代,我们有很好的技术可以选择,有很开放的技术分享氛围,有很好的技术回报。但这也是技术最差的时代,技术太多,变化太快,我们还需要不断地学习。
想要成为信息时代的弄潮儿,除了努力,你还需要有方向,我希望这个架构专栏,可以成为你学习架构的指路明灯,帮助你更好地成长。
好了,这就是我作为一个架构老兵,想和你分享的经历和思考。专栏的正文更新到这里就要告一段落,但是更新的结束并不意味着我们之间就要切断联系,之后呢,我还会针对整个专栏的内容,给你一套系统性的结课测试题,让你可以检测一下自己的学习成果。并且,我还会继续回复你的留言,如果你对于架构有新的问题和思考,也欢迎继续和我一起交流。
在本讲的结尾,我还为你准备了一份毕业问卷,题目不多,希望你能抽出几分钟时间填写一下,我非常希望听听你对这个课程的意见和建议,欢迎你在问卷中畅所欲言,期待你的反馈!
[![](https://static001.geekbang.org/resource/image/e4/1b/e4db89b21afe1d2e62e7e515e96f771b.jpg)](https://jinshuju.net/f/pYpw4i)
我是王庆友,感谢你一直以来的学习和坚持,也感谢你的留言和反馈,相信对你对我,这都是一段非常有意义的成长经历,让我们一起享受架构学习的乐趣吧,我们江湖再见!