康威定律,作为架构师还不会灵活运用?

Soft skills are always hard than hard skills. 软技能比硬技能难。

老板听说最近流行“微服务”,问架构师咱们的系统要不要来一套?老板又听说最近流行“中台系统”,问架构师咱们要不要搞起来?其实,这些问题不用老板问,关注技术发展趋势的架构师每当听到新的技术或解决方案,都会暗中思忖是否应用到系统中。然而,用或不用,总不能凭感觉吧。此时,如果你能灵活运用康威定律,那么做出的判断将更加完美。

康威定律

康威定律是马尔文·康威1967提出的:“设计系统的架构受制于产生这些设计的组织的沟通结构。”通俗的来讲:产品必然是其(人员)组织沟通结构的缩影

跨部门沟通是非常难的,系统各个模块的接口也反映了它们之间的信息流动和合作方式。

image

康威定律可谓软件架构设计中的第一定律,起初只是在杂志上的发表,后经过《人月神话》这本软件界圣经的引用,并命名为康威定律(Conway’s law),因此得以推广。

只通过简单的描述可能无法理解康威定律的精髓所在,原文中康威定律可总结为四个定律:

  • 第一定律 组织沟通方式会通过系统设计表达出来。
  • 第二定律 时间再多一件事情也不可能做的完美,但总有时间做完一件事情。
  • 第三定律 线型系统和线型组织架构间有潜在的异质同态特性。
  • 第四定律 大的系统组织总是比小系统更倾向于分解。

第一定律

Communication dictates design。
组织沟通方式决定系统设计。

这条定律重点是讲组织架构和沟通对系统设计的影响。组织的沟通和系统的设计之间紧密相连,特别是复杂系统,解决好人与人的沟通才能有一个更好的系统设计。

《人月神话》中总结出了随着人员的增加沟通成本呈指数增长的规律:沟通成本 = n(n-1)/2。举例说明一下:

  • 5人项目组,需要沟通的渠道是 5*(5–1)/2 = 10
  • 15人项目组,需要沟通的渠道是15*(15–1)/2 = 105
  • 50人项目组,需要沟通的渠道是50*(50–1)/2 = 1,225
  • 150人项目组,需要沟通的渠道是150*(150–1)/2 = 11,175

这也是为什么互联网公司都追求小团队的原因之一。沟通的问题会带来系统设计的问题,进而影响整个系统的开发效率和最终产品结果。

第二定律

There is never enough time to do something right, but there is always enough time to do it over。
时间再多一件事情也不可能做的完美,但总有时间做完一件事情。

人手永远是不够的,事情永远是做不完的,但可以一件一件来。这不就是软件行业中“敏捷开发”模式所解决的问题吗。面对这样的状况,敏捷开发可以做到不断迭代、持续交付、快速验证和反馈,并持续改进。

再牛的开发也会写出bug,再全面的测试覆盖率也无法测出所有的问题。解决方案不是消灭这些问题,是容忍一些问题的存在,然后通过适当的设计(冗余、监控、高可用设计)当问题发生时能够快速解决。

几个开发人员的小公司,去追求微服务、去追求中台架构,这是追求完美吗?不是,是找死。

好的架构不是买来的,也不是设计出来的,而是根据业务落地生根长期演化来的。

第三定律

There is a homomorphism from the linear graph of a system to the linear graph of its design organization。
线型系统和线型组织架构间有潜在的异质同态特性。

这一定律是第一定律的具体应用。想象一下如果公司的组织架构是这样的:团队是分布式,每个团队都包含产品、研发、测试、运维等角色。而此时系统是单块的,项目沟通和协调的成本是巨大的,弄不好还会打起来。

image

如果将单块的系统拆分成微服务,每个团队负责自己的部分,对外提供对应的接口即可,互不干扰。系统效率将得到提升。这与软件设计中的高内聚、低耦合是相通的。

image

直白的说就是想要什么的系统就搭建什么样的团队,有什么样的团队就搭建什么样的系统。需要前后端分离的系统就搭建前后端分离的团队,反之,拥有前后端分离的团队,可以设计前后端分离的系统。当然,如果能统筹管理,拥有重组团队或设计系统架构的权利,那就再好不过了。通常情况下让两者形成1:1的映射关系,更加高效。

