标签: scalability

CodeIgniter是大型应用程序的明智选择吗?

从开发的角度来看,我一直在阅读伟大的codeigniter.我确信使用该框架将使开发过程更快.但我问自己的问题是,单独制作的框架会不会满足您的需求?

CI虽然广告占用空间很小,却会"陷入困境",因为它基本上是一个框架框架(后面指的是PHP作为C的框架)?有没有很好的方法来分散负载?在CI中,是否存在任何大型应用程序?

谢谢卡斯帕尔.

php scalability codeigniter scale

23
推荐指数
2
解决办法
2万
查看次数

什么是大型网站不使用MySQL与ASP.NET的原因是什么?

我从Stack Overflow和其他大型网站的高可伸缩性中读到了这篇文章.许多大型高流量.NET站点如lotsoffish.com,MySpace和Stack Overflow都使用.NET技术并将SQL Server用于其数据库.在文章中它说Stack Overflow中的一个消息来源说:

随着您添加越来越多的数据库服务器,SQL Server许可证成本可能会非常高昂.因此,通过扩大规模并逐步扩展非开源软件,您可能会陷入财务困境.

为什么这些网站不使用MySQL而不是SQL Server?

mysql sql sql-server asp.net scalability

23
推荐指数
5
解决办法
7668
查看次数

制作需要扩展的网站的内容是什么?

