说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

提升服务扩展性和冗余的八个编码方向

HTML文档下载 WORD文档下载 PDF文档下载
服务调整中的核心思想就是尽可能的提高其扩展性和冗余,然而怎么样编写才能让程序具备高的可扩展性。Mike Hadlow将其总结为:无状态、粗粒度API、幂等、容错、避免给实例特定的配置、监视、越简单越小越好,并一一发表了自己的5年架构设计的经验之谈。

在过去的5年,Mike Hadlow一直从事与服务架构的实施和调整。在其个人博客上发表了软件扩展设计的相关看法。

以下为译文

服务调整中一个核心思想就是尽可能的加强扩展性和冗余。为了实现这个思想就必须使服务器满足“可扩展”。这意味着什么?

对软件进行扩展我们可以通过两种手段:“横向”和“纵向”。

  • 纵向扩展着眼的是服务中的单个实例。最简单的实现方法就是将软件运行在性能更强的机器上,拥有更快的处理器以及更多的内存;然而在编码的过程中我们同样可以改善软件的性能。而公司最常见的方法就是使用LMAX。但是纵向扩展有着很多弊端:首先,成本的剧增;硬件性能每次提高,其价格都成指数性增长。其次,针对硬件提升做软件优化带来的成本同样相当之大。最重要的是,纵向扩展并不支持冗余;对应用程序进行纵向扩展完全将小的单点故障转换成大的单点故障。
  • 横向扩展。对比专注单个实例的性能,我们可以运行多个应用程序实例。而横向扩展的优势就是:取代购买一个更大、更昂贵的主机,我们只需要购买更多便宜的主机。通过使用合适的架构设计,我们可以进行大量的扩展。同样这也是许多大型互联网公司使用的手段,比如:Facebook、Google、Twitter等等。横向扩展同样带来了更好的冗余,单点故障将不会对整个系统带来影响。出于这个原因,横向扩展是建立高扩展性、冗余的首选方案。

这样的话,建立可扩展性系统的关键就是将其构造成横向扩展服务。为了做到这一点,我们需要遵循一些基本原则:

  • 无状态。任何储存了用于其它服务交互状态的服务都很难被扩展。举个例子:一个内存中包含了请求会话状态的网络服务,通常需要一个复杂的会话负载平衡器。想比之下一个无状态服务,仅仅简单做循环负载平衡就可以了。对于一个网络应用程序(或者服务)你需要避免使用会话状态或者任何静态的以及应用程序级别变量。
  • 粗粒度API。要做到无状态,服务包含的API最好只做单一交互。一个啰嗦的API,东面设置一些数据,西面做一些转换,最后在做结果的返回,这就意味着有状态的设计。服务将需要识别一个会话,然后在多个连续的调用中保持会话信息。对比单一的调用或者是通信,服务需要封装这些操作用到的全部信息才能完成运算。
  • 幂等。可扩展基础设施需要在竞争约束中做权衡,其中之一就是确保交付。基于多种原因,“至少一次”的保证永远比“只有一次”更为简单。如果你可以让应用程序实现同个消息的多样交互,那么扩展起来将变的异常简单。
  • 容错。如果想保证整个服务不会因为单点故障而崩溃,那么必须使用多个服务实例来实现冗余。你必须考虑到故障的发生,将服务和基础设施设计的具有高容错性。这里的观点就是:如果你不想服务崩溃,你必须做好了崩溃的准备。
  • 避免给实例特定的配置。一个可扩展服务应该被设计成各个实例的独立运行,不能将自己特殊化。不需要对一个实例进行区别其它实例的配置。这将包括针对服务特殊实例进行设计的通信机制,或者针对服务特殊实例的需求使用一些非约定协议。取而代之的是,我们应该依靠基础设施(负载均衡器、发布-订阅消息应用等)来管理一组服务之间的通信。
  • 简单的自动化部署。性能满载却不能进行部署,那么扩展的优势也就荡然无存了。必要时扩展系统必须可以自动的进行新实例的部署处理。
  • 监视。我们需要清楚服务的性能是否已经满载以便加入新的服务实例。监视一般涉及到基础设施;我们需要监视CPU、网络、内存的使用情况,在达到触发点后予以提醒。当触发内部触发器时,有些情况下引进特殊的应用程序提醒也是值得的,比如:内存序列中排队项达到一定的数量。
  • 越简单越小越好。对于任何软件项目,这都是个好的建议;与建立可扩展弹性系统更是息息相关。大型单片代码很难被监视和扩展,尽量把系统建立成多个小块,可以轻松单独的处理每个部分。确保服务使用非专属、通用标准的通信,可以避免供应商的锁定;考虑使用异构平台。HTTP JSON就是内部通信上很好的选择;因为每个平台都有HTTP和JSON库,并且有很多可以用于扩展系统的成品基础设施。