第四定律

The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems。
大的系统组织总是比小系统更倾向于分解。

“话说天下大势,分久必合,合久必分。”系统越复杂,越需要增加人手,人手越多,沟通成本也呈指数增长。分而治之便是大多数公司选择的解决方案。分不同的层级,分不同的小团队,让团队内部完成自治理,然后统一对外沟通。

小结

架构不仅仅需要技术,在大公司尤其需要政治,所谓的架构的政治。

杨波老师曾在他的文章《每个架构师都应该研究下康威定律》中提到:“政治指的是和他人协作将事情搞定的艺术,架构是一种社交活动,在技术的世界里,个人主义很容易被打败,即使你的目的是好的技术是最优的,技术决策是政治决策(technical decisions are political decisions),一个技术产品,一波人可以做,另一波人也可以做,到底谁做的好,真不好说,不管谁做,都给业务套上了一副手铐。”

原文链接:《康威定律,作为架构师还不会灵活运用?》



---------------------
作者:程序新视界
来源:CSDN
原文:https://blog.csdn.net/wo541075754/article/details/102476828
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

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

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

相关文章

WebView2 通过 PuppeteerSharp 实现RPA获取壁纸 (案例版)

此案例是《.Net WebView2 项目,实现 嵌入 WEB 页面 Chromium内核》文的续集。主要是针对WebView2的一些微软自己封装的不熟悉的API,有一些人已经对 PuppeteerSharp很熟悉了,那么,直接用 PuppeteerSharp的话,那就降低了…

[转]2022 年 Java 行业分析报告

你好,我是看山。 前段时间介绍了从 Java8 到 Java17 每个版本比较有特点的新特性(收录在 从小工到专家的 Java 进阶之旅 专栏),今天看到 JRebel 发布了《2022 年 Java 发展趋势和分析》,于是借此分析一下 Java 行业的现…

Mysql 数据库学习笔记03 存储过程

一、存储过程:如下 通过 out 、inout 将结果输出,可以输出多个值。 * 调用存储过程: call 存储名称(参数1,参数2,...); 如指定参数不符合要求,返回 Empty Set * 查询存储过…

vue+vuecli+webapck2实现多页面应用

准备工作 在本地用vue-cli新建一个项目,首先安装vue-cil,命令: npm install -g vue-cli 新建一个vue项目,创建一个基于"webpack"的项目,项目名为vuedemo: vue init webpack vuedemo 这里有一个地方需要改一下&#xff0…

一文把Docker、Kubernetes搞懂:什么是Docker?什么是Kubernetes?Docker和Kubernetes有什么关系和区别?通俗解释Docker、Kubernetes

一、Docker解决的问题 1、统一标准 ● 应用构建 ○ Java、C、JavaScript——编程各异 ○ 打成软件包 ○ .exe(类似Windows,最终也只是生产exe执行) ○ 使用docker build … 打包成 镜像——这就类似于exe ● 应用分享 ○ 所有软件的镜像放到一…

程序员双手飞快敲键盘的时候是在敲代码吗?

当你看到一个程序员的两只手在键盘上上下翻飞,行云流水的时候,多半不是在敲击代码大概率是在跟产品经理撕逼讨论需求另一种可能就是在跟测试打口水仗10%几率是在论坛码字摸鱼或者和人家开喷了。1%几率是在跟MM聊天可以手速飞快而不需要停下思考的代码&am…

几分钟上线一个网站 真是神器

