#5 楼 @vincenting 我们线上一直在用这个,但是这个图片不能太大,图片太大转换会出错
如果图片不大的话,nginx 有原生的库直接支持图片的 resize....
报个名,回来自己打车么?
passenger 牛逼的功能都是企业版提供的呀..
这个如何解决在判断权限的过程中带来的额外的数据库查询? 一个页面我有 10 个地方需要匹配权限,我需要额外的查询 10 次数据库?
预定一个位置
报个名
mark as data
给你们报个 bug,页面宽度不到 1K 像素的时候,你们首页的登陆会从 个性后缀 电子邮箱 马上开始体验 变成
个性后缀 电子邮箱 马上开始体验
会影响你们首页的展现
你的 Activity 对象的 target_obj 存的是 { "id" => ObjectID("xxxx"), "type" => "Commmunity" }的数据,因此,你在代码中查询的时候,你传入的 hash 中的 id 字段是 object_id 对象,但是你直接查询的时候,"id" 就是 string 对象,不匹配的
@neverlandxy_naix mongid 适合做业务性比较强的,不太强的 api 场景用 mongodb 的原生驱动做有更好的性能,毕竟 mongoid 在现在这个版本还没提供连接池的能力,做 api 的话没有连接池,没有 EM,差距还是很大的
@huacnlee 应该是的,它判断是否失败应该是基于 http response code 的
@guyanbiao 相对来说,如果在内网环境下,不在本机测试反而更加准确的可以体现性能,毕竟,api 服务器大多数都是通过 tcp 访问的
@luikore 嗯,有时间看一下,ab 也可以 post 的吧,postfile...
@realwol 随便写,写得好大家收益,写的不好有人指导,稳赚的事情呀
@xstmjh 受宠若惊啊!~
@robbin 同意这个观点,基于回调的写法真的太反人类了,再挖掘性能就等日后有兴趣再说了,毕竟现在还没有这么大的性能需求
不过还是挺有收获的,自己这么摸索几下
感谢@kenshin54 后面配合做的测试,理解也深刻了许多啊
@outman 我也是尝试了解下 nodejs,感觉应该发展的不错,但是不尝试么又不知道,就自己写点代码摸索摸索,对比对比,就出了这次的事情,哈哈
@outman 纯粹探索在单进程模型下,同样 EM 的实现,ruby 和 node 有多少差距,以此来推断如果逻辑很素的但是性能要求很高的服务比较适合哪个体系来做
最初的目的是同样的 api 服务器,基于 rack 的 em 的 ruby 和基于 express 的 node 的差距比较大,所以比较好奇,差距在哪里
Fiber 作为编程很友好的并发形式,其实我个人还是很喜欢
@kenshin54 EM 1.0 默认是开启 epoll 的
@jjym 现在才终于理解了你的意思..啊,我真是太 2 了...
@kenshin54 是啊,因为 c10 并发对于纯 socket 的 server 来说负载太低了
@kenshin54 这个场景用 c 100 n 1000 来测似乎到不了 CPU 的极限啊,用 c 200 n 10000 测试,数据就稳定多了
@kenshin54 果然,性能差距体现在 rack 和 rainbows 上面啊,冤枉 EM 了啊
@kenshin54 你的 ruby 2.0.0 提升好大啊 你的代码我换到 ruby-2.0.0-p247 下大概也就跑到了 1600req/s
, 远没有你提升这么巨大.... 尝试把你的结果 JSON 化出来看看
@kenshin54 说错了,我 100 个并发,1000 个请求,em-mongo 不带连接池的吧
我写了个类似的,有一个 256 的连接池,还是基于我原来的异步游标
纯性能大概到了 1300req/s
你的没有 JSON 序列化,我的机器上大概跑出了 1500req/s
已经比基于 express 的快了
#encoding: utf-8
lib_path = File.dirname(File.expand_path(__FILE__)) + '/lib'
$:.unshift lib_path
require 'rubygems'
require 'mongo'
require 'json'
require 'eventmachine'
host = %w{ 192.168.10.223 27017 }
$mongo_connection = Mongo::MongoClient.new(host[0], host[1], :pool_size => 64)
$db = $mongo_connection['data']
require 'async'
Async.host = '192.168.10.223'
Async.port = '27017'
class Server < EventMachine::Connection
def receive_data(data)
# $collection.find(:creator => '[email protected]', :as => 'task_state_log').limit(1).each do |doc|
# send_data doc
# close_connection_after_writing
# end
cursor = $db['data'].find(
{ :creator => '[email protected]', :as => 'task_state_log' }
).limit(1)
# puts Thread.list.inspect
Async::AsyncCursor.new(cursor: cursor).to_array do |data|
send_data JSON.dump(data)
close_connection_after_writing
end
end
end
EM.run do
EM.next_tick do
end
EM.start_server '0.0.0.0', 4001, Server
end
@kenshin54 我仔细看看,你有测过 n 100 c 1000 的情况不
@sailtsao 顶!~~~~~