`

资深首席架构师眼中的架构应该是怎样的?

 
阅读更多

 

 

原文链接:  http://i.dataguru.cn/mportal.php?mod=view&aid=9124

 

 

 

我对架构定义的理解
大概在7~8年前,我曾经有一个美国对口的架构师导师,他对我讲架构其实是发现利益相关者(stakeholder),然后解决他们的关注点(concerns),后来我读到一本书《软件系统架构:使用视点和视角与利益相关者合作》,里面提到的理念也是这样说:系统架构的目标是解决利益相关者的关注点。

这是从那本书里头的一张截图,我之前公司分享架构定义常常用这张图,架构是这样定义的:
 
每个系统都有一个架构
 
架构由架构元素以及相互之间的关系构成
 
系统是为了满足利益相关者(stakeholder)的需求而构建的
 
利益相关者都有自己的关注点(concerns)
 
架构由架构文档描述
 
架构文档描述了一系列的架构视角
 
每个视角都解决并且对应到利益相关者的关注点。
 
架构系统前,架构师的首要任务是尽最大可能找出所有利益相关者,业务方,产品经理,客户/用户,开发经理,工程师,项目经理,测试人员,运维人员,产品运营人员等等都有可能是利益相关者,架构师要充分和利益相关者沟通,深入理解他们的关注点和痛点,并出架构解决这些关注点。
 
架构师常犯错误是漏掉重要的利益相关者,沟通不充分,都会造成架构有欠缺,不能满足利益相关者的需求。利益相关者的关注点是有可能冲突的,比如管理层(可管理性)vs技术方(性能),业务方(多快好省)vs 技术方(可靠稳定),这需要架构师去灵活平衡,如何平衡体现了架构师的水平和价值。
 
关于架构的第二点定义是说架构主要关注非功能性需求(non-functional requirements),即所谓的-abilities。

这个是我上次公司内分享的一个图。

这个是slideshare一个ppt里头截取的,两个图都是列出了架构的非功能性关注点;关于架构的水平该如何衡量,去年我看到一句话,对我影响很大。
 
Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change.
 
翻译为中文就是,架构表示对一个系统的成型起关键作用的设计决策,架构定系统基本就成型了,这里的关键性可以由变化的成本来决定。这句话是Grady Booch说的,他是UML的创始人之一。
 
进一步展开讲,架构的目标是用于管理复杂性、易变性和不确定性,以确保在长期的系统演化过程中,一部分架构的变化不会对架构的其它部分产生不必要的负面影响。这样做可以确保业务和研发效率的敏捷,让应用的易变部分能够频繁地变化,对应用的其它部分的影响尽可能的小。
 
我刚入软件开发这个行业之初,谈的架构主要是性能,高可用等等。现在,见过无数遗留系统,特别是国内企业IT的现状,无数高耦合的遗留系统,不良的架构像手铐一样牢牢地限制住业务,升级替换成本非常巨大, 所以我更加关注可理解,可维护性,可扩展性,成本 。我想补充一句,创业公司创业之初获得好的架构师或技术CTO非常重要。
 
架构的迭代和演化性
我是属于老一代的架构师,99年参加工作。职业初学了很多RUP,统一软件过程的理念。RUP的理念对我的架构有很深的影响,RUP总结起来就是三个特点:
 
用例和风险驱动Use Case and risk driven
 
架构中心Architecture centric
 
迭代和增量Iterative and incremental
 
RUP很注重架构,提倡以架构和风险驱动,项目开始一定要做端到端的原型(prototype);通过压测验证架构可行性,然后在原型基础上持续迭代和增量式开发,开发->测试->调整架构->开发,循环,如下图所示:

从上图可以看出架构师要尽可能写代码,做测试,纸上谈兵式做架构而后丢给团队的作法非常不靠谱(除非是已经非常清晰成熟的领域)。另外,做技术架构的都有点完美主义倾向,一开始往往喜欢求大求全,忽视架构的演化和迭代性,这种倾向易造产品和用户之间不能形成有效快速的反馈,产品不满足最终用户需求,继续看下面两个图:

第一个图是讲最小可用产品(Minimum Viable Product, MVP)理念,做出最小可用产品,尽快丢给用户试用,快速获取客户反馈,在此基础上不断迭代和演化架构和产品。
 
第二个图是过度工程(Over Engineering)的问题,其实也是讲产品架构和用户之间没有形成有效的反馈闭环,架构师想的和客户想的不在一个方向上,通过最小可用产品,快速迭代反馈的策略,可以避免这种问题。
 
注意,在系统真正地投入生产使用之前,再好的架构都只是假设,产品越晚被使用者使用,失败的成本和风险就越高,而小步行进,通过MVP快速实验,获取客户反馈,迭代演化产品,能有效地减少失败的成本和风险。
 
另外,多年的经验告诉我,架构,平台不是买来的,也不是用一个开源就能获得的,也不是设计出来,而是长期演化才能落地生根的。
 
构建闭环反馈架构
先分享一个链接,这几年对我架构影响最深的一篇文章。这篇文章是关于DevOps的,但对系统架构同样适用:
 
http://itrevolution.com/the-three-ways-principles-underpinning-devops/ 
 
这篇文章讲述了企业通向DevOps的三条必经之路,我们来看看这三条道路对架构师的启示。

第一条道路,系统思维,开发驱动的组织机体,其能力不是制作软件,而是持续的交付客户价值,架构师需要有全局视角和系统思维(System Thinking),深入理解整个价值交付链,从业务需求、研发、测试、集成,到部署运维,这条价值链的效率并不依赖于单个或者几个环节,局部优化的结果往往是全局受损,架构师要站在系统高度去优化整个价值交付链,让企业和客户之间形成快速和高效的价值传递。

第二条道路,强化反馈环,任何过程改进的目标都是加强和缩短反馈环。刚入行的工程师,也是中国学生的普遍问题,就是生产运维意识不足(监控是系统反馈的重要环节)。有两句话是这样讲的:
 
no measurement, no improvement没有测量,就没有改进和提升
 
What your measure is what you get你测量什么,就得到什么
 
没有监控或者监控不完善的系统相当于裸奔,开车上高速无仪表盘。有一篇很不错的关于测量驱动开发的文章,在InfoQ上的,向大家推荐:
 
http://www.infoq.com/cn/articles/metrics-driven-development
 
这篇文章提出了度量驱动开发的理念,即所谓MDD,在系统,应用和业务三个层次,通过三级监控,构建三个反馈环,在监控测量基础上持续改进系统和架构,我最近也在参考这个理念设计一个电商平台的技术架构,见下图:

这是一个电商平台的架构,整个体现了闭环架构的思想,右侧是整个平台的反馈监控环节。具体如下:
 
系统层监控计算网络存储,构建系统层的反馈环
 
应用服务层,监控业务、应用、服务,甚至整个研发流程,构建应用和服务层的反馈环
 
客户体验层,监控端用户和分析网站用户的行为,构建和客户的反馈环
 
下面这个图展示了系统提升和改进的一般方法:

收集->测量->调整->闭环重复,在有测量数据和反馈的基础上,系统、应用、流程和客户体验才有可能获得持续的提升和改善,否则没有数据的所谓改进只能靠拍脑袋或者说猜测。

第三条道路,鼓励勇于承担责任,冒险试错和持续提升的文化。这点是最难的,一般和企业人才密度有关。工具,技术,流程只是一个公司的冰山浮出水面的部分,而真正对企业效能影响大的则是冰山水下的部分,即企业的人和文化,架构师作为技术和架构的布道者,有责任义务鼓励和推动试错文化。
 
架构师要深入领会这三条道路,关注整个价值交付链的效率,关注每个环节的闭环反馈,鼓励和推动公司的试错文化,打造全系统的闭环架构(Architecting for closed loop feedback),提升整个系统效能。下图的DevOps和每日交付是每一个互联网系统架构师的梦想和努力的方向。

谈谈微服务架构
微服务我想大家都听得很多了,我本人也非常关注和推崇微服务,从技术角度讲,我认为微服务主要体现的是单一职责和关注分离的思想,从单进程模块化进一步拓展到跨进程分布式的模块化。微服务是独立的开发、测试、部署和升级单元,正如我在第一点架构定义中提到的,微服务中每个服务可以独立演变,它的cost of change比较小,整体架构比较灵活,是一种支持创新的演化式架构。
 
去年MartinFowler写了两篇文章,给微服务泼冷水的,建议大家好好读下。
 
http://martinfowler.com/bliki/MicroservicePrerequisites.html
 
http://martinfowler.com/bliki/MicroservicePremium.html

这个图讲什么时候该引入微服务。微服务有额外成本的,需要搭建框架、发布、监控等基础设施。初创和小规模团队不建议采用。主要决定是因素系统复杂性和团队规模,当到达一个点,单块架构严重影响效率才考虑 。另外补充一点,微服务更多是关于组织和团队,而不是技术。
 
架构和组织文化关系
再谈一下康威定律:
 
Conway’s law: Organizations which design systems[...] are constrained to produce designs which are copies of the communication structures of these organizations.
(设计系统的组织,其产生的设计和架构等价于组织间的沟通结构。 )
 
从单块架构到微服务架构是这个定律的很好体现。

团队是分布式的,系统架构是单块的,开发,测试,部署协调沟通成本大,严重影响效率,严重时团队之间还容易起冲突。

将单块架构解耦成微服务,每个团队开发,测试和发布自己负责的微服务,互不干扰,系统效率得到提升。
 
可见,组织和系统架构之间有一个映射关系(1 ~ 1 mapping),两者不对齐就会出各种各样的问题,一方面,如果你的组织结构和文化结构不支持,你也无法成功建立高效的系统架构,例如集中式和严格职能(业务, Dev, QA, Deployment, Ops)的企业,很难推行微服务和DevOps,推行Docker/PaaS平台也会比较困难,这样的组织职能之间都倾向于局部优化(local optimization),无法形成有效的合作和闭环。
 
反过来也是成立的,如果你的系统设计或者架构不支持,那么你就无法成功建立一个有效的组织;作为系统架构师,一定要深入领会康威定律,设计系统架构之前,先看清组织结构,也要看组织文化(民主合作式,集权式,丛林法则式,人才密度),再根据情况调整系统架构或者组织架构。
 
架构师心态和软技能
空杯,或者说开放心态(open minded)是一个成熟架构师的应有心态,stay hungry, stay foolish, 心态有多开放,视野就有多开阔。来自《高效能人士的七个习惯~史蒂芬~柯维》的一句话送给每一个架构师 :
 
如果一位具有相当聪明才智的人跟我意见不同,那么对方的主张必有我尚未体会的奥秘,值得加以了解。与人合作最重要的是,重视不同个体的不同心理、情绪与智能,以及个人眼中所见的不同世界。与所见略同的人沟通,益处不大,要有分歧才有收获。
 
另外再推荐一个本书《软件架构师的12项修炼》,这书中三个观点很值得每个架构师学习领会:
 
soft skills are always hard than hard skills,软技能比硬技能难
 
choosing relationship over correctness ,注重关系重于谁对谁错
 
架构的政治性,在中大型公司里工作的架构师尤其要学习
 
政治指的是和他人协作将事情搞定的艺术,架构是一种社交活动,在技术的世界里,个人主义很容易被打败,即使你的目的是好的技术是最优的,技术决策是政治决策(technical decisions are political decisions),一个技术产品,一波人可以做,另一波人也可以做,到底谁做的好,真不好说,不管谁做,都给业务套上了一副手铐。
 
架构师如何提升?实战,实战,实战!规划职业,找好的团队和项目,总结分享,学习GitHub开源项目,尽可能参与和开创自己的开源项目和产品,并长期积累。
 
我对一些架构师争议主题的看法
主要争议是两个话题:
 
技术和业务的关系。
 
架构师要写代码吗?
架构师怎么回答这类问题?一个成熟架构师的口头禅:视情况而定,不一定,是也不是,it depends。技术和业务,架构师要理解业务吗?看产品和客户,如果是业务性产品,肯定要理解业务,如果是技术型产品,就不一定。
 
架构师要写代码?也不一定,个人觉得尽可能要写,如果你写过十年以上代码了,每年不少于2万行,都玩通了,可以不写。另外架构师如果写代码,要把控度,不要一头钻入代码,花大量时间解决细节和复杂性问题,忽视全局和系统性问题。
 
最后
我想说中国现在的互联网发展趋势很好,越来越多的人加入架构师这个行业,这个行业正在“万物生长”。 但是我们现在还没有马丁福勒,adrian cockcroft这样的架构牛人物,我辈需不断努力,期待中国10~20年后出现超过十个马丁福勒,adrian cockcroft这样的大牛神级人物。我们必不可停止探索,而一切探索的尽头,就是重回起点,并对起点有首次般的认识。
 
作者介绍
杨波,具有超过10年的互联网分布式系统研发和架构经验,曾先后就职于:eBay中国研发中心(eBay CDC),任资深研发工程师,参与亿贝开放API平台研发,携程旅游网(Ctrip),任技术研发总监,主导携程大规模SOA体系建设,唯品会(VIPShop),任资深云平台架构师,负责容器PaaS平台的调研和架构,目前就职于法国LVMH集团中国区的垂直电商部门,任职电商首席架构师,帮助传统IT向互联网转型。
分享到:
评论

相关推荐

    ClearCase UCM统一变更管理概论.ppt 首席软件架构师 胡协刚

    中国软件架构师网 首席软件架构师 胡协刚除了做架构培训外,对配置管理也有很资深的经验,本ppt是首次放出的教案 ClearCase UCM统一变更管理概论 RUP配置与变更管理科目 ClearCase基本概念 ClearCase UCM概念 ...

    软件系统架构师不等于资深程序员

    Asoftwarearchitectisnotaseniordeveloper  本文的作者ArmelNene是ETAPIXGlobal公司的首席架构师,他居住在伦敦,他参与过的开源项目包括ApacheLucene,,ApacheNutch,Liferay和Pentaho等  如今很多的公司的IT部门...

    Android DevCamp幻灯片分享:千万级并发在线推送系统架构解析 | 个信互动 叶新江

    再谈Android推送实现:《千万级并发在线推送系统架构解析》| 个信...曾任 Microsoft MS中国首席架构师,爱立信广州研发中心(Ericsson CGC)高级系统架构师,卓望数码移动梦网研发主管。并有多年银行金融的技术管理经历。

    云计算核心技术架构论坛(一):构建高可用、高扩展、易运维的云架构

    在6月4日下午举行的“云计算核心技术架构论坛(一)”中,IBM中国智慧云平台与OpenStack首席架构师杨海明,新浪云计算总负责人、SAE创始人丛磊,百度开放云资深架构师杨毅,青云QingCloud系统工程师杨锦涛、英特尔...

    2015 中国大数据技术大会 PPT完整合集(含spark架构师辛提ppt)

    2. Databricks公司联合创始人、Spark首席架构师辛湜:Spark发展:回顾2015,展望 2016 3. 京东云平台总架构师、系统技术部负责人刘海锋 :从2014 到2016,大规模内存数 据库演进之路 4. Hulu 资深研发主管梁宇明 ...

    锦绣蓝图:怎样规划令人浏览往返的网站(第二版) 中文版 上

    信息架构到底是什么?怎样才能规划处令人流连忘返的网站?... 资深信息架构师和用户体验设计师,IA社区的活跃成员。他曾在Comcast互动传媒和世界银行等机构任信息架构师,代表作品有著名视频网站Fancast.com

    SOA架构方法与实践——第五届中国软件工程大会

    此前他曾任IBM软件集团企业解决方案部大中华区和北亚地区首席架构师与IBM SOA中国设计中心技术主管,在企业级软件方面拥有广泛、扎实、深厚的理论功底和丰富的设计与项目实施经验。 2006年,毛新生先生被授予“IBM...

    j2ee核心模式

    ——Craig McClanahan,Struts首席架构师,JavaServer Faces技术规范组负责人  开发者们常常把“学会一种技术”和“学会使用这种技术进行设计”混为一谈。在本书中,Sun Java中心的资深架构师们分享了他们多年积累...

    j2EE核心模式

    ”, ——Craig McClanahan,Struts首席架构师,JavaServer Faces技术规范组负责人, 开发者们常常把“学会一种技术”和“学会使用这种技术进行设计”混为一谈。在本书中,Sun Java中心的资深架构师们分享了他们多年...

    J2EE核心模式

    ”, ——Craig McClanahan,Struts首席架构师,JavaServer Faces技术规范组负责人, 开发者们常常把“学会一种技术”和“学会使用这种技术进行设计”混为一谈。在本书中,Sun Java中心的资深架构师们分享了他们多年...

    2023年全球软件研发技术大会嘉宾演讲合计-一千六百多页各行业大佬演讲干活.pdf

    vivo 千亿级评论系统架构演进之路 涂鹏vivo互联网架构师 平台工程和KusionStack实践 柴树杉KusionStack开源负责人 阿里千万级可观测采集器iLogtail稳定性建设实践 张城阿里云技术专家 Kitex:微服务架构下的高性能...

    IPV6详解-中文版

    本书全面讲解IPv6及相关...他曾在风河系统公司工作8年,是风河嵌入式IPV6产品的首席架构师。他拥有多项美国专利,并著有Real-Time Concepts for Embedded Systems等畅销书。他还是FreeBSD操作系统项目活跃的开发者。

    服务端 - 阎志涛 TalkingData《大数据流式处理技术》.pdf

    曾在IBM、Oracle、BEA、方正等国内外知名企业担任资深架构师、首席技术顾问、资深售后服务工程师等职位。作为中间件技术专家,完成了多个全球重大商务智能和数据分析项目, 并领导团队帮助 AT&T、Motorola、CitiBank...

    IPV6详解卷一 核心协议实现(上)-清晰中文版

    Qin9 Li 8Iue Coat系统公司资深架构师,负责领导下一代支持IPv6的安全代理应用系统的设计和 开发工作:他曾在风河系统公司工作8年,是风河嵌入式IPv6产品的首席架构师:他拥有多项美国专利。并著有Real-Time ...

    1 IBM 认知物联网赋能智能汽车制造,推动行业创新.pdf

    IBM大中华区Watson物联网事业部实验室服务部首席架构师和资深技术专家,有关大数据,代码定义/API,认知计算,三大技术趋势相互叠加推动行业创新与变革。

    Springboot+Vue前后的分离整合项目实战

    现某知名大型互联网公司资深架构师,技术总监,职业规划师,首席面试官,曾在某上市培训机构,高校任教多年。????????????Array(Array老师)10多年互联网公司实战经验,知名的大型互联网公司的架构师,高管等职,在...

    算法心得:高效算法的奥秘

    Google公司首席架构师、Jolt大奖得主Joshua Bloch和Emacs合作创始人、C语言畅销书作者Guy Steele倾情推荐; 算法的艺术和数学的智慧在本书中得到了完美体现,书中总结了大量高效、优雅和奇妙的算法,并从数学角度...

    Struts2实战.pdf

    内容简介 《Struts 2实战》结合实例介绍了Struts 2框架,主要内容包括Action、Result、Interceptor等框架组件,基于注解的配置选项等...Scott Stanlick,现在著名汽车租赁连锁企业EnlerpriseRent-A.Car任软件架构师。

    深入解析SAS 数据处理、分析优化与商业应用 夏坤庄著 机械工业出版

    SAS软件研究开发(北京)有限公司资深技术人员经验结晶,SAP大中国区商业创新首席架构师鲁百年强烈推荐。 实战性强,结合商业案例细致呈现SAS的优化建模方法,深入讲解SAS数据处理、统计分析及时间序列,涵盖引领...

Global site tag (gtag.js) - Google Analytics