1、ToolJet 简介 ToolJet 是一个开源的低代码框架,可以快速构建和部署内部工具,而无需工程团队付出太多努力。您可以连接到您的数据源,例如数据库(如 PostgreSQL、MongoDB、Elasticsearch 等)、API 端点(To…

移植Python3到TQ2440(一)

平台 硬件:TQ2440 64MB内存 256MB NandFlashbootloader:U-Boot 2015.04kernel:linux-4.9Python: Python-3.6.0工具链:arm-none-linux-gnueabi-gcc 4.8.3概述 现在树莓派很火,在树莓派上面用户可以通过Python来控制板…

WinForm(六)组合布局属性

WinForm是基于控件的,不像codemark的架构,可以非常灵活的用mark来布局,它只能用控件布局属性和窗口控件来完成对UI的布局。容器控件有一组控件叫容器控件,对布局特别有作用,它们分别是:TableLayoutPanel&am…

Qt 网络编程

QT 网络编程 TCP 编程 模块引入 QT network 头文件 #include <QTcpServer> // TCP服务器端使用 #include <QTcpSocket> // TCP服务器和客户端都使用 编程流程 服务端 1&#xff09;实例化 QTcpServer 对象 -----------------------------> socket 2&#x…

日利率

2019独角兽企业重金招聘Python工程师标准>>> 利率计算 转载于:https://my.oschina.net/u/3342652/blog/1649028

Kafka 安装详解

注意&#xff1a;确保有JDK1.8版本及以上 官方文档&#xff1a;https://kafka.apache.org/quickstart 清华镜像下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/ 首先下载安装包&#xff0c;在linux及Windows都可以使用。 1. Centos 安装部署 1.1 下载 将下…

【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示...

前言&#xff1a;Maui终于在2022年8月9日推送出来了。今儿就迫不及待来把玩一下先。A、我本地已有VS2022&#xff0c;不过版本比较老&#xff0c;此处选择更新。工具 -> 获取功能和更新里面&#xff0c;可以获取到新版本更新。B、最新版本是17.3.0&#xff0c;我本地只有17.…

WebSQL存储

2019独角兽企业重金招聘Python工程师标准>>> WebSQL这种存储技术&#xff0c;相对于学过数据库的人来说&#xff0c;还是比较容易理解和上手的&#xff0c;主要就是它的存储风格和我们一般所学的SQL Server 和Oracle比较像&#xff0c;对于HTML5来说&#xff0c;当然…

抖音服务器带宽有多大,才能供上亿人同时刷?

最近看到一个有意思的提问&#xff1a;抖音服务器带宽有多大&#xff0c;为什么能够供那么多人同时刷&#xff1f;今天来给小伙伴们科普一下。 抖音&#xff0c;百度&#xff0c;阿里云&#xff0c;腾讯都是自建的数据中心&#xff0c;都是 T 级别出口带宽&#xff08;总出口带…

ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目&#xff0c;重点关注Host.CreateDefaultBuilder(args)中的执行过程&#xff0c;主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限&#xff0c;先整体理解、建立框架&#xf…

404和302

为什么80%的码农都做不了架构师&#xff1f;>>> 404 php中用header()函数是可以为返回页面添加404的头信息的&#xff0c;从而提示浏览器该网页找不到了。 所以可以使用&#xff1a;header("HTTP/1.0 404 Not Found");或者&#xff1a;header("Stat…

oracle sqlplus使用

2019独角兽企业重金招聘Python工程师标准>>> 1、常用连接方式 sqlplus / as sysdba 无需数据库进入可用状态&#xff0c;就可用用该命令登录&#xff0c;运行startup来启动。 sqlplus username/pwdhost/service_name&#xff0c;如&#xff1a; sqlplus tiger/scott…

20款IDEA 神级插件 效率提升 30 倍,写代码必备

插件目录 1. Alibaba Java Coding Guidelines 2.GsonFormat 3.A8Translation 4.Maven Helper 5.Free Mybatis plugin 6.Grep Console 7.Lombok 8.Nyan progress bar 9.FindBugs-IDEA 10.Key Promoter X 11.JavaDoc 12.ignore 13.RainbowBrackets 14.Activate-power-mode 15.C…

【温故知新】C# Linq中 Where使用技巧

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 后台回复 源码 即可;如果觉得对你有帮助&#xff0c;欢迎关注C# Linq中 Where使用技巧hello 大家好&#xff0c;很开心又能重新分享C#编程开发技巧了&#xff0c;之前因为工作和生活…