我在BAT学到的技术工具-使用nodejs搭建支持高并发的http服务

1. 面对的需求

  • 图片标签商品服务,类似产品:nice,商品滤镜:
    ![单图片维度](http://7u2g5z.com1.z0.glb.clouddn.com/屏幕快照 2015-01-08 下午5.38.36.png)

![tag标签维度](http://7u2g5z.com1.z0.glb.clouddn.com/屏幕快照 2015-01-08 下午5.43.22.png)

  • 接口说明
    1. 获取指定图片中的tag内容
      输入:objurl,userid
      输出:tag list

    2. 获取指定话题(如:"G-SHOCK")下面所有的图片
      输入:tagname
      输出:objurl list,tag desc 等信息

    3. 为某个图片添加标签tag
      输入:objurl, userid, tagname(这个为了归一化,前端会有选择引导)
      输出:是否成功

2. 可选的技术方案

2种技术方案A/B
  • php 使用lighty 配置fastcgi模式
  • nodejs使用lighty配置redirect模式
  • 由于搜索核心的流量经过php集群,所以,本次从开发效率,并发请求支持效率(单机qps)上考虑使用nodejs搭建后端服务

3. 基于nodejs的技术方案

  • nodejs完成连接接入,结果处理拼装的工作,其中使用到了几个很好用的插件。
    pm2: 类似服务端的supervise,当进程意外崩溃后自动重启动;
    ![示例](http://7u2g5z.com1.z0.glb.clouddn.com/屏幕快照 2015-01-08 下午6.31.43.png)
    由于nodejs是单进程模型,pm2支持自动部署为多进程运行,可以更好的利用服务器cpu;

    redis:支持的nodejs的redis proxy

  • redis
    使用了set作为value类型,牺牲部分性能达到去除重复标签的功能。

  • 管理redis的web 工具
    redis-commander
    ![示例](http://7u2g5z.com1.z0.glb.clouddn.com/屏幕快照 2015-01-08 下午6.20.30.png)

4. 效果总结

  • 实际压力测试,读写混合的pv单机可以在1W qps左右。
  • 总结nodejs适合应用场景:高并发流量,不是很重的处理逻辑,http服务层。

你可能感兴趣的:(我在BAT学到的技术工具-使用nodejs搭建支持高并发的http服务)