1.3 架构师的12项必备技能
每个开发人员都具有成为架构师的先天优势,因为开发人员每天都在编写各种各样的功能代码,接触各种各样的场景,阅读各种各样的文档,使用各种各样的数据库,研究各种各样的中间件。区别在于是否有人能够用心观察和总结,将这些琐碎的经验融会贯通。将不同的场景组合在一起、设计清楚、讲解明白就是架构师所要做的工作。
图1-2所示为架构师的12项必备技能。
图1-2 架构师的12项必备技能
(1)深入掌握一门面向对象的编程语言。越精通越好,对底层越了解越好。架构师的重要工作是进行抽象,而面向对象的编程语言是将现实世界抽象为具体的对象。这是进行领域划分、领域识别的重要手段,而结构化语言很难培养这种思维。
(2)熟练掌握各种设计模式。常用的设计模式共有23种,这些设计模式是程序开发人员经过长时间的试错和总结而得来的,也是在开发过程中面临各种常见问题的解决方案。掌握设计模式可以给自己带来很多的设计灵感和思路,能够更加合理地解决各种问题。
(3)熟练掌握一种关系型数据库。关系型数据库因为其良好的结构性、事务性特征,到目前为止依然是所有系统的核心存储结构,要会画ER图(实体关系图),能够分析出表的结构和它们之间的关系。数据库设计的合理性,直接决定了功能实现的合理性,以及开发的难易程度。
(4)能够熟练绘制各种UML图。UML(Unified Modeling Language,统一建模语言)是架构师进行系统设计的重要工具,包含用例图、类图、对象图、活动图、状态图、时序图、组件图、配置图等。使用UML图可以将头脑中的东西清晰地表示出来,能够用于自己的思路整理,也可以让别人清晰地了解自己的设计意图。
(5)至少掌握一种缓存型数据库。缓存是应对高并发、提高系统响应速度的重要手段,因此至少对一种缓存数据库具有深入研究,推荐对目前比较主流的Redis数据库进行学习。
(6)至少掌握一种文档型数据库。文档型数据库具有海量数据存储和查询能力,在互联网领域的系统中有较多的应用场景,推荐对MongoDB数据库进行深入学习。
(7)至少掌握一种消息中间件。消息中间件是在系统架构中经常使用的解耦方式,提高系统的吞吐量,无论是RabbitMQ、RocketMQ、Kafka还是ActiveMQ,它们的原理基本都是相同的,都是基于生产者和消费者模式,选择其中一种进行学习即可。
(8)对于线程池、连接池、对象池有深入的理解和掌握。池化处理能够有效地提高程序性功能,是系统设计中采用较多的一种手段,也可以将其理解为一种应用内存缓存设计。
(9)对于各种数据结构和算法具有较为全面的掌握。程序的实现最终要将数据存储在某种数据结构中,再以特定的算法进行处理。对于一些核心的功能,数据结构和算法的选择往往至关重要。
(10)对于并发编程具有深入的理解。并发编程是提高程序并发能力,充分利用多CPU服务器的手段,因此对于并发编程的要求也越来越高。
(11)掌握一种容器化技术。Docker和K8s是当下的主流,无论是对于大型的微服务分布式架构,还是日常的工作和学习,都可以极大地提高效率。
(12)熟悉Linux服务器的使用。应用程序大多数部署在Linux环境下运行,不是专业的服务器运维人员,不要求十分精通,但是对于常用命令、安装软件、编写简单的Shell脚本掌握得越多越好,越深入越好。
当然,以上列举的依然不够,不同的领域还有很多知识需要学习,如云计算、大数据、数据挖掘、物联网、人工智能等,各个领域都有各自重要的知识体系。架构师本身就是一个软硬技能的结合体,对于技术的掌握不仅要全面,而且要更加深入。往往底层的核心架构,重大问题攻关也是需要架构师来解决的。根据自己的行业特点,有策略、有选择性地学习,寻找自己的技术短板并不断补齐,是一种更加高效的学习策略。