RocketMQ小记

Rocketmq

https://rocketmq.apache.org/docs/quick-start/

github: https://github.com/apache/rocketmq

Apache RocketMQ 架构

20191129160333.png

  • Name Server :是一个无状态节点,可集群部署,在消息队列 MQ 中提供命名服务,更新和发现 Broker 服务
  • Broker : 消息中转角色,负责存储、转发消息。 分为 Master Broker 和 Slave Broker ,一个 Master Broker 可以对应多个 Slave Broker 。Broker 启动后将自己注册到 Name Server 。随后每30秒定期向 Name Server 上报 Topic 路由信息。
  • 生产者: 与 Name Server 集群中的其中一个节点(随机)建立长连 。 定期从Name Server 读取 Topic 路由。并向提供 Topic 服务的 Master Broker 建立长链接 。 定时向Master Broker 发送心跳
  • 消费者: 与 Name Server 集群中的其中一个节点建立长链接。定期中Name Server 拉去Topic 路由信息。 并向提供 Topic 的Master Broker、slave Broker 建立长连。且定时向 Master Broker 、Slave Broker 发送心跳。 消费者即可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 决定。
阅读更多

Dockerfile编写实践

Docker 镜像是由 Layers 组成,Dockerfile 中每一条指令都会创建一个层,层数最多 127 层。

  1. 选择更小的基础镜像通常我们使用的镜像有 Ubuntu 、CentOs、 debian 、Alpine 。其中推荐使用 Alpine ,Alpine 的基础镜像只有 4.4M 左右,1.1 scratch 镜像​ scratch 镜像是空镜像。如果要运行一个包含所有依赖的二进制文件,可以直接使用 scratch 作为基础镜像。1.2 busybox 镜像​ scratch是个空镜像,如果希望镜像里可以包含一些常用的Linux工具,busybox镜像是个不错选择,镜像本身只有1.16M,非常便于构建小镜像。
阅读更多

Docker配置TLS认证开启远程访问

默认情况下,Docker 通过监听本地的 unix socket 运行,同时还可以通过 TCP 进行通信,方便对 Docker 集群 管理。Docker 官方提供了通过 TLS 加密,来保证只有信任的客户端才能远程访问 Docker 服务。

采用私有 CA 签名证书。客户端只能够连接到该 CA 签名的证书和服务器。

阅读更多

北京小汽车摇号分析

/文章过时/ :摇号和排队已经变化,本文已经不适用。


北京汽车摇号到底是怎么摇的,很多人只知道自己摇了多长时间,倍数是多少。这里我帮大家看了一下。

摇号规则

1、摇号基数序号分配方法:首先,将当期所有审核通过的编码按从小到大的顺序分配序号;然后,第二阶梯及以上的编码按从小到大的顺序,接在后面继续分配序号;再然后,第三阶梯及以上的编码按从小到大的顺序,接在后面继续分配序号;以此类推。因此,高阶梯的编码所对应的多个摇号基数序号是不连号的,当期摇号基数序号总数=第一阶梯人数+第二阶梯人数×2+第三阶梯人数×3…… 2、摇号方法:摇号程序从当期所有摇号基数序号中随机抽取中签者,高阶梯的编码对应多个摇号基数序号,于是享受了多倍的中签概率。摇号程序确保高阶梯编码的多个摇号基数序号最多只能摇中一个,当其中一个摇号基数序号中签,该编码即中签。

看到上面这一段会有点懵,大部分人会被阶梯和乘数搞混乱。 这里我来帮大家解释一下。

阅读更多

nsq 随录

nsq

nsq 官网
nsq
go-nsq

组件

nsqlookupd

是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(channel)信息。

阅读更多

Kong 随记

端口

默认情况下 kong 监控一下端口

  • :8000 监听来自客户端的传入HTTP流量,并将其转发到上游服务。
  • :8443监听来自客户端的HTTPS流量。此端口具有与端口类似的行为:8000,但它仅需要HTTPS流量。可以通过配置文件禁用此端口。80008443 作为提供服务的端口,在正常的线上服务是需要修改成 80443 端口。使用 docker来启动会很方便做端口映射,而不需要对配置做修改
  • :8001 管理端口,提供管理 Admin API
  • :8444 Admin APIHTTPS 端口

