Openresty(二十一)ngx.balance和balance_by_lua灰度发布

一  openresty实现灰度发布

①  灰度发布

说明: '早期'博客对'灰度'发布的'概念'进行解读,并且对'原生 nginx'灰度实现进行讲解后续: 主要拿'节点引流'的灰度发布,并且关注'gray灰度策略'

相关借鉴

②  回顾HTTP反向代理流程

ngx_http_upstream

可'操作'点:根据'负载均衡策略'选择上游的服务器

  wrr               hash               least_conn              反向代理和负载均衡原理

③  指令

balance: '均衡'说明: 只有下面'两个'指令,而不是'三个',没有'balancer_by_lua'指令掌握: upstream {}、'balancer_by_lua_file'、'balancer_by_lua_block'

upstream

强调: upstream模块中'server配置的地址'不能用变量,只能为'ip'

balancer_by_lua_block

1、负载均衡器'结果'可以和'现有的nginx upstream模块'一起使用常见: 'ngx_proxy'和'ngx_fastcgi'2、'balancer_by_lua*'可以和'标准upstream连接池'机制一同工作常见: 标准'keepalive'指令注意: 确保keepalive 指令在一个单独的upstream{}配置块中的'balancer_by_lua_*'的后面3、'balancer_by_lua*' 会完全'忽略'掉定义在upstream{}块中定义的'servers'列表重点: 但是'server'指令必须存在,作为一个'placeholder'占位符存在,避免'nginx -t'报错同俗理解:  openretry '优先走' balancer_by_lua 逻辑块实质:通过lua-resty-core库中的'ngx.balancer'模块,从一个完全'动态'的server列表中'选择'颗粒度:基于'每个请求'中4、当nginx的upstream机制'重试'请求中指令指定的条件,如proxy_next_upstream指令说明: 这个指令'注册的Lua代码'处理器可能在一个单独的'下游请求'中被调用'不止'一次5、注意'事项'1) 这个上下文中执行的Lua代码并'不支持yielding'2) 所以可能yield的Lua APIs(例 cosockets和"light threads")在这个上下文中是'被禁用'3) 通过在'早期阶段'处理程序'如:access_by_lua*'处理这种操作和4) 通过'ngx.ctx 'table传递结果给这个上下文的解决方法可以'绕过'这个限制

balancer_by_lua_file

1、OpenResty 的 'balancer_by_lua' 指令让'动态负载均衡'成为可能2、它'替代'了原生的 'hash/ip_hash/least_conn' 等算法3、不仅可以让'自由定制'负载均衡策略,还可以随意'调整'后端服务器的数量4、完全'超越'了 upstream 系列指令,实现了接近'商业版' Nginx Plus 的功能+++++++++++++ "注意事项" +++++++++++++1、'balancer_by_lua' 也是一个比较'特殊'的执行阶段特点: 这里'不能'使用 'ngx.sleep'、'ngx.req.*' 或 'coocket'补充: 同时应当尽量'避免'大计算量操作或磁盘读写,否则会导致'阻塞'2、动态负载均衡使用的'服务器列表'通常'存储在外部'的 Redis '常见' 或 MySQL 里备注: 由于'不能直接'使用 cosocker,所以在 'balancer_by_lua' 里也就'不能'操作这些服务器解决: 但可以在'其他'的阶段'access_by_lua、ngx.timer[常见]'里 -->访问服务器获取'列表'、解析'域名',然后放在 'ngx.ctx' 或全局模块里'传递'过来

k8s nginx ingress动态更新原理

③  ngx.balance

​lua-resty-core 模块 '提供' ngx.balancer1、这'四'个函数的的'用法'都很'简单'2、动态负载均衡的'重点'其实是服务器'列表的维护'和'选择算法'备注:这些工作通常应该在 'balancer_by_lua' 之'外'完成,ngx.balancer 只是最后的'执行者'

set_current_peer     nginx转发实现过程中的问题总结

最佳实践: balancer.set_current_peer用于设置后端的'地址'与'端口'balancer中只能'设置ip',不'支持'直接设置域名,思考: 如何解决'DNS'解析问题?1、host中的域名'不起'作用,'可以'使用'lua-resty-dns'解析域名,然后获取'解析'结果2、可以在'access_by_lua*阶段'解析域名,总之要在'upstream'之前'解析'域名例如:这里是在rewrite阶段,从'请求信息'中读取出了'关键'信息,做了一次DNS解析再'设置'进去的

set_more_tries

set_more_tries:设置连接'失败'后的'重试'次数

balancer.set_more_tries不能超过proxy_next_upstream_tries

推荐: 用'ngx.ctx.tries'记录进入balancer.lua的'次数',超过设置的重试次数直接给错误响应码

get_last_failure

get_last_failure:获取'上一次连接失败'的具体'原因'注意: state_name '和' status_code  返回值的'含义'

set_timeouts

recreate_request

相关参考

④  案例讲解

1: 简单'案例'if not ok then --> 检查'是否'设置成功,代码要'健壮'

第三方lua-resty-balance

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python:Django框架的Hello wrold示例

Django是Python的目前很常用的web框架,遵循MVC设计模式。 以下介绍如何安装Django框架,并生成最简单的项目,输出Hello world。(开发工具VScode) 一、安装Django 在VScode终端控制台执行以下指令安装Django python install django 如果要查…

