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)
- 接口说明
获取指定图片中的tag内容
输入:objurl,userid
输出:tag list获取指定话题(如:"G-SHOCK")下面所有的图片
输入:tagname
输出:objurl list,tag desc 等信息为某个图片添加标签tag
输入:objurl, userid, tagname(这个为了归一化,前端会有选择引导)
输出:是否成功
2. 可选的技术方案
- 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服务层。