什么是互联网架构师?必备的技能有哪些?
到底什么是互联网架构师?它有什么用呢?那么怎么才能成为互联网架构师呢?它需要具备哪些技能呢?下面我们就一起来聊一聊!
01
下面我将分成两个部分分享一下我对互联网架构师的理解。
一、什么是架构师?
要了解什么是互联网架构师,首先我们需要了解什么是架构师。架构师顾名思义就是搭建软件架构的工程师,负责“产品”宏观的架构设计。可能有人会问,那架构是什么呢?
具体到软件架构,维基百科是这样定义的:“有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计”。系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能的设计与决策,他们相互关系组成一个整体,共同构成了软件系统的架构。而架构师就要对软件的各个组成部分及关系进行设计。
除了架构设计以外,架构师还需要承担一些管理职责,来保证设计的架构能够正常的实施,同时按计划完成。比如架构师需要规划产品路线、估算人力资源和时间资源、安排人员职责分工、确定计划里程碑点、指导工程师工作、过程风险评估和控制等工作的参与或直接负责。
工作这么多吗?看起来有点吓人,但其实总的来说,就是能够根据现有的需求,包括功能性需求和非功能新需求,设计出合理的架构与标准,和开发人员沟通,保证他们能够按照标准基于架构进行开发,完成需求。
二、什么是互联网架构师?
互联网架构师其实就是一种特定的架构师,是设计与搭建互联网平台的架构师,当今互联网有几大特点,分别是高并发,大数据量。所以在设计系统的时候就需要比设计其他一般的业务系统,要考虑更多这一方面的非功能性需求。要保证系统在这种情况下还能提供正常的功能需求。
现在我们已经了解了什么是互联网架构师了,但可能还是不清楚它需要具备哪些技能,那就让我们研究一下“互联网架构师所需技能”!
02
了解了什么是互联网架构师之后,要知道互联网架构师所需知识技能,我们需要具体看看这个职业要做什么,再进一步推出互联网架构师所需的技能,下面我将分成两个部分说明:互联网架构师具体要做些什么?互联网架构师所需技能?
一、互联网架构师具体要做什么
其实互联网架构师要做的工作,和架构师差不多,只是面向的行业有所要求,我们可以先从架构师的定义出发,来思考架构师的职责是什么。架构师的定义可以抽象为“根据需求设计架构,通过管理实现架构,以此完成需求”。可以发现,架构师要做到设计架构,同时要进行项目管理。可是具体有哪些呢?
整理如下:
1、架构设计
1)分析需求:包括功能性需求,以及非功能性需求,对于互联网架构师来说,可能更多的要考虑非功能性需求,如高可用,可扩展等,要保障系统的性能需求。
2)架构设计及技术选型:要从需求出发,设计出合理的架构,同时还要对架构中所使用的组件进行一个技术选型,根据需求场景,选出一个最合适的来使用。
3)攻克技术难点:很多时候设计出的架构总会有一些比较难的难点,这个时候就需要知识渊博的架构师出动来解决。
2、项目管理
1)项目管理:保障项目能按照架构设计实现需求。这里面可能会需要自己写一个规范提供给大家参考,保证开发遵循架构规范;可能会使用一些方法论,如敏捷开发,指导项目的开发;也可能使用一些项目管理工具,帮助进行高效管理。方法有很多种,牢记自己的目的,再选择合适的方法。
2)人员管理:提供给技术人员技术支持,同时把需求拆分合理,根据不同人不同情况,分给合适的人进行开发。
二、他们需要哪些知识技能
1、技术的深度和广度
要做到对架构设计,必须要对各个技术都要有足够深的了解, 清楚每个技术能解决什么样的问题,如何把这些技术组合,怎样的架构能起到什么样的效果。这样才能够根据不同的业务场景设计出最适合的架构
2、业务理解分析能力
架构的设计必须是基于现有的需求来设计的,要不然就是为了技术而技术,必须要对业务进行充分的理解以及分析,为了解决这些问题,而设计出的架构,才是真正的架构,要是不能解决问题,业务和用户凭什么用这个架构搭出来的产品呢?
3、良好的沟通能力
要做到对项目的管理,可能我们有很多的工具,但即使有工具,也是建立在一个良好的沟通上面的。不论是你在跟技术人员下发需求,还是在指导技术的时候,一个良好的沟通都能帮你降低大量的时间成本以及精力。万一沟通有问题,开发错了,到时候加班测试支持就惨了。
如今我们也已经知道互联网架构师所需知识技能了,但是我们如何成为拥有这些技能呢,大家可能会想自己动手列个学习计划,可能不知道如何去划分知识,这里我们也给大家分享了一下我们的学习模块(我们的学习分享会按照这个分享给大家),给大家一个参考,请看下面,“我们划分的学习模块介绍”。
03
根据上面所指出的技能要求,对每个技能要求,我们列出了我们选择的学习模块,并对其进行详细介绍。以后会按照这些学习模块给大家系统分享,希望大家能有所收获。
下面我将分成两个部分给大家介绍本文:技能所需学习模块;学习模块介绍。
一、技能所需学习模块
1、技术的深度和广度
包括编程语言,代码设计,架构设计,运维知识,以及架构设计当中每个组成部分相应的技术以及优化方案。我选出了以下几点:
1)java基础及核心知识
2)spring源码知识
3)代码及架构设计
4)高并发、大数据量处理及存储实战
5)linux,shell脚本编写及运维实战
6)新兴技术学习
2、业务的理解
自己做的项目一定要把需求理清楚,同时也要了解需求提出的时代背景,这样更有助于理解需求提出的意义,为什么要提这份需求,当自己经历了足够多的项目的时候,就需要对自己行业有足够的见解。需要自己多做项目多实践,同时关注行业动态,要有自己的见解,可以总结为以下几点:
1)互联网相关项目实战
2)互联网相关APP使用及分析:需要大家自己平时积累
3、良好的沟通能力
沟通能力是需要通过不断的练习的,如果可以的话,我都想建议大家去练练演讲,但我说这个的话好像和我们要学的架构师有些脱节。但最好的沟通,就是在项目实战中进行,通过实战去练习沟通,通过沟通完成实战。
1)团队项目实战
2)平时锻炼表达:推荐多和别人表达并听取别人的想法。
二、学习模块介绍
1、java基础及核心知识
目前市面上语言有很多种,我认为语言没有好坏之分,只是在不同场景下,优劣不同。java在高并发,跨平台,网络处理当中都有非常强大的支持,也是目前大型互联网服务端应用最常用的开发语言。这里我们会从基础开始,给大家分享相关知识。
2、spring源码知识
spring是一个非常好的容器框架,应用非常广泛,从最早的ssh到现在的ssm,它都占据着重要角色,甚至可以说是开发web应用的标配,它的底层实现是IOC以及AOP,非常的经典,学习它不但有助于我们代码的设计与编写,同时也在架构设计上有很好的启发作用。
3、代码及架构设计
非常重要的部分,这也是区分码农和架构师的重要依据。这部分我们主要会介绍一下设计模式,代码规范,重构,设计思路,分布式服务,微服务,以及如何采用当前流行的DDD分析设计思路设计架构,以TDD指导开发,完成一个系统的设计。
4、高并发、大数据量处理及存储实战
由于互联网行业,高并发,大数据量的特性,所以我们非常需要补充相关知识,特别是一些常用技术的学习以及使用,例如redis,rabbitmq,kafaka,elk,zookeeper,netty,dubbo等。同时我们需要实战,去解决问题,才能够真正知道如何去应对这种需求。这里会介绍这些技术的学习以及一些实战相关知识。
5、linux,shell脚本编写及运维实战
不是说架构师开发完了项目,工作就结束了,我们还需要在系统出现问题的时候,快速响应,解决问题,所以就需要对运维知识有比较深的了解。这里以运维最常见的linux,shell为例,为大家进行分享。
6、项目实战
很多时候学习再多,不如动手实际做个项目,做完后总结学习,这样吸收转换的知识更多。