康威定律和系统设计——《微服务设计》读书笔记

康威定律

      任何组织在设计一套系统时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。

——梅尔.康威

      如何理解这句话在软件工程上的含义?埃里克.S.雷蒙德说:如果你有四个小组开发一个编译器,那你会得到一个四步编译器。

      组织和架构应该一致,团队应该共同拥有并运营其创建的系统,而且小团队会比大团队的工作更有效。Amazon提出“两个披萨团队”,即没有一个团队应该大到两个披萨不够吃,帮助小团队对服务的整个生命周期负责,这也是现如今Devops如此流行的一个原因。

      组织结构对系统的性质和质量有着深刻的影响,如果构建系统的组织更加松耦合,其所构建的系统则倾向于更加模块化,因此耦合度也更低。我们推荐团队与限办上下文保持一致,同时确保每个服务都有拥有者,这样当这个服务几个月没有改时,再修改也会找到相应的团队。

      我们倾向于把服务的所有权交给拥有服务的团队,只要更改不破坏服务的消费者,团队就可以随时重新组织代码,这样可以让团队更加负责,而不是反映系统移交到测试或部署阶段后,就认为他们的工作已经完成了。

      另外,系统的设计有时也会反过来失去组织的发展,如以前互联网仅是一个附加在信息部门的小部门,而现如今,互联网可能带来整个公司组织架构的调整。我们称之为反向的康威定律。

 

内部开源

      如果团队内最终免不了要共享几个服务时,该怎么办?内部开源可能是一个选项。

      在标准的开源项目中,一小部分人被认为是核心提交者,他们是代码的守护者,核心提交者对代码库负责,他们是代码库的所有者。

      好的守护者会花费大量的精力与提交者进行清晰的沟通,并对他们的工作方式进行引导。

      在内部开源项目开始时,由于其可能处于快速的变化当中,这个时候最好不要允许除了核心提交者之外的人提交代码。待成熟之后,再来开放,让其他人贡献代码。

 

参考

      《微服务设计》(Sam Newman 著 / 崔力强 张骏 译)

相关文章: 

  • 微服务的概念——《微服务设计》读书笔记

  • 微服务架构师的职责——《微服务设计读书笔记》

  • 建模:确定服务的边界——《微服务设计》读书笔记

  • 微服务集成——《微服务设计》读书笔记

  • 服务的协作:服务间的消息传递——《微服务设计》读书笔记

  • 拆分:分解单块系统——《微服务设计》读书笔记

  • 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记

  • 测试——《微服务设计》读书笔记

  • 监控——《微服务设计》读书笔记

  • 安全——《微服务设计》读书笔记

原文地址:http://www.cnblogs.com/gudi/p/6685038.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

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

相关文章

Eclipse 4.9 正式发布,支持 Java 11

转载自 Eclipse 4.9 正式发布,支持 Java 11 来看看 Eclipse 4.9 带来了哪些新特性! 1、外观 新增类似大纲视图的”Minimap” 间主题/暗黑主题,启用方法: Window > Show View > Other,然后在 Show View 对话框…

开发者需要理解的分布式原语

随着容器技术的崛起,开发人员的思维也从单主机扩展到了分布式。Bilgin Ibryam在Red Hat官方博客上介绍了什么是分布式原语,以及它与进程内原语之间的联系。本文已获得作者翻译授权,查看原文New Distributed Primitives for Developers。 面向…

Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

转载自 Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码 美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。 为什么说是长期版本,看下面的官方发布的支持路线图表。 可以看出…

JS中的命名规则

在JS中所有的可以自主命名的内容,都可以认为是一个标识符, 是标识符就应该遵守标识符的规范。 比如:变量名、函数名、属性名 规范: 1.标识符中可以含有字母、数字、_、$ 2.标识符不能以数字开头 3.标识符不能是JS中的关键字和保…

mssql on linux 安装指导

通常在本机开发环境中需要搭建所有的服务,还要修改本地的hosts,实在是不胜其烦。如今有了docker,完全不用污染本地环境,且看老司机带你搭建一个asp.net core的开发环境集群。愿你走出虚拟机,归来仍是干净的开发机。 教…

互联网账户系统的具体实现

转载自 互联网账户系统的具体实现 导读 在上一篇文章中我们通过场景举例的方式,讨论了一套相对通用的互联网业务账户系统,从业务模型上应该如何定义。那么除了从业务模型上进行定义外,在具体系统实现上又该如何设计?又有哪些需…

