分布式系统的开发经验与心得

与近期与InfoQ的一次对话中,Vaughn Vernon分享了一些他在开发分布式系统方面的心得。他特别指出,在分布式系统中,有可能会出现局部故障之类的问题。对于这种类型的问题以及一些其它挑战来说,最佳的应对方式是做好一切准备,而不是无助地祈祷它不要出现。Vaughn还推荐了Jeff Hodges所撰写的一篇博客文章,这篇文章为分布式系统给出了一些落到实处的设计方式,并提出了一些实用的建议,非常适合于在分布式系统方面经验尚浅的开发者。

\\

Vaughn Vernon是《实现领域驱动设计》以及最新的《通过Actor Model实现响应式消息处理模式》这两本书的作者。在他看来,Hodges的文章中有两个推荐是最有价值的,一是尝试为局部可用性进行设计,二是当依赖的系统变得不可用时,通过使用capped指数退避(exponential back off)算法恢复完整的操作。这种方式是当故障发生时,你所能做的最好的期望,这会让你想到Vernon的评价。

\\

Hodges发现,新手往往会将延迟视为分布式计算中最困难的一部分。但在他看来,分布式系统的区别性因素在于出现故障的可能性增大了,尤其是局部故障的出现率。因此,他建议设计者去寻找一些能够实现局部可用性的设计方式。他以一个设计良好的搜索系统作为示例,如果发生搜索操作超时的情况,那么系统应当返回在超时之前所获得的搜索结果,这种方式可以有效地提高系统的弹性。

\\

在Hodges看来,要创建健壮的分布式系统,一个最基本的构建块就是背压(backpressure)机制。被请求的系统会向发起请求的系统发出故障信号,以避免出现过载的情况。实现这种机制有一些常见的方式,例如丢弃消息,或是在处理一个有可能失败的请求之前就返回错误信息。

\\

Hodges强烈反对在服务器之间进行协调的做法,他倾向于让服务器保持独立性,将互相之间的通信次数降至最低。因为一旦出现需要两台服务器对某个操作表示允许的情况,整个服务的实现就变得更加困难了。

\\

Hodges还认为,如果能够找到一些高层次的业务逻辑,并将其提炼为服务,则能够带来许多益处。一个经过提炼的服务能够提供更好的封装性,并且能够让代码变更的部署更快、更简便。在他看来,对于部署至多个客户的情况,在服务这一层进行协调的成本,比之让所有客户端使用一个共享的类库,在部署时必须对所有客户进行协调的成本来说要低上许多。

\\

Hodges在文中也描述了一些在他的职业生涯中所学到的一些经验教训,例如利用特性标记交付基础设施,以及为系统选择id空间时所需考虑的各种因素。

\\

查看英文原文:Lessons Learned Working with Distributed Systems

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

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

相关文章

mysql gtid 还是pxc_记一次 PXC 集群拆分引发的思考

原标题:记一次 PXC 集群拆分引发的思考作者简介冷正磊2018年2月加入去哪儿网 DBA 团队,主要负责机票业务的 MySQL 和 Redis 数据库的运维管理工作,以及数据库自动化运维平台部分功能的开发工作,对数据库技术具有浓厚兴趣&#xff…

一个奇怪的注意事项TNS-12545 TNS-12560 TNS-00515

近来的reportDB无法从一开始就与系统收听,比较奇怪的现象。由于server有听众的一个实例上正常启动,这是不是从开始监听器的实例手动启动是正常的。所以写下来未能找到离奇写的原因。1、故障现象Starting CRON daemondone Oracle 10g auto start/stop Sta…

java_IO总结(一)

所谓IO,也就是Input与Output的缩写。在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容的操作主要分为…

mysql两张表联查更新语句_sql联合查询语句(两张表)

展开全部sql联合查询语句(两张e69da5e6ba9062616964757a686964616f31333365643662表)是:select A.ID,A.VALUE,A.TYPE,A.NAME,B.KEY,B.ID,B.VALUE,B.NAMEmin(VALUE),max(VALUE) from A left join B on A.ID B.IDwhere B.NAME"你输入的名字"and B.VALUE &g…

TextField对象相关的属性和方法总结

TextField对象相关的属性和方法,内容十分丰富,下面几个表格: 表一 TextField 对象的方法 方法 说明 TextField.addListener 加入接收触发事件如文本域内容变化或滚动变化的监听对象,触发事件可以参看最后一个表。 TextField.getDe…

ocsng mysql connection problem_OCSNG 介绍及其工作原理

OCSNG部署:http://wowking.blog.51cto.com/1638252/994441OCSNG 是什么呢?OCSNG就是Open Computer and Software Inventory Next Generation是一款免费软件,它使用户能够盘点网络工程师的IT资产。OCS-NG收集有关运行OCS客户端程序(“OCS Inve…

hdu--5135--贪心

