架构师是大忽悠吗?阿里技术大牛告诉你真相!

来源:阿里云

作者:林昊(花名毕玄),阿里巴巴技术保障部研究员,曾任淘宝网平台架构部架构师。个人的研究方向主要为Java模块化、动态化系统的构建,以及高性能大型分布式Java系统构建,主导阿里数据中心异地多活项目建设。

 

架构师,这个title就和总监之类的title一样,已经彻底被用烂了。但在一个软件产品的生命周期中,架构师是实实在在的一个极度重要的角色。架构师非常重要的职责是编写整个系统中核心部分的代码。这个部分并不一定是技术挑战最高的,但对整个系统的质量甚至成败起到非常关键的控制作用。架构师必须是从写核心代码的人中诞生而来。毕玄的这篇文章就是主要讲他理解的架构师到底应该具备什么素质。

 



业务理解和抽象能力


架构师的第一职责是理解业务,并转换为可被研发理解的实现方案,因此业务理解能力是架构师的必备技能。通常来说一个资深的业务架构师,对业务会有非常深的认识和积累。一个极好的业务架构师应该能大概预判业务未来的发展趋势,以便在系统的可扩展性上留好一定的空间。所以也会很自然的出现有些业务架构师做着做着就干脆转为PD类型的角色。
 
抽象能力是通过对业务的理解转换为系统实现的模型,这显然也是重要的能力。抽象很多时候也承担了分解清楚多个团队的职责,分工清晰化。

NB的代码能力


之所以现在很多的架构师都会被认为是大忽悠,就是有一堆顶着架构师头衔,又不干活的人(甚至会出现对技术几乎不太懂的人),光说不干,再加上说的不靠谱的话,自然很容易被认为是大忽悠。
 
我一直认为架构师有个非常重要的职责是编写整个系统中核心部分的代码。这个部分并不一定是技术挑战最高的,但对整个系统的质量甚至成败起到非常关键的控制作用。

所以架构师必须是从写核心代码的人中诞生而来。在一个跨多领域的大型系统中,架构师不太可能什么都擅长,不可能写各个部分的核心代码,这种时候架构师一定要知道怎么判断非自己知识领域的部分实现是否OK,以确保各部分组合在一起的时候是符合架构设计预期的,通常这种确保各部分组织在一起work的机制部分的代码应该由架构师自己操刀。
 
最关键素质:全面

 
全面是一个架构师展现出来的最关键素质,全面体现为以下三点:

 

一、在面对业务问题上,架构师脑海里是否会浮现出多种技术方案:

 

这点其实挺重要的。否则可能就会出现明明有一个简单成熟的方案,但由于不知道而做了其他复杂不成熟的方案,所以广阔的技术视野是架构师的必备

 

另外架构师不可能全部擅长,在自己不擅长的点上,需要知道找哪个专业的人是靠谱的,这点也非常重要。

二、在做系统设计时是否考虑到了足够多的方方面面:

 

例如很多系统设计容易遗漏上线环节的细节,导致在上线时发现漏掉了什么考虑,临时解决或只能重来。

 

记得有一年我做的一个设计没有考虑到上线阶段的一个细节,导致上线的时候发现由于网段的问题完全不work,并且没有临时解决方案,只好重来。

 

系统设计不仅仅指导研发同学怎么写代码,也包括指导其他所有相关技术同学的工作。

 

又例如我2008年在做服务框架设计的时候,集群和集群之间通过硬件负载均衡设备来访问的,连接的方式是单个长连接,这个设计导致了运行过程中如果要发布被调用的服务方,很容易出现压力都集中在前面重启的机器上,这也是典型的整个链路没有考虑清楚造成的设计问题。

 

再例如2013年我在做一个比较大范围的系统改造的设计时,由于对其中一部分的软件了解得不够,判断错误,导致后来这个改造在进行过程中才发现有些需要改造的关键软件设计做得太粗糙,最后上线进度差不多推迟了一个多月,而且那些后来补的设计都是紧急做的,风险非常高。

 

回顾自己设计过的软件,发现在这个点上犯的错可以讲好几天,看来我应该整理另外一篇文档《我在系统设计上犯过的xxx个错误》,里面有些其实靠一份好的系统设计模板也许就能避免掉。一份好的系统设计模板是可以帮助架构师思考全面些的。

 

三、在做系统设计时是否考虑到了未来的一些发展?

尽可能不要出现未来的一点变化就导致现在白干或要花大量力气来改造的现象
 
想当年做服务框架的时候,后来就发现由于当年做设计的时候没有考虑到将来服务调用trace的问题,导致了后来为了弥补这点花了巨大的力气(不是技术上,而是实施上)。
 
