好吧,我到处搜索,似乎无法在网上找到详细的资源来解释Apache的ab服务器基准测试工具的结果.我用我认为完全不同的参数进行了几次测试,但看到了非常相似的结果(我很难想到这意味着我的网站正在完美缩放!).如果有一个详细的资源,有人可以指点我,如何理解这个测试的结果,或者如果有人想在这里创建一个,我认为这对我和其他人都非常有用.
有一个小工具(商业现成的)应用程序,我在定制,其中几页页面需要很长时间来加载某些数据分发.(我说这个实例中加载的页面大约需要3分钟......而且时间呈指数级增长).
显然这是不可接受的,但有研究可以指出可接受的响应时间是什么?
我想要一些可能讨论响应时间的好的研究.
在我目前正在研究的系统中,有一个进程将大量数据加载到数组中以进行排序/聚合/其他.我知道这个过程需要优化内存使用,但在短期内它只需要工作.
鉴于加载到数组中的数据量,我们不断达到内存限制.它已经增加了好几次,我想知道增加它通常是一个坏主意吗?或者只是机器有多少RAM?
该机器有2GB的RAM,memory_limit目前设置为1.5GB.我们可以轻松地为机器添加更多RAM(无论如何都会).
有其他人遇到过这种问题吗?什么是解决方案?
考虑到你是一个没有资金用于自己的服务器场的创业公司.哪种现有解决方案可以让您高枕无忧,任何突然增加的流量都不会降低一切.
我知道这不仅取决于硬件,因此我们计划至少拥有一个负载均衡器,内存缓存和少量数据库服务器.
是否可以在AWS上进行设置,以便在流量增加时自动添加实例和带宽?
您可以为部署noob提供哪些其他建议?谢谢.
ps:如果问题过于宽泛或者反映出对所提到主题缺乏经验,我会提前道歉,但这就是我问的原因.
当我启动Apache Bench测试时:
ab -n 10000 -c 1300 http://domain.com/test.php
我收到错误:
socket:打开的文件太多(24)
当我改为'-c 1000'时它工作正常.
因为我可以有超过1000个并发用户,我想修复socket太多打开文件问题或增加参数.怎么做到这一点?
我在centos 5上使用lighttpd.
我们来看一个简单的Django示例.
应用程序/ models.py
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
token = models.CharField(max_length=32)
Run Code Online (Sandbox Code Playgroud)
应用程序/ views.py
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from forms import RegisterForm
from utils.utilities import create_user
@csrf_exempt
def register_view(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
create_user(form.cleaned_data)
return HttpResponse('success')
Run Code Online (Sandbox Code Playgroud)
utils的/ utilities.py
def create_user(data):
user = User.objects.create_user(username=data['username'], email=None, password=data['password'])
user.save()
profile = UserProfile()
profile.user = user
profile.token = generate_token()
profile.save()
Run Code Online (Sandbox Code Playgroud)
在这个例子中,有人可以提供Celery的实现吗?想象一下,这是一个每秒有数百个请求的大型项目.
我正在开发一个介于电子邮件服务和社交网络之间的Web应用程序.我觉得它有可能在未来发展壮大,所以我担心可扩展性.
我决定为每个活跃用户创建一个单独的SQLite数据库,而不是使用一个集中式MySQL/InnoDB数据库然后对其进行分区:每个"分片"一个活跃用户.
这样,备份数据库就像每天一次将每个用户的小型数据库文件复制到远程位置一样简单.
扩展将像添加额外的硬盘来存储新文件一样简单.
当应用程序超出单个服务器时,我可以使用GlusterFS在文件系统级别将服务器链接在一起并运行应用程序,或者构建一个简单的SQLite代理系统,允许每个服务器操作相邻服务器中的sqlite文件.
并发问题将是最小的,因为每个HTTP请求一次只能触及一个或两个数据库文件,成千上万,而SQLite只会阻止读取.
我敢打赌,这种方法可以让我的应用程序优雅地扩展,并支持许多很酷和独特的功能.我打错了吗?我错过了什么吗?
更新我决定采用一种不太极端的解决方案,到目前为止工作正常.我正在使用固定数量的分片 - 准确地说是256个sqlite数据库.通过简单的散列函数将每个用户分配并绑定到随机分片.
我的应用程序的大多数功能每个请求只需要访问一个或两个分片,但有一个特别需要在256到10个不同的分片上执行简单查询,具体取决于用户.测试表明,如果所有数据都缓存在RAM中,则需要大约0.02秒或更短的时间.我想我可以忍受这个!
UPDATE 2.0我移植应用到MySQL/InnoDB和能够得到有关规则请求相同的性能,但对于需要碎片步行一个请求时,InnoDB快4-5倍.出于这个原因,以及其他原因,我正在放弃这种架构,但我希望某个地方找到它的用途......谢谢.
什么时候使用像CRDT而不是paxos或筏这样的东西是个好主意?
我经常惊叹于我可以随时随地访问www.google.com,并快速获取返回的页面.
当然,他们压缩他们的输出并保持最小的设计 - 这有所帮助.
但他们必须同时拥有数以百万计的点击量,这些点击是网站上DNS列为"www.google.com"的.
所有设置了Apache或其他Web服务器的人都知道事情很棒且超快,直到你开始获得几千个同时连接,更不用说数百万了!
那么,他们是如何做到的呢?我猜他们有一整套服务器机器,但你永远不会知道它.刚才我去Verizon的网址是www22.verizon.com.你永远也看不到"www22.google.com",从来没有.
任何想法他们使用什么特定技术,或者我们非谷歌凡人可以使用哪些技术来做同样的事情?
A部分:
Erlang有很多关于运行并发代理的成功案例,例如数百万个同时进行的Facebook聊天.这是数以百万计的代理商,但当然不是网络中的数百万个CPU.当在LAN/WAN上进行"水平"扩展时,我无法找到Erlang扩展程度的指标.
让我们假设我有许多(数万个)物理节点(在Linux上运行Erlang)需要通过LAN/WAN进行通信和同步少量不常数据.在什么时候我会遇到通信瓶颈,而不是代理之间,而是物理节点之间?(或者这只是工作,假设一个稳定的网络?)
B部分:
我理解(作为一个Erlang新手,意思是我完全错了)Erlang节点尝试连接并相互了解,从而产生N ^ 2连接点对点网络.假设A部分不仅仅适用于N = 10K,可以轻松配置Erlang(使用开箱即用的配置或平凡的样板,而不是自己编写完整的分组/路由算法),将节点集群化为可管理的通过群集/组层次结构分组和路由系统范围的消息?
scalability ×10
apache ×2
distributed ×2
amazon-ec2 ×1
architecture ×1
benchmarking ×1
celery ×1
crdt ×1
database ×1
django ×1
duplication ×1
erlang ×1
heroku ×1
http ×1
lighttpd ×1
memory ×1
paxos ×1
performance ×1
php ×1
python ×1
raft ×1
sharding ×1
sqlite ×1
webserver ×1