日期:2022/04/16 08:11作者:佚名人气:
目前讨论架构的实际操作()的文章很多,讨论架构(dao)的概念的文章很少。本文基于作者对大型电子商务系统架构的实践和思考。能够吸引他人,促进大家对架构的理解。
什么是道,什么是艺术?道是事物发展的本质规律,艺术是事物发展的具体方式。
法律只有一个,方法有很多,条条大路通罗马,罗马就是路,路就是艺术。道为根本,艺术为道。如果提前知道罗马在哪里,那么到处都是路,路与路相连。建筑也是如此。如果你能理解建筑的本质,你就不会被现有的实践和理论框架所束缚,以最直接的方式解决问题。
本文内容包括:
建筑的本质
任何系统,在自然条件下,都会从有序走向无序,这是有科学依据的。根据热力学第二定律,自然界一切自发过程都有方向,一个孤立的系统会从有序变为无序。,也就是它的熵会不断增加,最终消亡。但是,生物体可以与外界相互作用,主动代谢,创造“负熵”来保证自身的秩序,继续生存。
同样,随着一个软件系统的功能越来越多,调用次数急剧增加,整个系统逐渐变得支离破碎,越来越无序,最终无法维护和扩展。因此,经过一段时间的野蛮生长后,系统也需要及时干预。,以避免增加混乱。
架构的本质是有序地重构系统,不断降低系统的“熵”,使系统不断进化。
架构如何实现从无序到有序的有序?基本的方法是分而治之,先打散系统,再重组。
拆分的过程是将系统拆分为各个子系统/模块/组件。拆分时,必须先解决各个组件的定位问题,然后才能划分彼此的边界,以实现合理的拆分。组合是根据最终的要求将各个独立的组件有机地整合在一起。相对来说,分裂的第一步难度更大。
拆分的结果使开发人员能够专注于业务和技能,实现敏捷开发。集成的结果是系统变得灵活,可以根据需要进行更改,实现业务敏捷。
比如在Web1.0时代,在一个ASP或者JSP页面中,HTML和脚本代码是混合在一起的。这个时候,脚本代码越多,系统就越混乱(也就是熵增加),最终甚至连开发者自己都这样。无法理解。此时需要重新架构系统,引入视图模式,分离HTML和脚本,HTML变成视图,脚本变成辅助类。然后简单地将它们放在一起。通过重新划分和重新组合,整个系统层次清晰,职责明确,减少了系统的混乱,易于扩展。同时,UED、程序员等不同技能的开发者可以负责不同的部分,有效提高开发效率。
一个好的结构就像一篇优美的散文。它与外界无法区分。表面上看起来杂乱无章,但实际上它是高度有序的。
架构分类和服务对象
架构一般可以分为业务架构、应用架构和技术架构。那么他们解决了哪些问题,为谁服务?我们先来看一个系统登陆流程:
对于开发负责人来说,怕是业务太复杂,代码逻辑太乱,超出了他的理解范围,系统无法维护。因此,开发要求是系统的整体概念清晰、易于理解、易于扩展。
对于负责运行的机器来说,担心的是业务并发量太大,核心系统资源(如数据库连接)不够。希望在业务量增加时,系统能够支持横向扩展,支持硬件容错(比如避免单点故障)。
开发的痛点主要通过业务架构和应用架构来解决。业务架构有助于从概念层面(动态包括业务流程/节点/输入/输出,静态包括业务领域/业务模块/文档模型)对系统的开发和理解。
应用架构有助于从逻辑层面(应用类型/应用形式/数据交互关系/交互方式等)开发落地系统,整个系统逻辑通俗易懂。最近谈得很多的SOA,属于应用架构的范畴。
机器的痛点主要是通过技术架构来解决的,比如技术平台的选择(操作系统/中间件/设备等),部署希望支持多机房,横向扩展,没有单机观点。
强调系统是人的系统,架构首先要为人服务。清晰的业务概念、合理的应用逻辑、易于理解的人是第一位的(即系统具有高度的有序性)。现在大家谈的更多的是技术架构,比如高并发设计、分布式事务处理等,正因为这个不需要业务上下文背景,还是互相交流比较好。在设计具体架构时,首先要关注业务架构和应用架构,这个架构的新手要特别注意。
建筑师能力模型
建筑师只做分与合的工作,但综合能力要求很高,需要内外兼修,厨房和大厅。下图通过典型的架构方式介绍了架构师的能力需求:
驾校教练必须有良好的驾驶技术,游泳教练必须有良好的游泳技术,因为这些都是非常实用的工作。书上学终觉浅,梅花寒寒来,建筑师亦然。他必须是一名优秀的程序员,并且具有良好的代码和系统导航能力。
在此基础上,架构师必须具备技术广度(多领域知识)和深度(技术远见),对主流公司的系统设计有很好的了解,知道优缺点,遇到实际问题,很快就会有有多种选项可供评估。
抽象思维是建筑师最重要的能力,建筑师应该善于对物体进行概念化和分类。比如面对大型B2C网站,可以快速抽象为采购->运营->前台搜索->下单->订单履行。
抽象思维是升华到高层次的概括,从真实到虚拟;而通过问题看本质是从虚到实,向更深层次挖掘。比如你看到一段java代码,你就知道它在JVM中是如何执行的;一次跨网络调用,就知道数据是如何通过各种介质(操作系统内核/网卡端口/电磁介质等)到达目标的。看透问题本质,使架构师能够敏锐地发现底层的真相,端到端系统地思考问题,找出桶的不足并加以解决。
一个可以实现的框架就是一个好的框架。良好的沟通能力确保各方就框架达成共识并愿意采取行动;良好的平衡和权衡能力保证了框架在现有资源的约束下是最合理的,理想终将成为现实。
总之,架构师的能力要求包括:
建筑领域
建筑师从浅到深可分为四层:一是山不是山,二是山是山,三是山不是山,四是山是山。
刚接手这个项目时,我对业务了解不多,总是被业务方面的术语吓到。如果我把现有的问题比作一座山,那就是一座山,一座山峰,我根本无法理解。此时,山不是山。
经过业务梳理和对系统的深入了解,可以设计一个掉丝方案,连接所有系统解决当前问题,可以看清当前山的全貌。
通过进一步抽象,发现问题的本质。事实证明架构师,这个问题很常见,以后还会有很多类似的问题。对设计进行总结和升华,得到一个通用的解决方案,既能解决当前的问题,也能解决潜在的问题。你此时看到的已经是问题的本质,看山不是山。
最后,回到问题本身,去掉过多的抽象,给出简洁明了的设计。一部分太胖,一部分太瘦。它不仅解决了当前的问题,还保留了最基本的扩展。这个时候,问题还是一样的问题。,山还是那座山。
佛教讲空和色,色是事物的现象,空是事物的本质。在这个意义上,一界无色无空,二界出色,三界出空,四界介于色与空之间,色与空皆是,不执着于当下,不执着于当下。未来为空。
非空非色,非空非色架构师,道是自然,如来的本质,结构的本质。
作者简介:王庆友,前一号店首席架构师,曾就职于ebay、腾讯、一号店、走钢网,精通电子商务业务,擅长复杂系统的业务建模和架构分析,同时构建大规模分布 他在系统方面有丰富的实践,特别是在大规模系统的SOA改造方面,有非常深入的理论和实践。目前,他正在寻找中国钢网首席架构师。
本文由@王青友授权发布于人人都是产品经理。未经许可禁止转载。