架构师的主要职责
技术进阶之路
上图是一个完整的技术进阶之路,今天我们重点是谈架构师,我先从架构师进阶之路谈起,然后我们一步步往里讲,完整的剖析架构师能力模型。
架构师进阶之路
1 架构师胚胎(程序员)
工作年限1-3年左右,掌握程序相关的基础知识:语言编程开发、基本的数据结构、基本的算法掌握、对熟练使用常用的语言开发环境:java、c#、c++、go、groovy、php、python等相关的开发环境、基本的数据库知识(还到不了性能调优)、基础的设计模式(eg:工厂模式等 )、常用的通讯协议等。
2、架构师萌芽(高级程序员)
工作年限一般3-5年,如果你做研发超过了5年还是处于重复搬砖的节奏,还没有考虑代码效率以及避免重复造轮的情况,还不能算到高级。
这个阶段需要掌握的知识,比如:掌握更多的设计模式、操作系统原理、分布式系统原理、常见的性能调优方案:数据库端(事务超时、索引如何优化、高效sql等)、应用端、web端(静态分离怎么做)等、高并发基础场景..
3、架构师幼苗
工作超过5年,身经百战的同时,至少必须参与个一个次大型项目,你还不能完全操盘一个大项目的架构设计,但至少对整个架构设计整体有一定的了解,比如:单点登录、分布式缓存的场景、异步消息场景…典型的基础架构设计怎么实现。以及从理论的角度,透彻领会应用设计模式、JVM的原理、listener、filter等为什么要这样设计…了解技术的核心原理。
4、架构师
如果你经历了上述3个步骤阶段的项目操练,如果在这个阶段,你能独自带队操盘一个中型、大型项目的架构设计,并且从架构设计的角度:效率、可维护性、可扩展、容错…能胜任这个项目并且成功上线,这是一个标志性的架构师节点,独立胜任中、大型项目架构设计操盘手。
架构师再往上进阶,就会涉及到上图提到的技术总监以及CTO,如果有兴趣的同学可以参考我之前写的这篇文章一篇文章搞懂高级程序员、架构师、技术经理、技术总监、CTO,从薪资到技能要领的区别
备注:架构师并不只是技术进阶的终点,还可以继续往技术总监和CTO进阶。
架构师完整能力模型
架构师的职责应该是立足于技术和业务之间的中间角色或者平衡点, 在针对业务深刻理解的基础上,针对业务中存在诸多变数,挑选适合的技术架构和技术方案。
年薪百万的架构师,基本属于公司的首席架构师,需要包含两块能力,而不仅仅只是技术能力。
这两块能力分别包含:技术能力和业务能力。
架构师技术能力
分层的应用设计思想:SOA,事件驱动等。
分布式原理:CAP,最终一致性,幂等操作等
大型网络应用结构
消息中间件,分布式缓存,负载均衡,集群技术,数据同步等。
还有高可用,可容灾分布式系统设计能力
容灾系统,作为为计算机信息系统提供的一个能应付各种灾难的环境,尤其是计算机病毒、掉电、网络/通信失败、硬件/软件错误和人为操作错误等人为灾难时,容灾系统将保证用户数据的安全性(数据容灾),甚至,一个更加完善的容灾系统,还能提供不间断的应用服务(应用容灾)。可以说,容灾系统是数据存储备份的最高层次。
例如,淘宝在早期就遇到过机房停电的情况,所以才促使了后来的机房容灾的能力,保证服务稳定。尤其是当发生灾难性事件并对IDC节点产生影响时,能够具备节点级别的快速恢复能力,保障系统的持续可用。
去年携程也遇见了一次几乎一整天的宕机事故,后来发现是自动化部署的的脚本的问题,代码重新部署,重新执行脚本,不断把数据等等都删除,这也算是人为事故中的经典案例。
还有大容量数据存储和检索系统设计能力、数据库分区,NoSQL,搜索引擎、自动化部署、回滚机制等,以及监控系统等等,这些知识体系,敬请关注我后续的文章和课程。
架构师业务能力
技术架构的目的是为了服务好业务,技术离开了业务,就是空谈。所以,对于好的架构师来讲,需要对业务有本质的理解,技术再牛逼,解决不了业务的问题也是没用的。所以一定要站在业务的角度去了解他们的需求,它到底是要并发高还是流量高,还是要分布式,还是要高可用。
这就是业务分析能力
架构师需要学会基于自己的经验知识进行分析,把业务语言转换成产品语言、开发语言。这样在跟产品、研发团队的沟通中,才能完成信息的有效、高保真传递。当然,这就涉及到沟通能力,因为团队协作需要良好的沟通。
开启你的架构进阶之旅
总之,要想成为优秀的架构师,需要时间实践(提升技术能力),也需要不断的深入业务分析(提升业务能力),再加上自己的领悟能力(需要时间阅历),这才是一个有效的路径。
进阶成为架构师是大多数java程序员们的梦想,架构师从广义上可分为软件架构师、系统架构师,软件架构师是程序员最容易突破、最可能进阶的一条职业发展路径,我这次主要分享软件架构师的相关知识点。
一:架构师的定义
架构师,是一个既需要掌控整体又要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物,他需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。
架构师应该是立足于技术和业务之间的中间角色或者平衡点, 在针对业务深刻理解的基础上,针对业务中存在诸多变数,挑选适合的技术架构和技术方案。
二:架构师的主要职责
1、确认需求与拆分系统
在项目开发过程中,架构师需要依据用户需求,将完整的系统拆分为子系统和组件,形成不同的逻辑层或服务,确定各层的接口、层与层相互之间的关系,对整个系统分层进行“纵向”分解,对同一逻辑层分块进行“横向”分解。
2、技术选型
通过对系统的一系列的分解,最终形成了软件的整体架构,依据整体架构需要进行技术选型。
例如:天猫这样的大型分布式网站,需要从前端(CDN、负载均衡),再到中间应用层端的缓存集群、消息集群、文件存储集群等的选型,再到后端数据库(NoSQL、MySQL、Oracle等)的选型,你需要很清楚每一种技术的优劣势和应用场景,以及未来面临的挑战和风险。然后从业务的角度(预估访问量和业务变化),结合起来进行选型。
3、系统分解
系统分解类似实际项目中的概要设计、详细设计,业务逻辑划分、子系统与主系统的关联、数据库的设计,再到应用端业务流程等,从技术的角度完整的拆解业务,把控好技术的细节。
4、制作技术规格说明
在整个研发过程中始终保持与开发人员保持沟通,以保证开发者依照原定的架构意图去实现各项功能。
三:架构师的综合能力
程序员从初级、中级、高级再到架构师,是一个不断经验积累的过程,除了技术实力以外,其它软实力也不容忽视。
备注:图表仅为抽样数据,仅供参考
我们来细说下排名前三的架构师必备能力:设计能力、技术能力、沟通能力。
1、 设计能力
架构是架构师洞察内在结构、原则、规律与逻辑的过程,架构师要做到清晰理解系统、简洁描述,除此之外,一个架构师还必须具备极强的分析能力,要做到根据产品宗旨和目标,分析清楚产品定位、产品业务,再整合利用现有的技术领域,找出最佳方案,实现产品概念。
架构设计能力,具体可以参考:一篇文章搞懂架构师的核心技能
2、 技术能力
众所周知,架构师是团队中的技术权威,需要同时具备技术的深度和广度,至少精通多门技术,且技术广度的要求高于技术深度的要求,这样才能更加深入的理解架构相关工作原理,也可以拉近和技术团队的距离,并形成影响力。
具体可以参考:想成为阿里160万年薪的P8架构师?你必须掌握如下技能体系!
3、 沟通能力
架构师参与项目开发的全过程,包括确认需求、系统分解、架构设计、技术选型、制定技术规格说明、系统实现、集成测试和部署各阶段,与相关部门、技术团队关于各个环节的工作沟通在所难免,这就决定了架构师需要具备较强的沟通能力。
架构师成长三步曲
在国内架构师需要多年的实战经验和个人修炼,一名优秀的架构师,离不开个人的努力和公司的机遇,挑战和机遇并存。
首先,架构师大部分人的成长都是伴随公司的发展需要从而演变而来,需要大量时间的实践以及不断的经验积累。
结合企业架构师的需求,以及我个人的架构实际经验,我把架构师的成长分为如下必经之路:
1 架构师胚胎(Java程序员)
工作年限1-3年左右,掌握程序相关的基础知识:语言编程开发、基本的数据结构与算法掌握、基本的计算机网络、Java集合等已经掌握、数据库知识(还到不了性能优化)等。
2、架构师萌芽(Java高级程序员)
工作年限一般3-5年,如果你做研发超过了5年还是处于重复搬砖的节奏,还没有考虑代码效率以及避免重复造轮的情况,还不能算到高级。
这个阶段需要掌握的知识,比如:Linux操作系统原理、分布式系统原理、常见的性能优化方案:数据库端(事务超时、索引如何优化、高效sql等)、应用端、web端(静态分离怎么做)等、高并发基础场景..
3、架构师幼苗
工作超过5年,身经百战的同时,我的标准是必须参与过至少一次中、大型项目,这个阶段你还不能完全操盘一个大项目的架构设计,但至少对整个架构设计整体有一定的了解,比如:分布式缓存、分布式Session、负载均衡、分布式全局唯一ID、分布式事务的场景、异步场景…等的架构设计怎么实现已经掌握了。
以及开始逐步深入技术的原理,更透彻的掌握JVM、RPC、消息中间件等为什么要这样设计…有一定的洞察力,有兴趣深入去了解技术的核心原理。
4、架构师
如果你经历了上述3个步骤阶段的项目操练,如果在这个阶段,你能独自带队操盘一个中型、大型项目的架构设计,并且从架构设计的角度:效率、可维护性、可扩展、容错…能胜任这个项目并且成功上线,这是一个标志性的架构师节点,独立胜任中、大型项目架构设计操盘手。
架构师是很多技术人的职业目标,好的架构师来源于机遇(公司)、个人努力(吃得苦、肯专研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师
架构师必备技术能力有哪些
什么是架构师
架构师,是一个既需要掌控整体又要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物,他需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。
架构师应该是立足于技术和业务之间的中间角色或者平衡点, 在针对业务深刻理解的基础上,针对业务中存在诸多变数,挑选适合的技术架构和技术方案。
架构师的岗位职责
架构师职责简单来说有4点:
1、确认需求与拆分系统
在项目开发过程中,架构师需要依据用户需求,将完整的系统拆分为子系统和组件,形成不同的逻辑层或服务,确定各层的接口、层与层相互之间的关系,对整个系统分层进行“纵向”分解,对同一逻辑层分块进行“横向”分解。
2、技术选型
通过对系统的一系列的分解,最终形成了软件的整体架构,依据整体架构需要进行技术选型。
3、制作技术规格说明
在整个研发过程中始终保持与开发人员保持沟通,以保证开发者依照原定的架构意图去实现各项功能。
4、系统分解
系统分解类似实际项目中的概要设计、详细设计,业务逻辑划分、子系统与主系统的关联、数据库的设计,再到应用端业务流程等,从技术的角度完整的拆解业务,把控好技术的细节。
架构师必备技术能力
精通数据库 &性能优化
最全MySQL锁详解:表/行/页锁、共享/排它锁、悲观/乐观锁等
精通数据库性能优化
精通分布式系统架构
分布式一致性协议实现原理:CAP、Paxos、Raft、Zab等
除此之外还有分布式缓存Redis、RPC通信Dubbo、消息中间件…等等