Node.js 性能分析之火焰图

往往,在我们的开发过程的以下两个场景中,我们会需要去分析应用的性能。 开发时候优化程序; 线上排查问题; 往往,如果不是线上出了问题,我们不会想要去进行性能分析 :P,所以其实你只会面对第二个场景。话说回来,其实这两个场景的相关处理方式也非常类似,我接下来会做个总结,当然了,得先从介绍相关的工具开始。 Node.js 性能分析工具主要的分析对象就是内...

阅读全文

应用配置的几个原则

之前在 《应用配置管理实践》 中提到过配置的管理方式,这次我专门来说说在工程实践中总结的一些应用配置原则。 简单友好原则我们先回顾下一些常用的配置文件格式 ini,xml,json,yaml,toml 从 ini 开始,方便好用,但是无法支持复杂些的数据结构,之后是 xml ,但是配置文件太庞大,导致可读性也不好;json 的机器可读性更好,但是不支...

阅读全文

在 k8s 中部署 Prometheus

自从 上次 介绍了 Prometheus 之后,就想到要在 k8s 中使用了,不过,在这之前,先介绍下 k8s 的监控。 k8s 的监控k8s 默认以及推荐的监控体系是它自己的一套东西:Heapster + cAdvisor + Influxdb + Grafana,具体可以看 这里 。 包括 k8s 自身的 HPA (Horizontal Pod Au...

阅读全文

监控利器之 Prometheus

一直以来,我们会在项目中,使用 APM 去监控应用的状况,分析性能等,这些工具很有效,而且不侵入业务,不需要埋点。 然而,有些需求,是 APM 的监控满足不了的,比如应用业务指标。 监控模式目前,采集指标有两种方式,一种是『推』,另一种就是『拉』: 推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你从程序中将指标使用 ...

阅读全文

从把 SLA 加进 KPI 考核说起

最近公司的领导开始重视服务器的稳定性了。 这是件好事: 因为受到重视,意味着这方面有领导关心跟过问了,对于提高服务器稳定性,大家也都会有更多的压力与动力去做好;这又是件坏事:毕竟是由于历史上出过问题,才导致的,也就是说,之前大家做得不好。 SLA 这个数值很有意义:让大家对服务水平进行承诺,对于公司的减少损失很有帮助。只是对我来说,这件事本身让我有些反感:上...

阅读全文

从数据处理脚本到人际沟通

众所周知,在工作中,我们会有很多的时间与同事去沟通,而沟通效率是一支团队凝聚力的体现以及战斗力的保障。 那么,我们从一个故事说起。 故事工程师小王刚毕业就进入了一家大公司里面,目前已经开始接受任务,某一天,直属项目领导 A 过来找到小王: 『小王,这里有个处理数据的任务,需要你写个脚本,处理完等下我发给你的所有的数据。』 『好的,我尽快完成。』 然后闷头去干...

阅读全文

Node.js RabbitMQ 任务队列排错小记

这周五解决了挺有意思的一个 Bug。 背景由于长期以来,在我们的 Node.js 服务端项目中,离线任务大部分用的是 kue,这是个轻量级的任务队列,之前 也有过介绍。而周五那天我正准备将之前的 kue 队列重构成 RabbitMQ 的队列的相关代码上线。 RabbitMQ 任务队列是我基于 amqplib 实现的,在生产环境跑了半年有余,没什么大问题。 但...

阅读全文

k8s Ingress 实践

一般来说,我们从外部访问 k8s 里面的应用,有以下种方式: Ingress:有些云服务商有提供,自己也能安装自己的 ingress controller; Service NodePort:在 Node 上暴露一个 30000-32767 的端口,可以通过 NodeIp:NodePort 的方式访问; Service LoadBalancer:取决于云服...

阅读全文

使用 docker runner 加速 gitlab CI&CD

在之前的 CI&CD 实践中,我们一直使用的是 Shell runner,简单来说,就是在一台机器上配置好所有的环境,然后序列地去执行任务。 很明显,好处是配置非常简单,也很容易 Debug,出了问题,登录到机器上去查找即可;然而坏处就是配置迁移麻烦,也非常容易被破坏环境,而且单台机器上并发比较麻烦,好些的方法是需要配置多个机器,只是这就有些有点浪费...

阅读全文

团队内部推广之我见

一些经验较少的管理者或者项目经理在团队内部推广新技术、新工具的时候,往往,会遇到阻力。 在这里,先讲一个小故事: 小 A,在一个传统互联网公司,刚上任他所在的小团队开发技术经理不久。为了提高公司技术团队的工作效率,最近学习了不少 DevOps 有关的技术与文化,想在团队以及公司内部推广起来,于是他组织了一场分享会,蒙着头花了不少时间去做 PPT,分享的那天...

阅读全文

CentOS 7 使用 ansible 搭建 kubernetes

一直以来,我使用的是 rancher,它提供的 k8s 集群非常棒,基于 docker 镜像安装,免去了很多的安装配置细节,如果对于 k8s 的运行原理不想太深入了解、图方便快捷或者只是想尝试功能,那么它会让你绝对满意:在界面上点击配置下就能搭建起一个集群了。 但是这次我就需要自己真正在机器上搭建起一个原生的集群,折腾下自己。众所周知,k8s 的安装,绝对是...

阅读全文

基于 ElasticSearch 的日志统计反爬虫策略

之前在 接口限流 中提到过,用 rate limit 的方式可以起到反爬虫的效果,但是一旦遇到利用代理 IP 来爬你网站的时候,就会遇到问题了 这时候,你可以付钱买服务解决,只是,如果有时间与精力,也可以考虑自己去试试,就当是一次锻炼。 用日志去解决爬虫,也是一种简单而有效的做法,可以使用 ElasticSearch 提供的 aggregate 功能,去筛选...

阅读全文

ELK 最近的一些总结

不要执迷于登录服务器敲命令,而是用自动化脚本完成所有的事情各种博客,包括我自己,一眼望过去,全是教你一步步怎么搭建某个服务,其实这是一个 『反模式 anti-pattern』。 为什么? 首先,不可重复,他人在他们的服务器上搭建的时候,环境有可能不一致,相同的命令,可能会有完全不同的效果; 其次,浪费时间,当你登录服务器一步一步操作,意味着你只能一步步操作...

阅读全文

《目标》读后感

最近刚看完了《目标》,是《凤凰系统》里面提到的一本书,同样是小说题材,有趣而容易理解。 书的核心点在于 『 TOC 制约法』 ( TOC 即 Theory of Constraints ),简单来说,就是需要发现与改进系统中的 『瓶颈点』。 故事简介作为工厂厂长的小说主人公 Rogo ,通过大学老师 Jonah 的指导,突破常规,大胆革新,运用 TOC 方...

阅读全文

异构数据库之数据同步实践

一般来说,我们的不少业务中,需要用到数据同步,而其中涉及到的本质无非是 『数据一致性』。首先,能想到的数据同步的例子肯定是数据库,由于数据库领域存在的 CAP 理论,一定会有数据同步的过程来达到数据一致性,只是那是属于相同数据库之间的同步,在不同数据库的情况下同步数据的话,叫做 『异构同步』。 不过目前先放下一致性原理,以现有的一个业务场景为例,来说说如何实...

阅读全文