知识点

相关文章

更多

最近更新

更多

应用程序扩展性实现的十宗罪

2019-03-27 00:59|来源: 网路

可扩展性方面专家Sean Hull曾发表文章指出实现 可扩展性的五大毒药,最近他又指出了实现 可扩展性的五大致命错误

一、缓慢的磁盘I/O - RAID 5 -多用户的EBS。RAID 10可以提供良好的数据保护,同时具备良好 的读写性能。RAID 5设计意味着性能差,失败后修复时间长。在AWS上考虑使用预设的IOPS解决IO瓶颈问题。

二、使用数据库存储作业队列。数据库看起来很适合存储作业队列,但是轻负载的锁定以及日常的扫描 工作都会影响性能。使用类似RabbitMQ和SQS的专业软件可以消除这个瓶颈。

三、使用全文搜索。搜索似乎是数据库另一个完美的特性。但是大规模的搜索性能并不高,最好使用类 似Solr和Sphinx的专业技术。

四、在各层之间缓存不足。在应用程序和数据库之间使用memcache,在用户和Web服务器之间加载类似 于Varnish的页面缓存。为你的HTML选择合适的缓存。

五、太多的技术负债。重写问题代码,而不是持续完善写得不好的代码,因为从长期来看,这并不划算 。

六、对象关系映射。创建很难优化和调整的复杂查询。

七、同步,串行,耦合或锁定进程。锁就像停止标志,环岛才能保持道路畅通。行锁优先于表锁,采用异步复制,保持集群的最终一致性。

八、一个数据库副本。单一的数据库是一个瓶颈点。创建平行的数据库,让驱动程序在它们之间做选择。

九、缺乏监测。使用众多监控软件包之一,检测系统正在运行着什么。

十、缺少功能标识。能够通过一个标识关闭某些功能特性,峰值来袭时可以轻松的关闭功能降低负载。


转自:http://www.cnblogs.com/zhishan/p/3143576

相关问答

更多
  • C++中:用基类的引用指定派生类的对象,然后通过该引用来访问派生类的方法,这是基本的多态形式。(Java中用的接口的概念) 这样的好处是,程序的已知流程在没有派生类的时候就可以写好,以后要有新的功能,只要再写个派生类就可以了。举个例子,在电脑上显示图片,基本上要有读文件,解析文件,显示图形三个步骤,这些步骤可以写在基类中,然后具体的如何读文件,如何解析文件,如何显示,就交给派生类去做。
  • 您需要的技术称为架构。 无论您使用哪种技术,您都需要一个结构良好的可扩展性和冗余系统。 制作当前系统的整个体系结构图。 将每个组件标记为用户,作业,带宽,硬盘空间,内存或任何部件限制应用程序的限制。 这会给你基线设计。 现在绘制相同的图表,以满足您的可扩展性和冗余要求。 你可能不得不分解碎片才能使其工作,或者开发全新的碎片。 这张图将清楚你需要什么。 我想要解决的一个具体问题是数据库。 如果您可以将数据库拆分为多个逻辑行,以便不加入任何查询,则应该有单独的数据库。 除此之外,数据库的最佳配置是将每个数据库放 ...
  • 我们尽量使其尽可能地扩展,但我个人仅在最多16个核心盒上进行了测试。 达到这个极限我们已经看到几乎线性缩放。 We've tried to make it as scalable as possible but I personally tested only on up to 16 core boxes. Up to that limit we've seen almost linear scaling.
  • 这是我如何解决这个问题 面向对象首先找出问题所涉及的所有实体。 然后将它们作为类来解释。 在这种情况下,例如时钟基于不同的灯和它们的相互通信以显示实际时间。 所以我会认为Light是一个抽象类,并且还会从这个抽象的Light类继承不同的其他灯(例如RedLight,YelloLight等)并扩展它们。 Extensability 始终使用接口而不是直接访问类。 通过这种方式,您可以替换或扩展您的类 模块化 让您的模型(类),业务逻辑,UI逻辑等在不同的类库(或单独的项目)中分离。 希望这个简单的解释有所助 ...
  • 除了使用可扩展性良好的Web服务器(如果配置正确,apache可以很好地完成),还有一些技术可以帮助您快速处理尽可能多的客户端。 为静态内容使用单独的服务器(即nginx)。 这是一个特殊的服务器,专门用于尽快提供静态内容。 用于访问图像,js文件,css文件等...任何不会因一个Web请求而改变的事物。 使用memcached限制数据库调用。 当数据库调用成为瓶颈时,这将有所帮助(如果您在每个Web请求上多次ping数据库(动态内容),则可能会很快发生)。 这本质上是一个非常快的内存(读取:临时)位置,用 ...
  • 我的两分钱...混凝土5远胜于Drupal。 我现在有超过25个站点使用C5。 我过去已经安装了4个drupal,并将它们全部转换为C5。 我还广泛使用了Joomla,Expression Engine和PyroCMS。 当我第一次开始使用C5时,我的客户在最终用户更新页面方面有一些很大的优势。 对于普通的非技术用户更新内容而言,FAR更为简单。 这是我眼中的一个重大胜利。 大多数用户都在努力使用其他选项来更新内容,因为它不流畅或不像所见即所得。 C5的内联编辑功能非常出色。 也就是说,使用C5的标记命令将 ...
  • MEF当然有很多优点,大部分都是你提到的......可扩展性,模块化,生命周期管理以及我想要的第一类框架中的任何其他东西。 它也随框架一起提供,因此没有什么可以做的,你知道它将在各个实现中保持一致。 它在VS 2010中使用,所以在游戏中没有更广泛使用的现实世界的例子。 MAF并不是一回事。 它非常特定于System.AddIn,并且有一些更严格的要求和合同要满足。 话虽如此,它还专门针对某些人可能想要的特定类型的可扩展性。 如果我有一个非常小的占用空间或应用程序,只是不需要所有额外的开销,我只会采用自定义 ...
  • 对于Web API,您可以尝试使用IHttpActionSelector接口实现自定义操作选择器: public class CustomActionSelector : IHttpActionSelector { public override HttpActionDescriptor SelectAction(HttpControllerContext context) { var method = GetMethod(context); return n ...
  • 当我想到“大规模应用程序”时,我想到了三个截然不同的东西: 跨越大型横向扩展群集(远远大于1024个内核)的应用程序。 将处理比物理内存大得多的数据集的应用程序。 具有非常大的代码源基础的应用程序。 每种“可扩展性”引入了一种不同类型的复杂性,并且需要一套不同的折衷方案。 横向扩展应用程序通常依赖于使用MPI协调各种进程的库。 某些应用程序是“令人尴尬的并行”,并且为了完成任务(例如渲染动画电影的不同帧),需要在不同进程之间进行很少(甚至没有)通信。 这种应用程序往往是基于CPU时钟速率或内存带宽的性能限制 ...
  • 使用FSEvents或kqueues可以更好地处理是否已重命名文件或以其他方式修改文件。 Handling whether or not files have been renamed created or otherwise modified is better accomplished using FSEvents or kqueues.