本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:)
原文地址http://www.hfadeel.com/Blog/?p=122
可伸缩性的艺术(2)
我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及一些指南。我们现在开始吧!
Go to : 第一篇- 可伸缩性原则(http://www.hfadeel.com/Blog/?p=120)
构件可伸缩性软件系统之指南:
1.降低处理时间:
在任何一本关于优化的书中,都会提到代码优化——采用更好的算法、代码、设计或者策略去降低系统的处理时间。同样的,降低请求的处理时间是最重要的可伸缩性指南之一。增加应用系统的数量确实可以减少每个独立工作单元处理的时间。比如说:降低一个用户的请求时间意味着你可以在相同的时间内处理更多的用户请求,但是如何做到呢,请看下面的例子。
* 缓存:如果数据和代码没有配置在一起,那就缓存数据以减少一次又一次获取数据时的开销。
* 并行化:通过将问题分解,并同时处理分解后的独立步骤,我们可以减少每个工作单元处理的时间。
* 远程处理:减少访问远程服务所花费的时间,比如,可以使接口的粒度更粗一些。我们应该铭记:远程VS本地是一个很明显的设计的结果,而考虑分布式计算的第一准则是不要分散你的对象。
* 配置化:通过数据和代码的配置,减少任何获取数据的开销。
* 池:利用池思想减少任何贵重资源的开销。
当我们需要时,我们总是尽量引入抽象和层的概念使那些以往的技术更加容易,但是软件开发者总是在最高级的抽象和最低级的抽象之间迷茫。没错,这些可以可以帮助我们解耦合,但是他们往往增加了软件的复杂度,影响了系统的性能,特别是在每一层做数据视图转换的时候。因此,如果我们降低这些抽象性 ,并且使用尽量少的层,那么处理时间就会达到最小化。除此之外,我们应该明白运行时服务可能成为我们系统的瓶颈,除非系统间存在特定的服务级别的约定。
我想说的是:你无需实现这些所有的关键点,因为不存在一个固定的模式。
2- 分割:
降低处理时间涉及到其他的概念,比如我刚才说的代码优化、分割、异步。
你可以通过功能分割你的系统(关联属于相同功能的部分,不同功能的部分分割出去)。更进一步说,越是解耦合 不相关的功能点,系统的可伸缩性便会越高, 这样你可以独立的扩展这些相互独立的功能。比如,支持多台web服务器的数据库服务器,当它出现瓶颈时,你必须采取办法缓解,其中一个方法是分割策略。简单来说,就是将整个架构拆分的很多可以管理的模块。将一个元素分割成多个小模块可以获得很好的可伸缩性,这也是很多大型网站比如Amazon、Facebook使用的。所以,分割是一个好的解决方案。
3.异步处理
在你将系统分割之后,可伸缩性的下一个关键步骤是充分利用异步。如果组件X通过同步调用组件Z,那么组件X和组件Z就仅仅的耦合在一起了,而且相互耦合的系统的可伸缩性是绑定在一起的——如果打算扩展组件X,必须先扩展组件Z,而且在可用性方面也存在同样的问题。回到刚才的逻辑,如果X->Z,那么!Z->!X,换句话说,如果x不起作用了,那么Z也就不起作用了。相反的,如果组件Z和组件X是异步调用的,不管采用队列、组播消息、批处理任务,或者其他的方式,每个组件都可以独立的扩展。除此之外,组件Z和组件X的可用性也是相互独立的——不管B是否down掉,A都可以继续运行。
这一原则也可以应用于基础设施,比如SEDA(阶段性事件驱动架构)这种技术在单独的组件内部使用异步调用,最后却可以保持原有编程模型的可阅读性。在组件之间,这一原则也是一样的——尽可能的避免同步调用产生的耦合,除此,各个组件之间没有任何直接调用。在各个层次将过程分解成若干阶段,通过异步调用相互关联,这是可伸缩性的至关重要的一步!
4.关于并发的可伸缩性
和前面并行化的研究一样,我认为可伸缩性问题就是并发问题,并发问题就是并行化问题:)。通过并行化,尤其是异步流程去降低处理时间都是非常不错的主意。但是要切记,并行化不像异步那么容易。我会给出一些如何通过并行化降低处理时间的小建议:
* 如果你确实需要使用锁(比如对象锁,数据库锁等),尽可能的减少锁定的时间。
* 尽量最小化共享资源的连接,并且尽量不要去连接一些临界资源(比如:异步调度)
* 任何需要并发的设计需要慎之又慎,因为任何安全共享的资源都可能成为潜在的可伸缩性的瓶颈所在
分享到:
相关推荐
并避免过度获取节点js 作为后端打字稿用于减少错误和装饰器对graphql的支持型态用于迁移,因为正在使用的打字稿和类型为orm的为此PostgreSQL 关系Redux 用于状态管理以实现可伸缩性图请求作为graphql bcoz的客户,...
AccDC是可伸缩,跨浏览器和跨平台兼容的动态内容管理系统,可自动呈现动态内容,以确保仅屏幕阅读器和键盘用户的可访问性。 在皇家艺术协会的支持下,AccDC获得了美国劳工部的“无障碍获取奖”,并在2012年由美国...
网站伸缩性架构7.网站的可扩展架构8.网站的安全架构9. 淘宝网的架构演化案例分析10. 维基百科的高性能架构设计分析11.海量分布式存储系统Doris高可用架构设计分析12.网购秒杀系统架构设计案例分析13.大型网站典型...
6 永无止境:网站的伸缩性架构 7 随需应变:网站的可扩展架构 8 固若金汤:网站的安全架构 第3篇 案例 9 淘宝网的架构演化案例分析 10 维基百科的高性能架构设计分析 11 海量分布式存储系统Doris的高可用架构...
Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在《JAVA并发编程实践》中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用...
在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式...Windows CE.net是微软公司推出的32位嵌入式操作系统,具备多任务、实时性、模块化及可伸缩性、强大的通信能力以及图形界面友好等优点。将操作
在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式...Windows CE.net是微软公司推出的32位嵌入式操作系统,具备多任务、实时性、模块化及可伸缩性、强大的通信能力以及图形界面友好等优点。将操作
推荐书籍这是一个回购,其中列出了我推荐的书籍,因为我将其更多地投入到了操作/基础架构...保持数据准时容量规划的技巧:扩展Web资源可伸缩性的艺术:现代企业的可伸缩Web架构,流程和组织 系统思考系统思考:入门失败
该应用程序使用Node.js和MVC架构构建,旨在确保易用性和可伸缩性。入门可以在找到该应用程序的实时且功能齐全的部署关键技术HTML CSS 引导程序JavaScript jQuery的车把Node.js Express.js PostgreSQLPg-Promise ...
还对可伸缩性进行了改进。 拉请求比欢迎:) 如何使用 先决条件 安装Python 3 +点(适用于GAN服务器) 安装NodeJS + npm(用于前端) 安装PostgreSQL服务器 启动GAN服务器 cd gan_server # Install dependencies ...
Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在《JAVA并发编程实践》中,这 些便利工具的创造者不仅解释了它们究竟如何工作、如何使用...
静态站点具有可伸缩性,安全性,并且几乎不需要维护。 但是它们有一个缺点。 并非所有人都对编辑文件,构建项目并将其上传到某个地方感觉良好。 这就是满足感发挥作用的地方。 使用Contentful和Gatsby,您可以将...
雷格利德 Rayglider尝试使glsl开发现代化,并为网络上的艺术表达提供强大的媒介。 它的各个方面都可以使用RayGL(一种glsl变体)在驱动器中直接驱动... url缩短服务为它们的分发提供了同样出色的可伸缩性。 资源 例子
12.4 数据挖掘的艺术 301 12.5 小结 301 第13章 实现数据挖掘结构 302 13.1 实现CRISP-DM生命周期模型 302 13.2 用BIDS构建数据挖掘结构 303 13.3 用BIDS增加数据挖掘模型 305 13.4 处理挖掘模型 308 13.5 验证挖掘...
要了解更多信息,请阅读以下网站的Apex 4X发行文章: : AccDC是可伸缩,跨浏览器和跨平台兼容的动态内容管理系统,可自动呈现动态内容,以确保仅屏幕阅读器和键盘用户的可访问性。 在皇家艺术协会的支持下,AccDC...
摩天大厦不可伸缩 混合开发的时代已经来临 性能至上 留意架构图里的空白区域 学习软件专业的行话 具体情境决定一切 侏儒、精灵、巫师和国王 向建筑师学习 避免重复 欢迎来到现实世界 仔细观察,别试图控制一切 架构...
12.4 数据挖掘的艺术 301 12.5 小结 301 第13章 实现数据挖掘结构 302 13.1 实现CRISP-DM生命周期模型 302 13.2 用BIDS构建数据挖掘结构 303 13.3 用BIDS增加数据挖掘模型 305 13.4 处理挖掘模型 308 13.5 验证挖掘...
12.4 数据挖掘的艺术 301 12.5 小结 301 第13章 实现数据挖掘结构 302 13.1 实现CRISP-DM生命周期模型 302 13.2 用BIDS构建数据挖掘结构 303 13.3 用BIDS增加数据挖掘模型 305 13.4 处理挖掘模型 308 13.5 验证挖掘...
12.4 数据挖掘的艺术 301 12.5 小结 301 第13章 实现数据挖掘结构 302 13.1 实现CRISP-DM生命周期模型 302 13.2 用BIDS构建数据挖掘结构 303 13.3 用BIDS增加数据挖掘模型 305 13.4 处理挖掘模型 308 13.5 ...
6.JS+flash立柱广告代码仿百度MP3搜索右侧可伸缩的立柱广告效果 7.JS版本黑色超动感二级菜单导航模块代码 穿越火线游戏网 8.JS经典3款风格QQ客服在线浮动右侧与左侧代码 9.JS精简网页音乐播放器 浮动在页面...