- Socket 编程发展
- OpenResty 简介
- Lua 入门
- Nginx
- 子查询
- 不同阶段共享变量
- 防止 SQL 注入
- 如何发起新 HTTP 请求
- 访问有授权验证的 Redis
- select+set_keepalive 组合操作引起的数据读写错误
- redis 接口的二次封装(简化建连、拆连等细节)
- redis 接口的二次封装(发布订阅)
- pipeline 压缩请求数量
- script 压缩复杂请求
- 动态生成的 lua-resty-redis 模块方法
- LuaCjsonLibrary
- json解析的异常捕获
- 稀疏数组
- 空table编码为array还是object
- PostgresNginxModule
- 调用方式简介
- 不支持事务
- 超时
- 健康监测
- SQL注入
- LuaNginxModule
- 执行阶段概念
- 正确的记录日志
- 热装载代码
- 阻塞操作
- 缓存
- sleep
- 定时任务
- 禁止某些终端访问
- 请求返回后继续执行
- 调试
- 请求中断后的处理
- 我的 lua 代码需要调优么
- 变量的共享范围
- 动态限速
- shared.dict 非队列性质
- 正确使用长链接
- 如何引用第三方 resty 库
- 典型应用场景
- 怎样理解 cosocket
- 如何安全启动唯一实例的 timer
- 如何正确的解析域名
- LuaRestyDNSLibrary
- 使用动态 DNS 来完成 HTTP 请求
- LuaRestyLock
- 缓存失效风暴
- HTTPS 时代
- 动态加载证书和 OCSP stapling
- TLS session resumption
- 测试
- Web 服务
- 火焰图
- 如何定位问题
- module 是邪恶的
- FFI
- 什么是 JIT
灰度发布
对于灰度发布,这里主要讲解如何实现,我所在的公司虽然使用这个逻辑实现的.
但是由于掺杂了太多业务相关东西,比如抓包,限流,缓存,校验,sso,云化,监控告警,成为了一个运维平台.
造成无法开源,真是好可惜.做这个系统多年还是想让大家来找找茬刷刷存在感的
我想当前没有一个开源的可能也和这个原因有关,太多功能和业务相关难以抽离成纯粹组件开源.
下面先讲主要逻辑结构,请看下图
这里需要讲解下这里面几个名词的含义,方便后续理解.聪明的读者们估计看完这些名词概念应该就理解了灰度是如何实现的
分流引擎
采用openresty实现的可完全动态分发目标集群的nginx集合,称为分流引擎.
这是一个逻辑概念,是所有nginx的集合.
因为我们的规则是要同步到里面所有nginx,所以概念上他们是一个集群部署的集合.
请看逻辑结构示意图的右上角.
生产集群/灰度集群
这里把公司整个系统在内部逻辑上切割成多个集群进行垂直部署.物理上可以任意方式部署出来.
但是逻辑上他们需要相互独立,不会互相影响,标准为我们可以关闭其中某个集群任意服务器而不影响其他集群.
另外这里为什么需要生产集群A,生产集群B呢,是为了实现无损发布,在发布过程中我们相互使用对方来承载用户访问.
但是逻辑上他们都是生产集群
而灰度集群只有一个,在部署上也可以一切从简,是因为我们设计上他们是可以有损更新的,毕竟目标用户只有我们自己人.
用户特征/分流规则
用户特征其实就是判断条件的一个叫法,比如我们说"host为xxx的分发到灰度集群",那么这个host就叫用户特征,整条语句就叫分流规则.
这里的判断条件是需要支持逻辑条件判断的,比如或者,并且什么的.这样才方便组合出灵活好用的匹配目标用户的分流规则
服务网关
这里我虽然也叫服务网关,在概念上和服务网关意义差别也不是特别大.
统称为所有请求前置的一些校验,判断,分析的逻辑,但是玩法可以非常丰富有趣.
比如动态的配置某种后端响应缓存在这里是非常奇妙的一种设计.
再比如,服务端特定请求抓包放在这里,真是太有意思了.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论