我打算构建一个可以获得大量流量的应用程序.(请不要说我不会获得流量,这是针对内部网络的,所以流量会在那里.只是试图避免'你不会得到那么多的流量,不要担心它.)

至于我期望的流量类型,用户将浏览各种动态创建的(基于用户帐户详细信息).在这些网站上,用户可以提交文本输入.加载页面和处理用户输入都将命中数据库.加载显然是读取,但处理输入将需要读取和写入.输入也可能影响其他用户的视图.如果发生这种情况,我将需要通知其他用户刷新页面.

我需要做什么样的事情才能在大量用户的负载下崩溃?

什么成为限制因素?数据库东西?前端的I/O?

我以前从来没有真正开发过一个严肃的网络应用程序,我正在寻求一些帮助.

编辑:我正在考虑使用Erlang作为后端,因为我已经使用了一点点,并且非常喜欢所有并发的东西.这是一个可行的选择还是我应该尝试更传统的东西?

scalability web-applications

23
推荐指数
1
解决办法
575
查看次数

海边规模吗?

Seaside被称为"异端网络框架".使其成为异端的一点是它有很多共享状态.然而,根据我目前的理解,这会妨碍简单的扩展.

另一方面,Ruby on rails共享尽可能少的状态.众所周知,与现代的smalltalk vms相比,它的扩展性非常好.flickr使用php并扩展到极其庞大的基础架构......

那么有没有人在海边扩展方面有一些经验?

smalltalk scalability seaside

22
推荐指数
6
解决办法
2197
查看次数

FlockDB与neo4j相比如何?

无论FlockDBNeo4j的是保持大图数据集的开源框架.有没有人熟悉这两种产品的比较?

scalability graph neo4j flockdb

22
推荐指数
1
解决办法
8463
查看次数

可扩展的Node.js应用程序架构

在过去,我只在我的本地机器上玩Node.js,所以我只有单进程Node.js应用程序的经验.现在我想创建一个我可以在网上发布的Web应用程序.

这个Web应用程序会像一个多人游戏-使用Socket.IO客户端-服务器通信,快速处理HTTP请求,咕噜任务管理,等等-我想用其他NPM包,以及用于各种任务.

我想设计这个应用程序的架构

  • 启用水平可伸缩性(后来,当我有很多访问者时,我不必重写整个应用程序)
  • 最小化不同执行环境的依赖性(最大化可移植性)

如何使用Node实现此目的?

我想高级架构将包括:

  • 不同的服务器进程(每个进程都将运行Express实例并处理传入的HTTP请求).
  • 某处应该有负载均衡器.
  • 可选:可以定期运行并处理"共享数据"的后台进程

由于我的应用程序是一个多人应用程序,每个用户都可以与其他在线用户交互,我应该存储一些可以在这些进程之间共享的公共状态("共享数据").

为了简单起见,首先我不必保留这个共享数据,所以我想我应该使用像Redis这样的内存数据存储.

大局看起来像这样:

示例Node.js应用程序体系结构

这个设计提出了一些问题:

如何产生进程?

我应该使用Node child_processcluster模块并手动启动工作进程吗?顺便说一句,是否可以手动启动它们,例如,如果我将我的应用程序部署到HerokuNodejitsu

要么: is there a better way to store these information in a config file?

我的意思是,如果我可以通过编辑代码而不是配置条目来配置我想要的服务器实例数量会更好.

系统边界?

如果我手动生成进程,那么(我猜)所有进程都将在同一个(虚拟)服务器上运行.

如果这个服务器有4个CPU内核,那么你最多可以产生4个Node实例,因为如果你产生更多,你的CPU将进行上下文切换,这会破坏整体性能.

如果我需要更多流程实例,我该怎么办?假设我需要100个服务器实例.我是否必须将我的应用程序部署到25台服务器并在每台服务器上生成4个进程?

在我看来,像Nodejitsu这样的托管服务会以某种方式隐藏你的系统边界层,但我不知道它在实践中是如何工作的.

特别是有这个"共享数据"提供程序组件.我想这个提供程序(如Redis服务器)必须在不同的服务器上运行,因此它可供所有进程使用.但在这种情况下,它很容易成为瓶颈,不是吗?

负载均衡器?

如果我使用某些托管服务,我是否必须自己设置负载均衡器层?


编辑:

回答几个实际问题:在第一步,我想要无缝地处理4-500个并发用户(Socket.IO连接).这是我可以实际实现的一定数量的访问者.

但我很好奇,设计一个可以轻松扩展的应用程序架构是可能的(如果是的话,如何?).假设我的网站将从一天到下一天变得流行,而不是与几百个并发用户打交道,第二天我必须服务几千人.

据我所知,像Heroku和Nodejitsu这样的云托管服务可以很容易地适应这些场景 - 你只需要增加worker/dynos /的数量 - 但它只有在你拥有合适的应用程序架构时才有效.

关于共享数据:我不想坚持下去.我只想把它留在内存中.由于Socket.IO,一方面需要一些共享数据提供者 - 一个用户能够向另一个"节点"中的用户发送消息.为此,我将使用Redis作为共享数据提供程序.Redis需要处理的事务数量等于Socket.IO发送/接收的消息量,~1000-1500消息/秒.

另一方面,需要一些共享数据提供者,因为我想根据几个标准连接用户.之后,后台进程会定期重新计算/细化这些连接的概率("权重").我已经知道如何实现高效的数据结构来处理对这个内存表的快速插入/删除.因此,"共享数据提供程序"组件将包含一些可以存储这些连接的服务器端代码(可能是Node.js).

我知道它是TL; DR但是我希望它能回答你关于这个问题的所有技术问题.:)

javascript scalability heroku node.js

22
推荐指数
1
解决办法
6816
查看次数

分布式事务和/或群集中共享数据的Java解决方案

集群/分发Java服务器应用程序的最佳方法是什么?我正在寻找一种方法,允许您通过添加更多应用程序服务器和更多数据库服务器来水平扩展.

  • 您会建议采用哪些技术(软件工程技术或特定技术)来解决此类问题?
  • 您使用什么技术设计持久层以扩展到许多读取器/写入器扩展应用程序事务并扩展对共享数据的访问(最佳方法是消除共享数据;您可以应用哪些技术来消除共享数据).
  • 似乎需要使用不同的方法,具体取决于您的事务是读取还是写入繁重,但我觉得如果您可以优化"写入"繁重的应用程序,这对于"读取"也是有效的

"最佳"解决方案允许您为单个节点编写Java应用程序,并希望"隐藏"访问/锁定共享数据的大部分细节.

在分布式环境中,最困难的问题总是归结为多个事务访问共享数据.似乎有两种常见的并发事务方法.

  1. 显式锁(在分布式系统中的多个节点之间极易出错并且协调速度很慢)
  2. 软件事务内存(STM)AKA乐观并发,如果事务发现共享状态已更改(并且稍后可以重试事务),则在提交期间回滚事务.哪种方法可以更好地扩展,在分布式系统中有哪些权衡取舍?

