您的位置:首页 > 数据库 > Redis

使用RedisMQ 做分布式改造,从此放心安全迭代

jiangnancun 2019-08-07 17:02 441 查看

引言

  熟悉TPL Dataflow博文的朋友可能记得这是个单体程序,使用TPL Dataflow 处理工作流任务, 在使用Docker部署的过程中, 有一个问题一直无法回避:

       在单体程序部署的瞬间会有少量 流量无法处理;更糟糕的情况下,迭代部署的这个版本有问题,上线后无法运作, 更多的流量没有得到处理。

      背负神圣使命(巨大压力)的程序猿心生一计, 为何不将单体程序改成分布式:服务A只接受数据,服务B只处理数据。

 

var redis = new CSRedisClient[16]; //定义成单例
for (var a = 0; a < redis.Length; a++)
redis[a] = new CSRedisClient(Configuration.GetConnectionString("redis") + ",defualtDatabase=" + a);
services.AddSingleton<CSRedisClient[]>(redis);
RedisHelper.Initialization(redis[0]);
注册CSRedisCore服务  最后依照引言中的部署原理图,将Nginx,Receiver, WebApp dockerize, 并且让 webapp 依赖于Nginx,Receiver

-------------------截取自docker-compose.yml文件----------------------

app:
build:
context: ./app
dockerfile: Dockerfile
expose:
- "80"
extra_hosts:
- "dockerhost:172.18.0.1"
environment:
TZ: Asia/Shanghai
volumes:
- type: bind
source: /mnt/eqidmanager/eqidlogs
target: /app/eqidlogs
- type: bind
source: /mnt/eqidmanager/applogs
target: /app/logs
- type: bind
source: /home/huangjun/eqidmanager/EqidManager.db
target: /app/EqidManager.db
healthcheck:
test: ['CMD','curl','-f','http://localhost/healthcheck']
interval: 1m30s
timeout: 10s
retries: 3
depends_on:
- receiver
- proxy
logging:
options:
max-size: "200k"
max-file: "10"
privileged: true 

       ① 根据docker-compsoe up命令的用法,若Receiver容器正在运行且服务配置并未改变,该容器不会被停止。

  ② 根据官方文档对于depends_on 指令的说明,该指定决定了容器启动和停止的顺序,因此引言中需要 【暂存流量】刚性需求可以得到满足
  

  改造上线之后,效果很明显,现在可以放心安全的迭代 TPL DataFlow数据处理程序。

作者:JulianHuang

码甲拙见,如有问题请下方留言大胆斧正;码字+Visio制图,均为原创,看官请不吝好评+关注,  ~。。~

本文欢迎转载,请转载页面明显位置注明原作者及原文链接

 

标签: