fengjiachun / Jupiter

Jupiter是一款性能非常不错的, 轻量级的分布式服务框架

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Jupiter 性能提升明显

hank-whu opened this issue · comments

commented

现在 turbo 只在 existUser 一个项目上占优了,其他项目 Jupiter 都是第一了。
抽空发个文章吧,分享下经验。

有新的benchmark数据了么?

commented

还没弄好,不过快了。
我发现 Jupiter 在 Windows 系统上性能并没有这么突出,在 Linux 上性能就好很多,这是怎么回事?

我没有win电脑, mac和linux平台jupiter默认分别使用了 native kqueue和native epoll, win平台就是java nio
不知道你从数据上看差距多大? 超过10%? 超过10%的话应该不是上面的原因

我没有加入太多依赖平台的东西 除了native epoll/kqueue (netty自带, turbo应该也有使用) 和 affinity thread
而且affinity thread在你的benchmark代码里还没有打开

我先分享下jupiter性能提升的主要原因, 并没什么黑科技
你的benchmark是一个客户端32个线程阻塞调用一个server, 对于一个jupiter server来说client个数和并发量有点小, 瓶颈并不会在server的处理能力上, 而是在client的发送能力上, server要做的就是降低延时, 最直接的就是先去避免过多的上下文切换
所以我把server的provider 线程池摘掉(callerRuns配置) 完全用netty io线程处理就可以了, 上下文切换减少以后 性能就提升一节

坐等大神给出方案

@hank-whu Hello, 鲁大神,看了你的介绍turbo-prc 的简书博客,以及 rpc-benchmark 的项目,希望有机会常沟通。我们有不少人在 Jupiter QQ 群里:397633380, 诚挚邀请入群。

@hank-whu 还有一个原因,

config.setOption(JOption.WRITE_BUFFER_HIGH_WATER_MARK, 2048 * 1024);
config.setOption(JOption.WRITE_BUFFER_LOW_WATER_MARK, 1024 * 1024);

第一轮压测的时候 listUser表现不是太好, 是因为写数据超过高水位线了, jupiter默认策略是超过高水位线禁止继续读

turbo代码我近期也在学习, RandomLoadBalancer里面二分法查找代替原来的遍历就是看到了turbo代码后恍然大悟, 欢迎加入jupiter群继续交流, 共同提高 :)