2016-09-11
众所周知,配置在项目开发中非常重要,一般来说,我们都会根据环境会有不同的配置,比如本地开发会配置本地机器的数据库,测试时还会给数据库设置不同的本地数据库,然后线上线下也会有不同的配置,其中非常值得注意的便是:生产环境的配置,因为这些配置非常敏感,需要加密。
把配置直接放进代码管理 repo 是最低级的做法:历史记录会有永远记录着配置中的敏感信息,看过不少初学...
阅读全文
2016-08-22
不知道,你有没有遇到类似的情况:
不重视测试,开发新功能都是手工测试
每次开发新功能,都会懒得去做回归测试,线上经常出问题
新同事来,不熟悉系统,提交的代码会把系统搞坏
测试覆盖率一直非常低
这时候,你需要个 CI,也就是持续集成。
我理想中的团队开发流程中,CI 是最重要的一环,团队成员按照 git flow 开发,然后提交,等待 CI 测试通过,最后...
阅读全文
2016-08-07
很多同行都会想,当自己做到一定程度了,应该会去做技术专家,或者管理岗位。
只是,现在的很多同行是这样的,我很喜欢钻研技术,并且,我还想往管理岗位上发展,但是遇到一些团队管理的时候,往往不想去处理。
原因?很简单,因为搞定团队内部的琐事,把团队带的井井有条,远远比不上自己去钻研新技术,提高团队的生产力带来的快乐要多。所以,这样的人,不太适合往管理岗位发展。而管...
阅读全文
2016-07-26
日志收集的重要性不言而喻,总结下在日志方面做的一些尝试:
日志收集的选型目前 nodejs 比较流行的工具有 winston,log4js,还有 bunyan,也是我用过比较多的,总体看来的话,winston 功能丰富,log4js 老牌有保障,bunyan 比较轻量级,我最后选择了 bunyan 是因为看中它的轻量级,怎么说呢,winston 太复杂了以至...
阅读全文
2016-07-18
没有什么运维问题是一起重启解决不了的,如果有,那就两次。 — 🙈
今天又栽在 mongodb 索引上了,哥们又在我不知情的情况下,加入了新建索引的代码,也怪我,没有 review。两亿多数据啊。。。。天。。。。
于是我们的平均响应时长就跟过山车似的,一波未平,一波又起,甚至一度达到了我入职以来的最高值,6kms。
没办法,先重启,回滚了刚上线的代...
阅读全文
2016-07-09
最近总能发现,很多东西,我在实践中总结出的的经验,都是别人在书中提到过的,就比如《重构》这本书,我一直认为重构不应该拿出专门的时间,而是应该在开发新功能或者修改 bug 的时候去做,作者也非常强调这种观点:
不用专门时间,随时随地,比如以下三种情况:添加功能时修补错误时复审代码时
比如在一个人员缺少的阶段,如果你跟产品汪或者 CEO 说,我需要几个星期甚...
阅读全文
2016-06-22
今天尝试了用 redis 的 set 作为缓存用途,恩,好疼。。。
是这样的,看到项目中用到应用缓存的地方很少,为了减轻 MySQL 数据库的压力,特地引入 redis 作为已购买物品的缓存,但是物品不能重复购买,因此这个缓存还得支持重复性检查。
于是很自然想到 redis 里面的 hash 或者 set,然后,有个问题就是,当 hash 或者 set 没有...
阅读全文
2016-06-14
这些日子为了解决业务上的挑战,想要解决 MySQL 的性能提升方案。
目前找了主要有:
分库分表
读写分离
读写分离最简单,牺牲一点一致性能减少读的压力,分表也比较简单,但是目前没有特别合适的中间件,结合我们的业务场景,分库是目前最适合下点功夫的。(另外还需要做高可用,可以做双主,但是不需要我过多参与,因此这里不谈。)
背景介绍
MongoDB 用来存储...
阅读全文
2016-06-12
nodejs 这些年来的发展迅猛,一个重要的条件就是 npm,npm 这个包管理工具很强大,如果没有这个工具,很难想象没有 npm 的 nodejs 会发展到什么程度,golang 或许可以是个参照:发展到现在,一直没有一个统一并且非常规范的包管理工具。
我一直想很相信,任何东西的发展,离不开好的基础,无论是个人或是国家:
个人,需要多学习,多锻炼,提升自己...
阅读全文
2016-06-02
先从一次面试经历说起,记得有次面试,我问被面试者一个 API 文档的问题:
『用 gitbook。』 我呆了一下『那如果你们修改了 API 接口,怎么修改文档呢?』『我们文档也用 git 管理,直接修改提交。』『那你们有没有某次代码修改之后,忘记修改文档了?』『……』
我想在实际开发中,这样的做法很容易顾此失彼,忘记更新代码,造成了文档与代码不一致的情况...
阅读全文
2016-05-28
今天正在家里加班的时候(哎。。。不多说。。。),突然接到电话,mongo 出问题了,同事把某个 collection 的索引给删了,新代码上线之后,mongo 不断在重建索引,经过立马回滚代码之后,还是继续在重建索引,用 db.currentOp 来看,索引一到 99% 就重建,也就是重新开始建立索引。
在 APM 上面看到响应时间慢了 5 倍左右,一直不断...
阅读全文
2016-05-25
今天在朋友圈刷屏了,不想跟风,干脆在这里写点东西,权当念想。
第一次听说杨绛先生,是在高中,有篇语文中学到的,关于她跟钱钟书先生的故事,记不清了,那时候很奇怪,为啥女的也可以叫先生,后来才知晓,先生是一种很少的女士能有的尊称。
她的那句 『你的问题就在于读书太少而想的太多』,足够受用终生,很多人,尤其是我自己,在几年短短的职业生涯中,感受到,很多问题,不能干...
阅读全文
2016-05-24
最早接触 kue 是在 0.7 之前的版本,功能很少,很弱,但还是很好用的,那时候找过一些其他的消息队列,如 rabbitmq,kafka 之类的,但是都觉得太重了,跟 nodejs 的融合还是不太合适。
找着找着,就找到了 tj 大神搞的 kue,基于 redis 的 subpub 做的优先级消息队列,适合做一些离线任务,比如统计运算、发邮件消息以及异步业...
阅读全文
2016-05-22
2016-06-22 更新:MongoID 不能保证连续增长,因此,在这种情况下,不适合此种方案,如果是为了保证速度以及效率的话,可以放缓存,比如 redis 以及 memcached 之类的。
正文说起分页,最容易想起的就是 offset+limit,在 mongodb 里面可以用 skip+limit 实现,应该说这是最容易实现的功能,与前端的交互来说非...
阅读全文
2016-05-17
今天把做的项目直接做了 docker 化,一个是前端纯静态化的,另一个是后端 Node.js App,对于这两个项目,想用最简单的方式来使用 docker
静态项目最容易,直接用 nginx,将编译好的静态文件直接丢到 volums 里面即可:
123456789version: '2'services: nginx: image...
阅读全文