厉害了,Apache架构师们遵循的 30 条设计原则
作者:Srinath
翻译:贺卓凡
本文作者叫 Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是 Apache Axis2 项目的联合创始人,也是 Apache Software 基金会的成员。他是WSO2流处理器(wso2.com/analytics)的联席架构师。Srinath 撰写了两本关于 MapReduce 和许多技术文章的书。他获得了博士学位。来自美国印第安纳大学。
Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门。
Srinath认为架构师应该扮演的角色是一个引导者,讨论发起者,花草修建者,而不是定义者和构建者。Srinath为了解决团队内部的架构纷争和抉择,制定了以下30条原则,这些原则被成员们广泛认可,也成为了新手架构师的学习途径。
原则12:有时候你要有勇气和客户说不。这时候你需要找到一个更好的解决方案来去解决。记住亨利福特曾经说过的 :”如果我问人们他们需要什么,他们会说我需要一匹速度更快的马”。记住:你是那个专家,你要去引导和领导。要去做正确的事情,而不是流行的事情。最终用户会感谢你为他们提供了汽车。
原则13:要知道一个server是如何运行的,从硬件到操作系统,直到编程语言。优化IO调用的数量是你通往最好架构的首选之路。
原则14:要了解Amdhal同步定律。在线程之间共享可变数据会让你的程序变慢。只在必要的时候才去使用并发的数据结构,只在必须使用同步(synchronization)的时候才去使用同步。如果要用锁,也要确保尽可能少的时间去hold住锁。如果要在加锁后做一些事情,要确保自己在锁内会做哪些事情。
原则16:无状态的系统的是可扩展的和直接的。任何时候都要考虑这一点,不要搞个不可扩展的,有状态的东东出来,这是起码的。
原则17:保证消息只被传递一次,不管失败,这很难,除非你要在客户端和服务端都做控制。试着让你的系统更轻便(使用原则18)。你要知道大部分的承诺exactly-once-delivery的系统都是做了精简的。
原则18:实现一个操作尽可能的幂等。这样的话就比较好恢复,而且你还处于至少一次传递(at least once delivery)的状态。
原则19:知道CAP理论。可扩展的事务(分布式事务)是很难的。如果可能的的话,尽可能的使用补偿机制。RDBMS事务是无法扩展的。
原则20:分布式一致性无法扩展,也无法进行组通信,也无法进行集群范围内的可靠通信。理想情况下最大的节点限制为8个节点。
原则29:梦想着新的编程语言就会变得简单和明了,但往往要想真正掌握会很难。不要轻易的去换编程语言。
原则30:复杂的拖拉拽的界面是艰难的,不要去尝试这样的效果,除非你准备好了10人年的团队。
作为一个架构师,应该像园丁一般,更多的是修剪花草,除草而不是去定义和构建,你应该策划而不是指挥,你应该去修剪而不是去定义,应该是讨论而不是贴标签。
虽然在短期内可能会觉得也没什么,但从长远看,指导团队找到自己的方式会带来好处。如果你稍不留神,就很容易让架构成为一个空洞的词汇。比如设计者会说他的架构是错误的,但不知道为什么是错误的。一个避免这种情况的好办法就是有一个原则列表,这个原则列表是被广泛接受的,这个列表是人们讨论问题的锚点,也是新手架构师学习的路径。
正文结束
1.
2.
3.
4.
5.
6.
7.
8.
一个人学习、工作很迷茫?
点击「阅读原文」加入我们的小圈子!
厉害了,Apache架构师们遵循的 30 条设计原则相关推荐
- Apache 的架构师们遵循的 30 条设计原则
目录 Apache 的架构师们遵循的 30 条设计原则 基本原则
- Apache的架构师们遵循的30条设计原则
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:ImportSource 本文作者叫Srinath,是一位科学家,软件架构师,也是一名 ...
- Srinath总结 架构师们遵循的 30 条设计原则
作者:Srinath 翻译:贺卓凡,来源:公众号 ImportSource Srinath 通过不懈的努力最终总结出了 30 条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构 ...
- 架构师们遵循的30条设计原则
阅读文本大概需要8分钟. Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门.Srinath认为架构师应该扮演的角色是一 ...
- 架构师必须掌握的 10 条设计原则
转载自 架构师必须掌握的 10 条设计原则 01. 遵循单一职责原则 函数是程序员的工具中最重要的抽象形式.它们能更多地被重复使用,你需要编写的代码就越少,代码也因此变得更可靠.较小的函数遵循单一职 ...
- Java架构师必须知道的 6 大设计原则
转载自 Java架构师必须知道的 6 大设计原则 在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义.本文主要将总结这些常见 ...
- Apache架构师的30条设计原则!
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:Srinath 来源:ImportSource 本文作者叫 Srinath,是一位科学家 ...
- Apache架构师总结的30条设计原则!
点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入新技术 Srinath|ImportSource 今天把 RPC 框架乞丐 ...
- 阿里P7架构师告诉你Java架构师必须知道的 6 大设计原则
在软件开发中,前人对软件系统的设计和开发总结了一些原则和模式, 不管用什么语言做开发,都将对我们系统设计和开发提供指导意义.本文主要将总结这些常见的原则,和具体阐述意义. 开发原则 面向对象的基本原则 ...
- 专访架构师周爱民:谈企业软件架构设计 1
最近在网上读到了"杀不死的人狼--我读<人月神话>"系列文章.是周爱民关于<人月神化>的读书心得.<人月神化>在软件工程里一本很有分量的书,讲述 ...
最新文章
- 会计的思考(20):还原会计报表的企业个性之四(持续经营)
- char nchar varchar nvarchar varchar2区别
- asp.net学习之Repeater控件
- net 模式中虚拟机连不上本机oracle_高并发与负载均衡(三种负载模式)
- dispatch事件分发
- 网页css样式中英对照,css中文样式(含中英文对照表).doc
- mysql通过data目录恢复数据库
- 二叉树的相关题(叶子结点个数,最大深度,找特殊值结点(值不重复),判断两个树是否相同,判断两个数是否为镜像树,是否为子树,)
- python指定目录生成.csv文件_python文件处理-根据csv文件内容,将对应图像拷贝到指定文件夹...
- 无人机如何通过GB28181协议接入视频会议
- Java中数据库模糊查询写法
- 老电脑xp系统最流畅的浏览器_1步打造极限精简的win10系统,让老电脑像新机般流畅,再也不卡了...
- 南天PR2打印机自动退纸解决办法
- PVAJP计划:暨关于.Press全站使用VUE-AJAX-JSON-PYTHON的新规划
- Google算法更新记录-你想了解的全在这
- 使用canvas画二维码
- Bugku CRYPTO No Ciphertext RSA writeup by 树木
- 试着在unity实现阴阳师抽卡效果
- Qsetting本地缓存PC端数据
- win11家庭版设置远程桌面
热门文章
- ToList()所带来的性能影响
- diy操作系统 0:万事开头难
- 思科将技术团队拆分为四块:安全、物联网、云与网络
- “工业革命4.0”时代,智能汽车应是什么样?
- 0=iiLen 在C++中
- Office for Mac升级提醒如何去掉?关闭Mac的Microsoft AutoUpdate弹框提示
- MacBook Air 过热降温技巧
- Sublime Merge for Mac(git客户端软件)
- SAP soamanager发布的Webservice服务,调用时出现http500报错
- noteless的博客导航页 所有文章的导航页面