尽量选边数大的3根木棍来组成一个三角形 一直到无法选取为止 这边计算三角形面积 还是用 海伦公式比较方便 1 #include <iostream>2 #include <algorithm>3 #include <cmath>4 #include <cstring>5 #include <iomanip>6 using namespace std;7 …

动易sitefactory 数据库 mysql msssql_动易SiteFactory配置文件(web.config)常用配置节解读...

配置声明节复制代码代码如下:这个节定义了,web.config文件中将要用到具体配置节点的名称,处理程序等.从这里可以看出,siteFactory里采用.net 企业应用程序块(enterpriseLibrary),里的数据访问块等.urlrewritingnet,是用来进行地址重写的,接着是asp.net ajax 配置节声明,最后有个…

Struts2_2_第一Struts2应用

web.xml文件的配置与1同样。1&#xff09;HelloWorld类的代码&#xff1a; public class HelloWorldAction {private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message message;}public String execute() {…

centos7

一.CentOS下的JDK安装(jdk1.7.0.67) http://www.cnblogs.com/Jenny-sider/p/3898583.html 二.centos下 配置多个tomcat nginx绑定域名和ip http://www.cnblogs.com/Jenny-sider/p/3908254.html 三.centOS 7.0默认使用的是firewall作为防火墙 启动firewall systemctl start fire…

About SOuP

http://www.soup-dev.com - SOuP的强大我不必多说。 - Maya 也可以开发出象houdini这样有趣的节点&#xff0c;这再soup之前是很难想象的。所以说soup的作者Peter的NB之处就在这里&#xff0c;他给人们指出了挖掘Maya潜力的一条路。 - MayaAPI真的是已经把maya能扩展的接口都暴…

mysql 动态sql 解析json数据_在SQL 中生成JSON数据

这段时间接手一个数据操作记录的功能&#xff0c;刚拿到手上的时候打算用EF做&#xff0c;后来经过仔细考虑最后还是觉定放弃&#xff0c;最后思考再三决定&#xff1a;1、以模块为单位分表、列固定(其实可以所有的操作记录都放到同一个表&#xff0c;但是考虑到数据量大的时候…

Microsoft Edge 浏览器开始支持webkit私有样式

微软表示新版的浏览器Edge(spartan)不会再增加新的私有属性&#xff0c;同时移除了部分-ms-属性&#xff0c;但很多标准在没有支持到之前&#xff0c;会使用webkit的api。Edge开发工程师Jacob Rossi列出了一份Edge所支持的webkit api列表。 CSS Core webkitBackgroundwebkitBac…

cemtos7上mysql8两个实例_centos7上配置mysql8的双主互写

注意:1、主库1&#xff1a;10.1.131.75&#xff0c;主库2&#xff1a;10.1.131.762、server-id必须是纯数字&#xff0c;并且主从两个server-id在局域网内要唯一。【主节点1】vi /etc/my.cnf[mysqld]log-binmysql-binserver-id2019001log_slave_updates1重启服务service mysqld…

不属于python数据类型的是_Python不支持的数据类型有( )。

(2) 完成划线处的代码填空: Dim classname(1 To 8000) As String 存储原始数据中的班级名称 Dim selectabc(1 To 8000) As String 存储原始数据选项的值 Dim xiangmu(1 To 8000) As String 存储原始数据选项的序号 Dim n As Integer Private Sub Command…

【Daily Scrum】12-08

因为TFS的一些问题&#xff0c;到现在一直都看不了Sprint 3的burndown and burn rate. 今天的scrum发现这个Sprint期间大家组里的事情都比较多&#xff0c;不过大家还是有很努力地在晚上和周末来完成ASC Master的任务&#xff0c;辛苦~ Member Today’s WorkTomorrow’s WorkFe…

java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示

java 转换图片为字符串&#xff0c;将字符串转换成图片显示&#xff0c;该方法只适用于比较小的图片传输&#xff0c;50K以内&#xff1a;try{// 将图片转换成字符串File imgFile new File("f:\\Vista.png");FileInputStream fis new FileInputStream( imgFile );b…

图片延迟加载和滑动翻页

一&#xff1a;预加载 首先&#xff0c;我们需要引用JS&#xff0c; <script src"/Scripts/JQuery.LazyLoad.js"></script>其次&#xff0c;修改img的格式为&#xff1a; <img data-original"/images/img01.png" src"/images/grey.gif…

基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?...

那些迷信设计模式的人&#xff0c;来修改一下这个方法吧。看看你最终的代码膨胀为几倍。。。 1 public virtual PasswordChangeResult ChangePassword(ChangePasswordRequest request)2 {3 if (request null)4 throw new ArgumentNullException(&qu…

inotify-tools、sersync配置及压力测试

一、Inotify介绍&#xff1a; Inotify 是一个 Linux 内核特性&#xff0c;它监控文件系统&#xff0c;并且及时向专门的应用程序发出相关的事件警告&#xff0c;比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。使用 inotify 很简单&#xff1a;创建一个文…