• Talk Is Cheap,Show Me The Code: 三种语言个人框架压测(Java/Go/Rust)


    • 学一门语言,最好的方式对我而言,是实现一个框架
    • 迄今,实现了3个框架

    框架大致介绍

    • 成熟度:Java 最成熟,并且也已用于生产环境,Go其次, Rust为近期才完成

    • 语言熟悉度: Java=Go>Rust

    • 设计思想: 核心只有一个: cdi (context with dependency inject),Go,Rust的框架都源自于Java框架,而Java框架源于Spring,所以可以认为所有的3个框架的核心都是Spring的思想, 但是不会为了ioc 而ioc,导致复杂度几何级上升,3个框架都是实现了功能上的解耦,以插件的形式组合形成一个应用

    • 编码思路: 三个框架的编码可以说是一模一样吧,同种思路不同实现而已,Java是注解,Go则是标签,Rust则是宏. 同时编码本来就是A借鉴B,B借鉴C的过程,所以所有框架的实现都借鉴了部分开源代码的实现, 算是活学活用吧,看了很多框架的源码

      • Java: spring,springboot-grpc,netty,fabric-sdk-java,rpcx-java,distributor(这个不是非常熟悉)
      • Go: rpcx,Hyperledger-Fabric/Fabric-ca ,ipfs,gin,tendermint,cosmos-sdk,libp2p
      • Rust: rust确切的说,整体不是非常非常熟悉,但是也大致借鉴了怎么玩的,也是一门挺有意思的语言. 主要是借鉴的tokio 和rocket
    • 从开始到基础搭建结束耗时时间而言, Rust>Java>Go,Java大概写了一个月左右吧,Go 很快,基于Java基础的设计,不到一个月就写完了,而Rust 中途磨磨唧唧了挺长一段时间,所以大概是2个月左右搞完(实际编码可能也是1个月吧),这2个月是从0开始边学边写

    本篇博文的目的

    • 目的很简单,只有一个,那就是测试下框架的一些基础性能
      • rest 方面的qps
      • … 有想到再补…

    压测环境

    • 工具
      • jmeter
    • 配置
      • 自身的开发机,mac m1 max 64G,24C
    • 压测方案
      • 1000线程
      • 2000线程
      • 5000线程
      • 10000线程
      • rest qps
        • 每个框架都会携带 100个api接口
        • jmeter随机[1-100]请求,计算qps
        • Java 会进行预热处理,但是不会进行额外的gc调优(因为不会~,最好的调优方式就是升级jdk,目前为11)

    预期结果

    • 预期的话,Rust 会qps最高,Go>=Java,原因的话
      • 一部分与编码有关,Go的逻辑处理都是没开routine的我记得,Java都是开了threadpool进行处理,Rust的话,全程异步routine的形式
      • 语言方面,无GC的语言自然要比GC语言性能高,但是Go和Java相比的话,Go生态上对标的是Java,虽然号称就是比Java快,但这也太小看Java 了,小看JIT,小看Netty了, 但是Java框架,是在Spring基础上再封装,而Spring已经在servlet基础封装过了,所以多次封装必然会带来性能上的损失
      • 测试有关, 压测并不规范,下次压测开始时系统运行情况不会与上次相同,没有控制变量

    实际结果

    • qps
      • 1000线程
        • Java: 30820.10/s
        • Go: 38862.74/s
        • Rust:55222.67/s
      • 后续再继续~
  • 相关阅读:
    scala基础入门
    3d 贴图下载quixel
    CentOS7系统搭建web环境 php&nginx&pgsql
    vue组件间传参以及方法调用总结
    画画用电容笔还是触控笔?电容笔10大品牌排行榜
    java计算机毕业设计西安财经大学校园一卡通管理系统源代码+数据库+系统+lw文档
    【Qt】文件系统
    深度学习 Day 19——数据增强
    Python编程学习:random.shuffle的简介、使用方法之详细攻略
    《低代码指南》——维格云和Airtable的比较
  • 原文地址:https://blog.csdn.net/Coder_Joker/article/details/126776612