我一直在研究扩展解决方案(以及提供如何扩展的示例的一般应用程序),例如:

  1. Terracotta - 通过使用Java的并发锁定机制(synchronized,ReentrantReadWriteLocks)扩展Java内存模型以包含分布式共享内存,提供"透明"扩展.
  2. 谷歌应用程序引擎的Java -让您可以在您分发哪个服务器处理事务写,将当中的"云"服务器进行分布式Java(或Python)的应用程序和使用BigTable的存储持久性数据(不知道你的交易是如何访问共享数据或处理锁定争用,以便能够有效扩展)
  3. 暗星MMO服务器 -暗星是Sun的开源MMO(大型多人在线),他们规模在一个线程事务的方式交易,允许一个给定的事务,只进行了一定的运行,并承诺,如果它需要长期将回滚游戏服务器(有点像软件事务内存).他们一直在研究支持多节点服务器设置以进行扩展.
  4. Hibernate的乐观锁定 - 如果你使用的是Hibernate,你可以使用它们的乐观并发支持来支持软件事务内存类型的行为
  5. Apache CouchDB应该自然地以网状配置"扩展"到许多读写器DB.(有一个很好的例子,说明如何管理锁定数据或确保事务隔离?):
  6. JCache - 通过将结果缓存到可以在Google appengine中使用的常见查询来扩展"读取"繁重的应用程序,以访问memcached并缓存其他经常读取的数据.

Terracotta似乎是最完整的解决方案,因为您可以"轻松"修改现有服务器应用程序以支持扩展(在定义@Root对象和@AutoLockRead/Write方法之后).问题是要真正从分布式应用程序中获得最大的性能,分布式系统的优化实际上并不是一个想法,你必须设计它,知道对象访问可能被网络I/O阻止.

为了正确扩展,似乎总是归结为分区数据和负载平衡事务,例如给定的"执行单元"(cpu core - > thread - >分布式应用程序节点 - > DB主节点)

似乎通过群集使任何应用程序可以正确扩展,您需要能够根据数据访问读/写对事务进行分区.人们提出了哪些解决方案来分发他们的应用程序数据(Oracle,Google BigTable,MySQL,数据仓库),以及一般如何管理分区数据(许多写入主数据库,以及更多读取数据库等).

在扩展数据持久层方面,在将数据划分给许多读者/多个编写者方面,哪种类型的配置最佳扩展(通常我会基于给定用户(或通常是您的任何核心实体)对数据进行分区"root"对象实体)由单个主DB拥有

java concurrency scalability transactions optimistic-locking

21
推荐指数
1
解决办法
5919
查看次数

如何在Heroku上使用自动缩放网络dynos?

使用Heroku,当需要时,一个AUTO如何在web dynos方面扩大规模?假设我们每2-3分钟就会吸引100名并发用户.如果我们的应用程序卡在5-6网络dynos上.我们搞砸了.

其次,我无法在24小时内监控流量,以确定是否需要向上或向下扩展.

到目前为止,我已经看过http://hirefireapp.com/http://www.heroscale.com/ 有关这两个的任何建议吗?

scalability heroku ruby-on-rails-3

21
推荐指数
4
解决办法
9867
查看次数

为什么Node.js可扩展?

node.js可伸缩,是什么意思?node.js服务器的哪个部分是可伸缩的.我读到它是一种单线程技术,不适合需要大量CPU资源的应用程序.这些事实不符合可伸缩性,那是什么意思呢?

scalability node.js

21
推荐指数
1
解决办法
1万
查看次数

Redis在哪里存储数据

我正在使用redis for pub/sub以及服务器端缓存.我的意思是我的应用服务器将redis服务器作为一个进程运行(也用作缓存).我有几个瘦客户端(运行redis客户端)以pub/sub模式连接到这个app服务器.我想知道redis存储缓存数据的位置?仅在服务器中,或者客户端中也会有副本.如果有近100个redis客户端通过pub/sub通道连接到服务器,那么以这种方式使用Redis也是个好主意.

谢谢

caching scalability redis hazelcast

21
推荐指数
6
解决办法
2万
查看次数