Sender

上节我们利用http接口规范屏蔽了邮件、短信发送的问题。Sender这个模块专门用于调用各公司提供的邮件、短信发送接口。

设计初衷

各个公司会提供邮件、短信发送接口,我们产生了报警之后就立马调用这些接口发送报警,是不合适的。因为这些接口可能无法处理巨大的并发量,而且接口本身的处理速度可能也比较慢,这会拖慢我们的处理逻辑。所以一个比较好的方式是把邮件、短信发送这个事情做成异步的。

我们提供一个短信redis队列,提供一个邮件redis队列。当有短信要发送的时候,直接将短信内容写入短信redis队列即可,当有邮件要发送的时候,直接将邮件内容写入邮件redis队列。针对每个队列,后面有一个预设大小的worker线程池来处理。

有了队列的缓冲,即便某个时刻产生了大量报警,造成邮件、短信发送的突发流量,也不会对邮件、短信发送接口造成冲击。

源码安装

  1. cd $GOPATH/src/github.com/open-falcon/sender
  2. go get ./...
  3. ./control build
  4. ./control pack

最后一步会pack出一个tar.gz的包,拿着这个包去部署即可。

部署说明

sender这个模块和redis队列部署在一台机器上即可。公司即使有几十万台机器,一个sender也足够了。

配置说明

配置文件必须叫cfg.json,可以基于cfg.example.json修改

  1. {
  2. "debug": true,
  3. "http": {
  4. "enabled": true,
  5. "listen": "0.0.0.0:6066"
  6. },
  7. "redis": {
  8. "addr": "127.0.0.1:6379", # 此处配置的redis地址要和后面的judge、alarm配置成相同的
  9. "maxIdle": 5
  10. },
  11. "queue": {
  12. "sms": "/sms", # 短信队列名称,维持默认即可,alarm中也会有一个相同的配置
  13. "mail": "/mail" # 邮件队列名称,维持默认即可,alarm中也会有一个相同的配置
  14. },
  15. "worker": {
  16. "sms": 10, # 调用短信接口的最大并发量
  17. "mail": 50 # 调用邮件接口的最大并发量
  18. },
  19. "api": {
  20. "sms": "http://11.11.11.11:8000/sms", # 各公司自行提供的短信发送接口,11.11.11.11这个ip只是个例子喽
  21. "mail": "http://11.11.11.11:9000/mail" # 各公司自行提供的邮件发送接口
  22. }
  23. }

如果没有邮件发送接口,可以使用 Open-Falcon mail-provider

进程管理

我们提供了一个control脚本来完成常用操作

  1. ./control start 启动进程
  2. ./control stop 停止进程
  3. ./control restart 重启进程
  4. ./control status 查看进程状态
  5. ./control tail tail -f的方式查看var/app.log

验证

sender的配置文件中配置了监听的http端口,我们可以访问一下/health接口看是否返回ok,我们所有的Go后端模块都提供了/health接口,上面的配置的话就是这样验证:

  1. curl 127.0.0.1:6066/health

另外就是查看sender的log,log在var目录下

视频教程

为sender模块录制了一个视频,做了源码级解读:http://www.jikexueyuan.com/course/1641.html