蒸气与Kitura基准测试

IBM-Swift团队的Chris Bailey最近在Swift London上发表的讲话显示了服务器端Swift的有趣基准图。

我对这些结果感到非常惊讶,因此我针对最新的Vapor(0.15),最近一次针对性能的版本(0.11)和针对Kitura(0.24)的Vapor’s Engine(在Vapor 0.15中使用0.4)运行了一些本地基准测试。

结果表明,Vapor的最新性能版本击败Kitura,而最新版本则落后5%。 在IBM-Swift的图表中看不到40%的领先优势。 此外,可以说与Kitura更具可比性的Vapor Engine具有领先优势。

IBM的测试可能正在发现Vapor的弱点,但由于IBM的结果中未包含确切的环境和基准,因此我们很难知道。 如果有人了解环境和过程的详细信息,请发表评论,以便我们改进调优!

结果

与往常一样,这是本文中运行的基准测试的深入细节和结果。

蒸气(0.11)

  Gertrude:〜tanner $ wrk -d 10 -t 4 -c 8 http:// localhost:8080 / plaintext 
运行10s测试@ http:// localhost:8080 / plaintext
4个线程和8个连接
线程统计平均值Stdev Max +/- Stdev
延迟438.06us 97.97us 5.03ms 84.30%
要求/秒4.53k 140.02 5.04k 70.79%
182307个请求的读取时间为10.10秒,已读取25.91MB
请求/秒:18050.53
传输/秒:2.56MB

蒸气(0.15)

  Gertrude:〜tanner $ wrk -d 10 -t 4 -c 8 http:// localhost:8080 / plaintext 
运行10s测试@ http:// localhost:8080 / plaintext
4个线程和8个连接
线程统计平均值Stdev Max +/- Stdev
延迟475.26us 82.59us 3.63ms 88.41%
要求/秒4.19k 153.49 4.44k 83.91%
168460个请求的时间为10.10秒,读取15.90MB
请求/秒:16679.73
传输/秒:1.57MB

蒸气引擎(0.4)

  Gertrude:〜tanner $ wrk -d 10 -t 4 -c 8 http:// localhost:8080 / plaintext 
运行10s测试@ http:// localhost:8080 / plaintext
4个线程和8个连接
线程统计平均值Stdev Max +/- Stdev
延迟403.89us 103.08us 5.38ms 93.14%
要求/秒4.94k 246.49 5.19k 90.10%
198474请求在10.10s中读取9.46MB
请求/秒:19651.14
传输/秒:0.94MB

Kitura(0.24)

  Gertrude:〜tanner $ wrk -d 10 -t 4 -c 8 http:// localhost:8090 / plaintext 
运行10s测试@ http:// localhost:8090 / plaintext
4个线程和8个连接
线程统计平均值Stdev Max +/- Stdev
延迟459.65us 205.53us 9.85ms 95.29%
要求/秒4.32k 675.34 5.33k 61.04%
173126个请求在10.10秒中读取了23.57MB
请求/秒:17141.44
传输/秒:2.33MB

当然还有源代码。

蒸气(0.11)

 进口蒸气 
 让app = Application() 
  app.get(“ plaintext”){要求 
返回“你好,世界”
}
  app.globalMiddleware = [] 
  app.start() 

蒸气(0.15)

 进口蒸气 
 让drop = Droplet() 
  drop.get(“ plaintext”){要求 
返回“你好,世界”
}
  drop.globalMiddleware = [] 
  drop.serve() 

蒸气引擎(0.4)

 导入HTTP 
 最后一类的响应者:HTTP.Responder { 
func response(to request:Request)throws-> Response {
let body =“ Hello World” .makeBody()
返回响应(正文:正文)
}
}
 让服务器=尝试服务器< 
TCPServerStream,
解析器,
序列化器
>(端口:端口)
 尝试server.start(responder:Responder()){错误 
打印(“错误:\(错误)”)
}

Kitura(0.24)

 进口Kitura 
 让路由器= Router() 
  router.get(“ / plaintext”){请求,响应,下一个 
response.send(“你好,世界!”)
下一个()
}
  Kitura.addHTTPServer(onPort:8090,with:路由器) 
Kitura.run()