.NET 的一点历史往事:和 Java 的恩怨

在编程语言的发展历史上,1995年应该是个特殊的年头,毕竟这个年头诞生了两个后来二十多年影响深远的语言。1995年5月23日的 SunWorld 大会上面 Sun 公司高调发布了自己研发了近五年的 Java 语言和 JVM 平台。当年的十二月,网景公司将自己刚刚预…

这可能是史上最全 Redis 高可用解决方案总结

转载自 这可能是史上最全 Redis 高可用解决方案总结 本文主要针对 Redis 常见的几种使用方式及其优缺点展开分析。 一、常见使用方式 Redis 的几种常见使用方式包括: Redis 单副本; Redis 多副本(主从); Redis S…

规模化微服务——《微服务设计》读书笔记

改变思维的角度:故障无处不在 当微服务规模化后,故障是无可避免的,以往我们总是想尽力避免故障的发生,而当故障实际发生时,我们往往束手无策。我们花了很多时间在流程设计和应用设计的层面上来阻止故障的发生&#xff…

JS中的基本和引用类型传递的比较

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript">/** 基本数据类型* String Number Boolean Null Undefined* * 引用数据类型* Object* * JS中的变量都是保…

如何在 ASP.NET Core 中发送邮件

前言 我们知道目前 .NET Core 还不支持 SMTP 协议&#xff0c;当我么在使用到发送邮件功能的时候&#xff0c;需要借助于一些第三方组件来达到目的&#xff0c;今天给大家介绍两款开源的邮件发送组件&#xff0c;它们分别是 MailKit 和 FluentEmail &#xff0c; 下面我对它们…

一文搞懂 Java 线程中断

转载自 一文搞懂 Java 线程中断 在之前的一文《如何"优雅"地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程&#xff0c;那么还有别的可以终止线程的方法吗&#xff1f;答案是肯定的&#xff0c;它就是我们今天要分享的——线程中断。 下面…

.NET的一点历史故事:招兵买马和聚义山林

曾几何时&#xff0c;Java 的兴起得益于众多大公司的涌入&#xff0c;Sun、IBM、SGI、网景、甲骨文、Borland 都在第一时间关注并投入大量资源来推动它的发展。比较典型的例子就是 IBM 做了自己的 Java SDK&#xff0c;并且做出了 SWT 界面框架&#xff0c;后面又开源了自己的 …

教你用 3 台机器搞定一个 Redis 高可用架构

转载自 教你用 3 台机器搞定一个 Redis 高可用架构 基于内存的 Redis 应该是目前各种 Web 开发业务中最为常用的 key-value 数据库了。 我们经常在业务中用其存储用户登陆态&#xff08;Session 存储&#xff09;&#xff0c;加速一些热数据的查询&#xff08;相比较 MySQL…

调用函数的返回值和函数对象本身

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <script>function fun3() {function fun4() {alert("我是fun4");}//将fun4函数对象…

使用java解析XML文件的步骤

以前的时候&#xff0c;也解析过&#xff0c;今天又拿出来解析就让忘记怎么解析了&#xff0c;后来在网上查还有自己想&#xff0c;终于解析出来了&#xff0c;下面就是原XML文件&#xff1a; accp.xml <?xml version"1.0" encoding"UTF-8"?> <…

世界上最大的搜索引擎公司 Google 宣布与 Elastic 达成战略合作协议

和大家的直觉反应比较不同&#xff0c;但谷歌&#xff0c;这家业界首屈一指的互联网搜索公司&#xff0c;要向她的云平台里加入新的搜索服务了。谷歌云平台一直向企业客户出租计算、存储和网络等服务&#xff0c;现在谷歌则要与Elastic公司合作&#xff0c;为谷歌云提供新的搜索…

使用java读取文件并输出

通过Reader读取文件中的内容&#xff1a; 下面是文件&#xff1a; test.txt: 1、看着街上的人群&#xff0c;各个都把自己捂得严严实实的&#xff0c;好似一个个奇怪的布包裹。窗外的天&#xff0c;是灰蒙蒙的一片&#xff0c;灰色的霾把所有的物体都笼罩了起来。2、它来时&am…

Akka系列---什么是Actor

本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间是可以相互沟通,所有的沟通都是通过Message 比如说一个呼叫中心,数以百万计的客户可能会呼叫一个1-800的…