全面需要架构师有足够广的技术领域知识和足够多的经验积累,从全面这点就可以看到架构师的工作绝不是画几个框,连几根线那么简单。
 
对架构师“全面”这点的挑战,会随着系统的范围越大(一个系统的设计,和100个系统组成的大系统的设计挑战是完全不同的)而变得越难,无论是知识的广度、考虑的点的覆盖度、还是未来趋势,更复杂的情况甚至会出现架构的调整对应着组织结构的调整,这种也要考虑到,例如服务化这种大的架构改造,就意味着专职的专业领域服务团队的成立。
 
全局    

全局观通常是指在系统设计时是否考虑到了对上下游的系统的影响。

毕竟通常所设计的系统不是一个孤立的系统,如果没有足够好的全局观,有可能会导致自己的系统做完上线,其他上下游系统(尤其有些连上下游是谁,怎么用都不知道的情况下)出现问题。这种案例同样不少。
 
权衡    

权衡同样也是架构师极度重要的能力。或者也可以认为是决策能力,技术方案的拍板是一个架构师最重要的职责。
 
上面说的“全面”是架构师在思考时“放”的过程,而权衡就是“收”的过程。收的过程结束基本就意味着技术方案的确定,同时也确定了节奏。

权衡在两点上会体现得特别突出:

 

一、技术方案决策原则: 

通常一个问题都会有多种可解决的技术方案。怎么来决策就至关重要了,而决策通常又和全面相关。大的来说通常决策的原则就是性价比和可持续发展。

 

  • 性价比简单来说是方案的实现成本,这个成本要包括非常多的方面。例如有些场景可能会是用硬件解决看起来是花钱,但最终折算成本是最划算的,很多系统设计在决策性价比时都过于随意,例如一个另外常见的场景就是建设一套新系统替代旧系统,这个时候可能完全没考虑旧系统的迁移代价甚至超过了改造旧系统的代价。
     

  • 可持续发展简单来说就是所选择的技术方案在公司是否可持续。例如简单的案例是公司主体的研发人员都是php,却搞一个其他语言,且只有极少人懂的。

    当然,这还是要看性价比,如果搞一个其他语言带来的效益超过了语言/人才体系的更换成本。又例如引入一个开源产品,有无专业团队维护这都是要考虑的关键因素。

 

二、优先级和节奏控制:

经常我会问做系统设计的同学一个问题:对于这个业务场景而言,在系统设计上最需要把握的一个点是什么。

这是一个关键问题,全面意味着考虑到了很多地方的问题,但通常业务需求实现都是有很强的时间要求的,因此在这个时候必须考虑清楚不同点的优先级,

同时也包括技术方案在决策时也要做出取舍,有可能选了一个不是那么好的技术方案,但通过留下一些可改造的空间,为以后的重构做好铺垫,那就是很不错的,尤其技术同学有些时候比较容易陷入解决技术问题的场景去,但那个问题其实有可能不是现阶段最重要的。
 
优先级和节奏控制是我认为一个最NB的架构师的最佳体现,优先级意味着把握住了重点,可以确保在所设计的架构指导下业务实现不会出现大问题,节奏控制则意味着全面,知道随着业务发展该在什么时间点做什么事,为将来做好铺垫。

转载于:https://www.cnblogs.com/zhjh256/p/6444535.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手动脑-Java重载

有以下例子: 例: Using overloaded methods public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " square(7)); System.out.println("\nThe square of double 7.…

利用django框架,手把手教你搭建数据可视化系统(一)

如何使用django去构建数据可视化的 web,可视化的结果可以呈现在web上。 使用django的MTV模型搭建网站 基础铺垫—MTV模型 Created with Raphal 2.1.0Request服务器(Djangoweb)Response首先,要搞清楚我们去访问服务器,服务器返回信…

智能音箱 之 扬声器喇叭介绍

在全双工语音交互的系统中,功放的质量是非常重要的,因为AEC回声消除对信号失真 是非常敏感的。音频通路的整体谐波失真需要控制在5%以内。 对于整个系统的谐波失真来说,扬声器是最关键的因素,其次是功放,麦克风的很小…

关于拓扑排序的问题-P3116 [USACO15JAN]会议时间Meeting Time

https://www.luogu.org/problem/show?pid3116 这道题目很水啊,但是我没有1A,而且wa了好多; 题目意思我就不讲了; 反正就是一个拓扑序dp; 但是这道题目规定了起点是1; 所以我一开始直接把1放进队列里然…

HD-SDI DVR发展与应用剖析