第15篇ESP32 idf框架 wifi联网_WiFi AP模式_手机连接到esp32开发板

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

Django之初入门

一)Django简介 1.简介 Django是一个开源的Python Web框架,它以简洁高效的方式帮助开发者构建复杂的Web应用程序。Django采用了MVC(Model-View-Controller)的架构模式,通过强大的工具和功能,提供了一套完整…

Spring面试题11:什么是Spring的依赖注入

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…

论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms

目录 摘要 1 Introduction 2 BACKGROUND AND RELATED WORK 2.1 Preliminaries 2.2 Related Works 3 MODEL 3.1 Structural Feature Initialization 3.2 Fraudster Community Detection 3.3 Training Objective 4 EXPERIMENT 4.1 Experimental Setup 4.2 Prediction …

laravel 阿里云短信发送

示例 一、安装 安装:composer require mrgoon/aliyun-sms dev-master 二、打开config/app.php,添加配置代码 1、‘providers’ 配置组下添加 Mrgoon\Aliyunsms\AliyunsmsServiceProvider::class, 2、‘aliases’ 配置组下添加 Aliyunsms>Mrgoon…

记一次STM32F4 HAL IAP开发过程踩坑

第一次在HAL库上做IAP,不太熟悉库结构,被坑了一早上… MCU上做了一个shell,实现了goto命令跳转到APP区执行(只是为了开发时方便)。跳转到APP前和以前一样清理了所有初始化过的外设,也对中断进行了处理&…

Qt5开发及实例V2.0-第十九章-Qt.QML编程基础

Qt5开发及实例V2.0-第十九章-Qt.QML编程基础 第19章 QML编程基础19.1 QML概述19.1.1 第一个QML程序19.1.2 QML文档构成19.1.3 QML基本语法 19.2 QML可视元素19.2.1 Rectangle(矩形)元素19.2.2 Image(图像)元素19.2.3 Text&#xf…

机器人如何有效采摘苹果?

摘要:本文利用动捕数据构建拟人运动模型,对比观察两种苹果采摘模式,并对系统性能进行全面评估,为提高机器人采摘效率提供创新方法。 近期,一项关于苹果采摘机器人的有趣研究—— "Design and evaluation of a rob…

【完美解决】GitHub连接超时问题 Recv failure: Connection was reset

问题: 已经开了梯子但是在Idea中使用git(GitHub)还是连接超时Recv failure: Connection was reset。此时需要让git走代理。 解决方案: 1.对右下角网络点击右键 -> 打开网络和Internet设置 2.代理 -> 查看到地址和端口号…

图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读

一、相关知识 首先我们需要了解传统隐写和生成式隐写的基本过程和区别。传统隐写需要选定一幅封面图像,然后使用某种隐写算法比如LSB、PVD、DCT等对像素进行修改将秘密嵌入到封面图像中得到含密图像,通过信道传输后再利用算法的逆过程提出秘密信息。而生…

React中的受控组件(controlled component)和非受控组件(uncontrolled component)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 组件⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是…

【jmeter】jmeter引用变量,变量值传递失败

最近在用jmeter做接口测试的时候,发现有个变量,参数值一直没有传递进来,导致request的时候,请求体里面一直是${}变量的形式。 后来经过排查发现,是因为我在定义用户变量的时候,在这个now后面多加了一个空格…

ps[001] 初学创建剪切蒙版

前置条件:PS2020版本 技能应用:ps 海报标题和图片结合 1、画布1300*1300像素,altdel设置背景为前景色 2、准备一张绿色的海报,可以百度宫崎骏,找张绿色的图片就可以了 3、拉个文字款,写个SUMMER英文体&a…

《开发实战》17 | 异步处理好用,但非常容易用错

大多数业务项目都是由同步处理、异步处理和定时任务处理三种模式相辅相成实现的。区别于同步处理,异步处理无需同步等待流程处理完毕,因此适用场景主要包括: 服务于主流程的分支流程。比如,在注册流程中,把数据写入数…

SpringAOP入门案例

package com.elf.spring.aop.aspectj; /*** author 45* version 1.0*/ public interface UsbInterface {public void work(); }package com.elf.spring.aop.aspectj; import org.springframework.stereotype.Component; /*** author 45* version 1.0*/ Component //把Phone对象…

什么是WhatsApp群发,WhatsApp协议,WhatsApp云控

那么WhatsApp群控云控可以做什么呢? 1、获客 自动化引流,强大的可控性,产品快速拓客 2、导流 一键式傻瓜化自动加好友,群发,朋友圈营销 3、群控 一键式拉群好友,建群,进群 …

力扣236 补9.14

做不来,我做中等题基本上都是没有思路,这里需要先遍历祖先节点,那必然用先序遍历,这题还是官方题解容易理解,第二火的题解反而把我弄得脑袋昏昏的。 class Solution { TreeNode ans; public TreeNode lowestCommonAnce…

公众号迁移多久可以完成?

公众号账号迁移的作用是什么?只能变更主体吗?长期以来,由于部分公众号在注册时,主体不准确的历史原因,或者公众号主体发生合并、分立或业务调整等现实状况,在公众号登记主体不能对应实际运营人的情况下&…

Django之视图

一)文件与文件夹 当我们设定好一个Djiango项目时,里面会有着view.py等文件,也就是文件的方式: 那么我们在后续增加app等时,view.py等文件会显得较为臃肿,当然也根据个人习惯,这时我们可以使用…