轻量级消息队列 Kue 的一些使用总结

最早接触 kue 是在 0.7 之前的版本,功能很少,很弱,但还是很好用的,那时候找过一些其他的消息队列,如 rabbitmq,kafka 之类的,但是都觉得太重了,跟 nodejs 的融合还是不太合适。 找着找着,就找到了 tj 大神搞的 kue,基于 redis 的 subpub 做的优先级消息队列,适合做一些离线任务,比如统计运算、发邮件消息以及异步业...

Read More

数据库分页最佳实践

2016-06-22 更新:MongoID 不能保证连续增长,因此,在这种情况下,不适合此种方案,如果是为了保证速度以及效率的话,可以放缓存,比如 redis 以及 memcached 之类的。 正文说起分页,最容易想起的就是 offset+limit,在 mongodb 里面可以用 skip+limit 实现,应该说这是最容易实现的功能,与前端的交互来说非...

Read More

Node.js APP dockerize

今天把做的项目直接做了 docker 化,一个是前端纯静态化的,另一个是后端 Node.js App,对于这两个项目,想用最简单的方式来使用 docker 静态项目最容易,直接用 nginx,将编译好的静态文件直接丢到 volums 里面即可: 123456789version: '2'services: nginx: image...

Read More

Docker ELK 搭建经验总结之二

运维了这么些日子的 ELK,解决了些问题,总结如下: 禁止内存换出 memlock在 docker 中运行 elasticsearch 有个很大的问题就是 1bootstrap.mlockall: true 这个选项不起作用,总是会报错,后来查了一下,在普通机器上需要运行这个命令: 1ulimit -l unlimited 但是如果你在 docker 里...

Read More

软件开发中的完美心理

很多时候,会发现会有一种求完美的心理: 这个功能实现好差,重构下吧; 新出了个工具或者框架,在项目中试试吧; 试过新工具或者框架之后,恩,好棒,用来改改其他的项目; 哎呀,时间不够了,但是还想做更好,怎么办。。。放着吧。。。; 应该说,大部分时间,完美心理可以促进我们主动去学习新知识,新框架,尤其是最近几年,技术是日新月异,我们能及时跟进潮流。 只是,有...

Read More

爬虫方案之 PhantomJS

发现 zombie.js 还是太弱了,很多地方不能满足需求,包括 request 的 HTTP 头也不合乎标准,于是硬着头去尝试下 PhantomJS。 这一试,我就后悔了,这么好的东西我居然不先尝试!怎么说呢,它比 zombie 好用太多,加载处理速度方面也是远远超过。唯一比较遗憾的是没有原生的 nodejs 接口,它只是一个环境,像 mocha 这样有自...

Read More

爬虫方案之 zombie.js

这几天在做爬虫的东西,腾讯的登录真能把人搞死。。。首先是对 http 头做了校验,一旦顺序或者大小写不对,立马报 403 错误,然后最后密码加密那块 md5 + salt + RSA + 还有自创的 TEA 加密,我完全被搞晕了。 只能说它们的安全措施是做得非常好的,我搞了几天,完全用它的 JS 代码,本来还有希望的,今天再一看,登录相关的逻辑又改了。。。 ...

Read More

管理后台最佳伴侣之 NgAdmin

这几天为了给系统新做个后台,到处找开源项目,真给我找到了,https://github.com/marmelab/ng-admin 用完只能说,太方便了~~~ 这么好的项目为啥我现在才发现,之前我是使用 angular 一步步搭起来了,自从用了 ng-admin 之后,2 天时间系统已经成形了,结合 rest API,后台的开发很简单,待我这个项目做好之后写...

Read More

Webpack 在后端 APP 中的使用

一直都说,webpack 一般只作为前端项目的开发工具使用,非常方便,但是因为它太好用了,而且 react 后端渲染也需要用到,所以纯粹用到后端项目也是可以的。 比如我用在 koa 项目中,为了更好得使用 babel,(babel-node 太慢了。。。项目大了之后挺要命的。。。),用 webpack 的 hot reload,缓存,然后部分编译,不要太爽~...

Read More

Docker ELK 搭建

记得上次说到的 #1 中提到,需要搭建 ELK 来实现数据需求,其实还有另一个需求:日志系统。 联系到最近一直在看的 docker,我就直接用它来部署了,申请了台 8 核 16G 机器,CentOS7,其实 ELK 还是得深入看看,毕竟 docker 只是用来部署,而不是帮你解决日志系统的问题。 项目地址在这里:https://github.com/xizh...

Read More

记一次 mongo 性能提升报告

最近的一直进行的工作包括提升 mongo 的性能,在我接手的这段时间里,在 newrelic 上的平均响应时长是 200-300ms,遇到任务堵塞还会暴涨到 600ms 左右一小段时间。 第一次尝试是升级 mongoose@4.4.9,效果是很明显的,响应时长立马降下来了,平均响应时长 100ms 左右。但,我们观察到 mongo 的连接数直接升了一倍,ap...

Read More

关于 pm2 的弱项

部署 deploy由于我们线上项目全部部署在高配主机上,使用的是 pm2 部署,于是当我刚接手的时候,十几台主机全部用 pm2 部署的意义不知你是否明白,每台部署至少 1 分钟,然后串行部署,于是开始部署之后,可以很悠闲地去喝杯茶了 解决方案么,可以考虑用 ansible,chef,puppet 之类的工具,我用 ansible 部署之后,1-2 分钟就可以...

Read More

express 中的 trust proxy 设置

一般来说,我们的项目都是放在反向代理后面的,比如 nginx,haproxy 之类的,这时候就会有个问题,你获取的 IP 地址可能一直是前面代理的 IP,而不是用户端的 IP,于是这时候 express 就需要设置下 trust proxy 了 默认是 false,也就是不信任任何代理,比如你所在的私有网络是 10.0.0.0/8,那么直接设置: ...

Read More

记一次 Mongo 连接配置调优

话说在我接手公司的项目后花时间去优化 API 性能的时候,在 newrelic 上面看到,大部分都是 mongo 的时间,因此很有必要花大时间去优化。 我们用的是 mongoose@3.8.23,然后修正了其中的复制集排...

Read More

ELK 搭建两三事之数据需求

不知道大家如何应对运营以及营销同事的『临时』数据需求,在公司早期的时候,没有专门的 BI 工程师,其他工程师不够,开发任务紧。于是一次两次还好,多了之后,工程师会很烦,美女妹子的话,写个脚本导出个 excel,其他随便给导出个 CSV 文件,然后没准同事用的是 Windows,用 Excel 打开直接是乱码 :joy: 当然了,笑归笑,作为一个负责任的工程...

Read More