在最开始的看 Kong 相关的时候,一下看到 4 个服务端口会有些焦虑,实际上只是只是两种服务提供了 HTTPHTTPS 的访问,8000和8443提供服务,8001和8443 用来管理。

阅读更多

理解 zabbix 配置

zabbix 配置看上去很复杂。 实际上是由于界面布局不合理,功能都是以展示为主,平铺直列。在直观状态下实际上是误导。

作为一个运维监控的工具。把我们自己需要的功能对应到 zabbix 上,就会变的很好理解。

基本需求,就是需要监控一群机器,并给出相应的可视化的表或者提示。 实际上可以按照层级关系列出,而不是按照 zabbix 界面的平铺。

阅读更多

firefox 安装 copper 插件

Firefox 升级后开始不支持三方协议的插件,调试 coap 协议使用的 Copper 插件在Firefox上不起作用。

需要做调试的时候,发现在关闭了 Firefox 更新的情况下 Copper 插件依然不起作用,于是想着重新安装,在插件商店里面居然已经找不到 Copper 这个插件了。官方已经将这个插件从 Firefox 的商店下架了。

解决方法

  1. Copper Github地址 https://github.com/mkovatsc/Copper
  2. Firefox RES 版 https://ftp.mozilla.org/pub/firefox/releases/52.0.2esr/

使用RES版是因为正常的版本从源码加载插件插件依然无法使用

安装方式

安装方式参考github的安装说明

  1. 从github拉取 Copper 源码 clone git://github.com/mkovatsc/Copper.git
  2. 创建一个名为 copper@vs.inf.ethz.ch 的文件 到firefox的 extensions 目录,路径如下
    • Windows: C:\Users\AppData\Roaming\Mozilla\Firefox\Profiles\xxxxxxxx.default\extensions\
    • Linux:~/.mozilla/firefox/xxxxxxxx.default/extensions/
    • MacOS:~/Library/Application Support/Firefox/Profiles/xxxxxxxx.default/extensions/
  3. 将第一步中clone的源码路径添加到第二步创建的文件中
  4. 在 firefox 中打开 about:config 设置 xpinstall.signatures.required 为 false
    5.. 重启 firefox 。

nginx在proxy_pass里使用变量

nginx server_name 配置文档: http://nginx.org/en/docs/http/server_names.html

在做 nginx 正则表达式 proxy_pass,nginx 反向代理不过去。 比如

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name ~^(?<user>.+)\.domain\.com$;
location / {
proxy_pass <http://$user.domain1.com>;
}

}

会报出如下错误

no resolver defined to resolve xxx.xxx

web端返回http 502 错误。

在Ngnix中如果用变量作为反向代理的地址时,容易出现“no resolver defined to resolve xxx.xxx”的问题

在 Nginx 0.6.18 后启用了 resolver 指令,在使用变量来构造某个server地址的时候一定要用resolver指令来指定DNS服务器的地址

所以在nginx的配置文件中的http{}部分添加一行resolver 8.8.8.8;

resolver 8.8.8.8;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name ~^(?<user>.+)\.pay\.iov-smart\.net$;

location / {
# set $subdomain "";
# if ($host ~* "^(.+)\.pay\.iov-smart\.net$"){
# set $subdomain $1;
# }

resolver 8.8.8.8;
proxy_pass http://$user.pay.iov-smart.net:6001;
}
}

docker build openwrt 遇到的小问题

在使用 docker 编译 openwrt 遇到了两个坑,问题不复杂,却折腾了一天。

环境如下

  • Dockerfile 定义编译 openwrt 的编译环境
  • docker-compose.yml 定义变化 openwrt 的运行配置,主要是将代码目录 data 使用 -v 映射到容器中
  • /data 代码存放目录
阅读更多