`
soleghost
  • 浏览: 41852 次
  • 性别: Icon_minigender_1
  • 来自: 未知
社区版块
存档分类
最新评论

可伸缩性的艺术(2)

阅读更多

本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在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.关于并发的可伸缩性
和前面并行化的研究一样,我认为可伸缩性问题就是并发问题,并发问题就是并行化问题:)。通过并行化,尤其是异步流程去降低处理时间都是非常不错的主意。但是要切记,并行化不像异步那么容易。我会给出一些如何通过并行化降低处理时间的小建议:
 

   * 如果你确实需要使用锁(比如对象锁,数据库锁等),尽可能的减少锁定的时间。
    * 尽量最小化共享资源的连接,并且尽量不要去连接一些临界资源(比如:异步调度)
    * 任何需要并发的设计需要慎之又慎,因为任何安全共享的资源都可能成为潜在的可伸缩性的瓶颈所在
   

分享到:
评论

相关推荐

    行业文档-设计装置-可伸缩毛笔.zip

    总结来说,“可伸缩毛笔”的设计融合了硬件创新、软件技术、人机交互和艺术表现,它不仅是数字艺术领域的一次突破,也可能预示着未来更广泛的设计趋势,即科技与传统工艺的深度融合,以满足用户不断提升的需求。...

    行业分类-设备装置-可伸缩触控笔结构.zip

    1. 设计与艺术:对于设计师和艺术家来说,可伸缩触控笔提供了更自然的绘图体验,尤其对于需要细致描画或大范围涂鸦的情况,调整笔的长度可以提供更好的控制感。 2. 教育:在教育领域,教师和学生可以通过可伸缩触控...

    行业文档-设计装置-可伸缩粉笔用具.zip

    总结,可伸缩粉笔用具是现代科技与传统工具的巧妙结合,它以其独特的设计和实用功能,为教育和艺术领域带来了新的可能性。随着技术的不断优化和市场的逐渐接纳,我们期待这类创新产品能进一步改善教学环境,提升用户...

    炫酷flash伸缩菜单源码

    总的来说,"炫酷Flash伸缩菜单源码"是一个结合了技术与设计的艺术品,通过精心编写的ActionScript代码和巧妙的动画设计,为用户提供了一种直观且有趣的交互方式。尽管Flash的前景在某些领域变得不明朗,但其在创意...

    行业分类-设备装置-笔尖可伸缩的书写工具.zip

    2. 多功能性:根据不同的应用场景,笔尖可伸缩的书写工具可以设计成多种模式,如绘画、精细书写、普通书写等,满足不同用户的使用需求。 三、应用领域 1. 办公环境:在办公环境中,可伸缩的笔尖有助于在笔记、签名...

    行业文档-设计装置-可伸缩式台灯.zip

    2. 灯头旋转:为了满足全方位照明的需求,可伸缩式台灯的灯头通常可以进行360度旋转。这样,无论是在书桌的一角还是床头,都能轻松调整光照方向。 3. 动力系统:伸缩机构的运行需要动力支持,这通常由内置的弹簧、...

    行业文档-设计装置-可伸缩型铅笔套.zip

    总结,可伸缩型铅笔套是设计与科技的完美结合,它以用户为中心,通过技术创新解决了传统铅笔套的局限性,提升了使用体验。在未来,我们可以期待更多这样的设计装置出现在我们的日常生活中,让科技更好地服务于人类。

    行业文档-设计装置-可伸缩外置手写笔.zip

    2. **可伸缩设计**:可伸缩性是这种手写笔的独特特点,它允许用户根据需要调整笔的长度。这样的设计可以适应不同的使用场景,如在狭小空间中书写或绘画时缩短,而需要更长握持感时可以拉伸。此外,伸缩设计还可以...

    行业文档-设计装置-一种可伸缩型纸质屏风.zip

    通过以上分析,我们可以看到,一种可伸缩型纸质屏风的设计融合了机械工程、材料科学、人体工程学、艺术设计等多个领域的知识,是现代科技与传统文化的完美结合。这种设计不仅创新实用,而且具有较高的艺术价值和文化...

    行业文档-设计装置-一种可伸缩防滑书立.zip

    1. **可伸缩设计**:可伸缩书立的核心在于其尺寸的可调节性。这种设计允许书立适应不同大小的书籍,无论是厚重的参考书还是轻薄的小说,都能稳固地支撑。它通常采用滑动或折叠机制,使得用户可以根据实际需求轻松...

    行业文档-设计装置-一种可伸缩水粉笔.zip

    而“可伸缩”这一特性意味着该水粉笔可能采用了某种内部结构设计,使得笔芯能够在使用后收缩,保持整体长度的稳定,从而提高使用的舒适度和便利性。 设计装置的过程可能包括以下步骤:首先,设计师可能对现有的水粉...

    行业文档-设计装置-可伸缩自动下水毛笔.zip

    在本压缩包“行业文档-设计装置-可伸缩自动下水毛笔.zip”中,主要包含了一份关于“可伸缩自动下水毛笔”的详细设计方案。这份文档着重阐述了如何将传统毛笔与现代科技相结合,创新设计出一款具备伸缩功能并能自动...

    行业文档-设计装置-一种可伸缩的笔芯.zip

    可伸缩笔芯可能需要特殊的制造工艺,设计师需要在保持创新性和实用性的同时,兼顾成本效益。 6. **测试与验证**:在产品发布之前,设计需要经过多次原型制作和测试,以确保伸缩功能的可靠性和耐久性,这可能包括...

    行业分类-设备装置-可伸缩书写工具.zip

    6. 用户体验:可能涉及到用户对可伸缩书写工具的反馈,如握持感、书写流畅度、耐用性等。 7. 标准与认证:介绍行业标准和可能需要通过的质量认证,例如ISO标准、无毒环保认证等。 8. 创新与发展:探讨此类工具的...

    行业分类-设备装置-可伸缩的双笔芯的笔.zip

    标题中的“行业分类-设备装置-可伸缩的双笔芯的笔”表明这是一个关于工业设计或产品创新的专题,具体聚焦在一种特殊的笔——可伸缩的双笔芯笔。这种笔的设计理念可能旨在提高书写或绘图的效率和便利性,特别适合于...

    行业文档-设计装置-一种写生用便携式可伸缩画板.zip

    2. 结构设计:可伸缩画板可能采用了折叠或伸缩式的结构,可能涉及到机械工程原理,如铰链、滑轨或锁紧机制,以实现画板大小的变化。 3. 材料选择:考虑到户外环境和重量因素,可能使用了轻质但坚固的材料,如铝合金...

    行业文档-设计装置-一种可伸缩的粉笔套.zip

    标签“行业文档-设计装置-一种可伸缩的”强调了这个设计是针对特定行业的,可能是教育或者艺术行业,并且它的特性是可以伸缩,这可能意味着它具有适应不同大小粉笔或提供不同握持方式的功能。 压缩包内的文件“一种...

    行业文档-设计装置-一种可伸缩收藏的毛笔.zip

    在IT行业中,设计装置往往涉及到硬件创新和用户体验的优化,而“一种可伸缩收藏的毛笔”似乎将传统文具与现代设计理念相结合,旨在提供更便捷、高效的使用体验。这个设计可能融合了机械工程、人机交互以及材料科学等...

    java 并发编程的艺术pdf清晰完整版 源码

    这本书全面地介绍了Java平台上的并发和多线程编程技术,旨在帮助开发者解决在实际工作中遇到的并发问题,提高程序的性能和可伸缩性。 并发编程是现代计算机系统中不可或缺的一部分,尤其是在多核处理器成为主流的...

    行业文档-设计装置-一种可伸缩和可变亮度的铅笔灯.zip

    在本设计装置中,我们关注的是“一种可伸缩和可变亮度的铅笔灯”。这种创新的照明设备旨在提供灵活、便携且高度可定制的照明解决方案,尤其适合学生、设计师、艺术家以及任何需要精确光线控制的工作环境。以下是关于...

Global site tag (gtag.js) - Google Analytics