大家好,我是一个开源后端项目(LANDZ)的创建人。因为本贴不是讨论具体语言,该项目也没有正式发布,我暂将此信息发布在这个节点。
该项目上周实现了“自我驱动”,也就是项目的网站使用LANDZ自己的web栈运行,项目的网站在:
landz.org(run在米国的独服上,最近一周来联通访问都很慢,据信海缆未完全修复)
(另:页面尽量做到responsive,但小屏幕访问可以预见会有些排版问题)
1. 简洁。基于Java 8(和“可以在Java8上运行”是两个概念,本项目应该是全球第一个Java8使用比较充分和成熟web栈项目,但我karma很低,发HN没有意义),Java8在源码层支持函数作为第一公民,可读性接近动态和函数语言(大家有意见的话,我们可以探讨)。
2.高性能。该项目提供如下API:
A. Channel API提供wait-free/lock-free的线程间通讯(ITC)。其中,HyperLoop提供一个数据结构版的(简化)Disruptor RingBuffer,其roundtrip延迟比Disruptor小50%到一倍,最大通量相近;再如,MPMC提供第一个开源Java领域的无锁多生产者多消费者队列的实现(目前我所见过2个其他实现都有严重的潜在多线程bug),其不竞争情况下在mobile i7上即能提供每秒50M端到端消息,高于AKKA的AbstractNodeQueue(MPSC队列)。
B. 无锁/零复制/零垃圾的线程安全OffHeap内存分配器zmalloc。在单/双线程测试中,分配/释放速度比native的jemalloc/ptmalloc更快,是Netty ByteBuf的20倍以上;
C. 基于zmalloc的Buffer API,支持不检查边界,比Netty ByteBuf快30%;
D. 基于JFFI的ZNR(Z本地运行时库),提供比传统JNI更快和更干净的系统调用及Sockets栈支持(只支持Linux/x86-64)
E. 零overhead的契约API和异步logging API(未发布)。
3. KISS和可组合的API。
A. 层次化API设计,既有底层的性能,也提供类型安全接口,避免过度工程和隐藏。
4. 工程维护和运维。
A. 支持模块。将来会有一个滚动更新(rolling update)的模块仓库。
B. 基于Nashorn引擎的脚本(第一公民)支持,提供构建,测试,部署(这3项已初步支持),监控和运维支持。
5. 完整的支持REST的HTTP栈 - Z-stack
未发布。但特点有:
A. 手工的HTTP消息解析器,比Netty的3倍,比nodejs的5倍(比较的是修改过的java移植版,但我相信nodejs的本尊快不了多少,因为修改过后已经比原来快了1倍,还没有加callback)
B. 定制的lock-free异步线程池
C. 768M堆设定下,进行TechemPower测试时,无fullgc,younggc停止时间(stop-time)小于总时间的千分之1(需要在可用性上做平衡,REST栈并不是全OffHeap设计,但TCP栈已可以做到长时间无GC);
D. 在基于TechemPower测试集的plaintext本地测试中,通量是Netty的1.3倍(延迟有相同幅度改进)。(注:在TechemPower的测试中这项测试中,前几名通量近饱和,所以区分度不大;需要区分的,请看round 9的Peak硬件上的测试结果。)
和一些项目的比较:
1. Netty
Netty有10年的历史,很多中国开发者知道、使用或分析这个框架。Netty的设计属于典型的框架,在其之上的应用需要继承一些类和实现一些方法。Landz在设计上恰与Netty反向,Landz强调API的可组合,所以,Landz之上的应用是从高到低组合不同层次接口来实现。Netty在多线程方面,除了通用IO线程池方案,并无明显优化,其其同步方式主要靠AtomicX类(类自旋锁)和同步关键字。最新的ByteBuf分配器使用同步关键字作为全局池访问的同步机制,在多线程测试中效率低下。Landz强调多核/可伸缩/可组合的架构,同时提供工程上的支持(比如脚本),其意在重塑Java后端工程(当然现在属于YY),这和Netty完全不同。
2. 云风的skynet
c语言框架。有些设计思路异曲同工。虽说是游戏服务器,但不以通量为其设计目标。同时,Landz强调无等待/无锁的多核可伸缩架构,但我印象中skynet里主要是用锁。
3. 陈硕的muduo
C++网络库。本身是有是思想的。作者明确说明不以性能为设计目标,但其测试显示性能比ningx要高。其强调了多线程,但我仅仅看到了一些IO线程通用设计说明。其具体通量性能可对比nginx在TechemPower测试中的排名(
http://www.techempower.com/benchmarks/)做参考。(列出上述项目,仅因为我印象中v2上有人提及,想必有一定群众基础。其实现实中还有很多类似项目,比如techempower上的若干,你会发现c+lua不只是skynet一家开源)
最后,想法:
1. 该项目的方案,在去年年中其实和v2上一位创业公司的总监聊过,人家估算我这个项目要做2年(也可能是人家架构师不喜欢我),没有谈成。当然我知道在中国做开源是件很难的,也感谢这位负责人至少在我们交谈中能很认可开源。
2. 项目做到现在,我希望在v2上(公司无论大小地点)能找些合作或赞助。我可以承诺的是,比您现有业务更大的并发及通量(两者并非一回事,同时并发这个概念也很有说法)和随之而来的更少的机器。其结果不一定涉及钱,也可以是您愿意LANDZ在其主页上留下贵公司的名字。
若有意向,可联系我,感谢:jin.phd at
gmail.com
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/107879
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.