自2010年以来,视频监控已经进入“高清”监控时代;随着高清的发展,HD-SDI高清数字系统开始进入人们的视线,在大、小展会上均可以轻松找到“数字高清”的产品和解决方案。作为HD-SDI系统中编码、存储部分的HD-SDI高清数字硬盘录像机…

UML学习——类图(三)

1.类图 UML类图是用来描述类、接口、协作及它们之间的关系的图。用来显示系统中各个类的静态结构。 2.类图的组成元素 类图由以下六种元素组成:类,接口,泛化关系,关联关系,依赖关系,实现关系。 3.类图的绘制…

传锤子科技解散成都分公司 才搬迁一年罗永浩就顶不住了

雷帝网 乐天 10月16日报道今日有网友爆料,锤子科技解散成都分公司。有网友指出,爆料的人是锤子科技早期员工王前闯。网友爆料锤子成都研发中心解散网友爆料锤子成都研发中心解散2016年,锤子科技亏损4亿元,一直徘徊在破产的边缘&am…

智能音箱 之 功放与扬声器(喇叭)的匹配关系

1. 功放的概念   功率放大器简称功放,俗称 “扩音机”,是音响系统中最基本的设备,它的任务是把来自信号源(专业音响系统中则是来自调音台)的微弱电信号进行放大以驱动扬声器发出声音。 2. 功放的分类 功率放大器分…

前端性能优化 Web前端应该从哪些方面来优化网站?

作者:斯迪链接:https://www.zhihu.com/question/21658448/answer/18903129来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前端是庞大的,包括 HTML、 CSS、 Javascript、Image 、Flash…

嵌入式NVR发展浅析

随着视频监控的高速发展,视频监控对硬盘录像机的要求也在不断提高,在以往“看得见”的基础上,要求视频画面看的更为清晰、准确。相对于传统硬盘录像机,NVR最主要的特征就是“网络化”、“高清化”,在视频监控“高清化”…

Maven and Nexus2

2019独角兽企业重金招聘Python工程师标准>>> Maven and Nexus2 Maven是什么? 构建工具: 通过简单的命令,能够完成清理、编译、测试、打包、部署等一系列过程。同时,不得不提的是,Maven是跨平台的&#xff0…

Linux kernel的中断子系统之(九):tasklet

返回目录:《ARM-Linux中断系统》。 总结: 二介绍了tasklet存在的意义。 三介绍了通过tasklet_struct来抽想一个tasklet,每个CPU维护一个tasklet链表tasklet_vec/tasklet_hi_vec,然后介绍了如何定一个一个tasklet(静态/动态)&#…

市面主要远场语音交互技术架构

为什么Google Home要采用双麦方案,而且大部分智能音箱才用环形六麦?事实上,这是由各家不同的技术架构决定的,当前市面上主要存在三种远场语音交互技术架构。 1、以Google为代表的纯云端技术架构 首先就是以Google为代表的纯云端技…

iOSPush自动隐藏tabbar

只需要在UITabBarController添加控制器的时候调用YZNav初始化,就可以实现tabbar的自动隐藏了。 直接上github地址:https://github.com/YouZhiZheShiJingCheng/YZNav 转载于:https://www.cnblogs.com/BK-12345/p/6472815.html

中国智能高清视频监控未来发展趋势

浏览数: 1228 海康威视:田振华 《中国公共安全》:您认为高清摄像机将朝着哪个方向发展?像素会达到什么标准? 高清摄像机发展趋势: 一:高清 虽然说现在已经实现高清,但是从显示效果来看现有的高…

智能音箱 之 功放介绍

基本分类 功率放大器分甲类功放(A 类),乙类(B 类),甲乙类(AB 类)和丁类(D 类); A 类 指在信号的整个周期内,放大器的任何功率输出…

create_workqueue和create_singlethread_workqueue【转】

本文转载自:http://bgutech.blog.163.com/blog/static/18261124320116181119889/ 1. 什么是workqueueLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线…

平安城市与智慧城市对接的关键要素

平安城市经过前两个阶段(布点、联网)的大规模建设之后,如今正向系统应用深化,数据深入挖掘利用的方向发展。以视频监控为基础单元,一些城市开始尝试在既有的社会治安管理平台系统基础上拓展更多的应用功能,…

vue学习之路.02

2019独角兽企业重金招聘Python工程师标准>>> 第一个vue项目 1.创建 vue init webpack app01 2.安装依赖 cd app01 npm install 3.构建 npm run dev 启动本机的8080端口 或 …

等价表达式

小目标的最后一步。 原题链接:https://www.luogu.org/problem/show?pid1054 精力不足,代码工作可能要放在后几天。。。 思路已经明确了,我说一下。 这道题的大意是给出若干表达式,问这些表达式的值和初始表达式的值是不是相等。 …