原文链接: How to Write Scalable Services (仲浩/编译 王旭东/审校)

欢迎关注@CSDN云计算微博,了解更多云信息。

VB利用 EM_LINESCROLL 信息控制 TextBox 的卷动。 命名的技巧 -VB资料 目录所占的字节数-VB资料 VB判断文件是否在IE的缓存中 屏蔽文本框的右键菜单-VB资料 VB取得长文件名 VB取得临时文件名 VB取得某个目录底下所有文件大小总和 VB取得文件的扩展名 VB取得文件内容 确定 TextBox 有几行-VB资料 确定是 WINDOWS 的可执行文件-VB资料 让打印机只打印一行-VB资料 VB如何把批处理文件转换成EXE文件? VB如何调用 Office VB如何将文件删除到回收站 VB如何快速移动文件? VB如何让文本框输入完后,直接跳入下一行? VB如何使用vb取得一个文件的控制权 VB如何使用文件复制对话框? VB如何使用资源文件 VB如何用Dir()函数来列出C下所有TMP文件并且用文本框输出 VB如何在 VB 中使用 Winzip 来压缩文件? VB如何在DOS程序结束执行时,自动将其关闭? VB如何在VB中实现Undo(撤消)功能? VB如何在VB中实现目录遍历 VB如何在Windows操作系统中改变文件打开方式 VB如何知道硬盘是使用那一种文件系統(FAT32,FAT16)? VB如何自动更动成中文输入 VB删除整个目录 VB设置打印页边距 怎么在一个接口中调用另外一个接口 大力过来 帮忙! 论坛里有保留cookies的功能,但是有些用户说cookies保存不了 大家好!我有问题很急呀!!! 哪个函数可以打开多个文件? 大家请进来说说吧,用什么软件编辑jsp和javascript能测试出网页中提示的:完成,但网页上有错误,这种错误所在的行和具体的什么错误。 关于在课件项目中应用XML的问题,回复心得或相关链接都有赠分 多个附件上传和下载 VB.NET中樹是怎樣展開 我可以把ACCESS数据库的表导出到SQL SERVER中吗? 图片存在目录与存在数据库各有什么优缺点呢? 点击这个框架中的网页能够打印另一个框架中的内容吗 求救~!!!! 请问如何将台式机硬盘上的内容copy到笔记本的硬盘上?? ADO数据集的服务器游标的使用问题 为什么我在发布Delphi程序时总出现Error1324错误 快来救救我的硬盘呀 mydatastore.update() 返回 -1 如何知道出什么错? 如何获得当前光标所在程序的edit框的handle? [ 请教 ] 关于FREE风格的数据窗口的显示问题! 这个存储过程怎么写呀? 如何添加新函数?急!急!急! 我在网上把一副图片设为背景,我不知道他的文件名,我现在想把它找出来,请问如何办到。在右键-属性-背景中他的名称是“Internet Explo 请高手指点。 vb函数使用的问题 简单两台机对连问题 做斑竹、做会员就可以领工资(RMB)! jsp中session跨war包调用问题 PB画图问题 请各位搞WEB挖掘的朋友都留个联系方式 如何指定 记录集的游标类型,大侠请进,小弟急用(内附代码)!!! 请投上一票! mssql一个很奇怪的问题,如何解决啊!“键列信息不足或不正确,更新影响到多行” 天杀的3721,大家进来共同讨伐这有史以来最恶心的XXX,进来都有分 c写的cgi怎么获得表单中某个下拉菜单的value和text.在线等 哪有VC的SP5下载? 要实现这样的功能,SQL该如何写(急,在线等待)? 哪里可以找到string.format的格式说明啊? 【无限祝福】:璇玑、大力相知相伴 查找数据库的问题。。。。。 在asp.net中怎么调用第二个窗体呀???请教大家帮我。thanks ,中秋快乐 Jsp保存时出错 Response.Write rs("ans")中間的rs 能否在FTP站点里上传文件夹? 教师节快乐!发了2000多,不够塞牙缝! 一个菜鸟问关于公共对话框组件的问题 大家快来给找错误呀!!!高分回报!!! 用c如何调用java程序? 导入导出问题? 遇到一个问题:Domino数据库的最大尺寸是如何定义的? 英语翻译今天给旅游景区做路牌提示,要将以下几句翻译成中文,1:林火无情防为主,毁林有罪法必究.2:沐浴阳光享受绿色,森林防火请切记.对不起,我搞错了,应该是把那2句翻译成英文! 斯石英和金刚石形成的相同原因是什么 斯石英是怎样形成的 茶发酵后的产物是什么? “机器缫丝创于简村堡陈启沅,名曰‘丝偈’,以其用机器也;又名‘鬼’,以其交洋人也”这句话是什么意义啊?27.《南海县志》(19l0年)载:“机器缫丝创于简村堡陈启沅,名曰‘丝偈’,以其 he dish is passed to you on either of your sides是什么意思,on either是什么 母系社会有什么特征 求音乐:"门前有一条弯弯的小路"是什么歌的歌词? 博采众长 转眼成长 英语怎么说 英语翻译Knowledge based systems make recommendations by knowledge reasoning and need not learn users’ preferences first.There are three kinds of knowledge in knowledge based recommender systems,namely user knowledge,product knowledge and functi 寺里有增人若干,除方丈外,其余增人都下山挑水或抬水.年轻的挑水,年长的抬水,共用了12根扁担和19只水.寺里共有增人多少?【方法提示:年轻的一人1根扁担2只水桶,年老的俩人共1根扁担1只水 舆论不支持 安倍政权解禁集体自卫权再舆论不支持 安倍政权解禁集体自卫权再花圃变向日葵园 新加坡华人被称“向日特写:伦敦举办“感受中国”教育展美国国务卿克里访波兰 有望就监听事件苹果联合创始人:希望苹果与谷歌成为合穆尔西受审质疑审判合法性 埃及民众意环球佳丽秀美衣 美国小姐化身“变形金法醉汉从马戏团“绑架”羊驼逼其合影留消息称利比亚首都发生激烈交火 枪声持英内政部拒绝两中国教师入境签证被批“广西北部湾经济区新开2对动车 四城交几乎全民就业 香港申请“综援”者持续\"六一\"张家界武陵源5D体验馆免我国三北地区最大芍药观赏基地进入观赏广西将举办首个工业旅游节韶关市区暴雨 部分路段内涝积水实施交亚太区外派员工薪酬福利 香港第五高“铁观音”发源地福建安溪:让世界喝一海口警方介绍如何防范电话诈骗:谎称固2014首届中国与阿拉伯国家商品展6北京推出家庭应急物资储备建议清单祈云空间之心仙道狂龙大荒武神风流男护理谋臣与王子全职保安末世危机之我能升级异界狂君纨主超级副本洛阳博物馆旅游老街旅游河南博物院旅游玄奘寺旅游水社码头旅游灵山寺旅游花瓶石旅游小琉球旅游瑞丰夜市旅游高雄眷村文化馆旅游莲池潭旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