在工作的项目中,我的主要开发语言是php,因需求或者为弥补php的缺陷,需要为php做各种各样的扩展,比如php本身不支持线程,没有队列,进程也不无法用于生产环境, 可以说php没有任何“程”,因而网上有较多的文章阐述如何实现php队列,多线程等等,在我的理解,与其用php本身实现这种无法保证健壮的特性,不如去发掘运用一些本身集成,且表现优异的语言。

微博中了解到了golang语言, golang的语法类似 C和python, 有这两种语言经验的同学入门会比较顺利! golang语言的优点在这里就不一一阐述了!!
学习了一段时间之后,维护的业务正好遇到瓶颈,另因我维护的业务属于接口层,逻辑比较简单,只输出json数据,所以开始着手利用golang重构现有系统,改造中,因部分同事对golang比较怀疑,另外网上的性能对比,大部分只是hello word输出,参考意义很小,所以利用线上两台内网机器,做了一次php和golang的正式业务性能对比

服务器配置 : 16核 E5620 @ 2.40GHz 11G内存
业务包含:DB(oracle)和 redis查询, 当有缓存之后,DB不再查询,直接读取redis, 批量查询两个主键

使用apache的ab测试 并发200,20000个请求

golang 并发测试
golang的qps 大约在 9675/s, 最高10200/s 左右 ,cpu利用率高峰在10.6% 上下golang开启了多核, 并且维护了40个redis连接池

go.png

上面php的链接是golang的url重写,为了兼容php的项目,不要误解!

PHP并发测试
php的QPS大约是 1726/s, 最高2100/s 左右, cpu 高峰在50.1% 比较恐怖

go-2.png

另外也测试了更多主键的批量查询, golang的处理能力降到 4700/s, php到 1078/s, 将ab并发加到400时, php开始出现请求失败的情况,
golang的并发加到2500后,惊讶其表现依然出色, 有怀疑的可以自行测试

上面的测试结果得出的结论: 因多核利用,golang的”多线程”, 还有redis连接池, 使得go在和php并发对比中遥遥领先,处理能力大约是php的4倍

所以建议维护着请求量较大,遇到瓶颈项目的同学可以尝试使用golang改善!

更多相关文章

  1. golang单元测试怎么写
  2. golang如何利用多核
  3. golang测试是否能ping通
  4. Golang能使用多核cpu吗
  5. 如何使用go优雅地撰写单元测试
  6. 关于go使用mysql测试
  7. 详细介绍测试几个xml的问题的案例
  8. Javascript 性能测试 [每日前端夜话0xB1]
  9. 用 Jest 进行 JavaScript 测试[每日前端夜话0xB6]

随机推荐

  1. Android关闭多个activity
  2. Android中文API —— VideoView
  3. android studio 3.1 Android Device Moni
  4. JS调用Java代码(Android)
  5. Android 上架应用市场整理
  6. 客制化android activity的title
  7. Android 4.0 的 GridLayout
  8. android 重点
  9. android键盘事件
  10. android Scroller