不停服迭代更新-服务网格

news2024/9/23 9:27:27

系列文章目录

本章将根据多年经验,进行规划讲解


文章目录

  • 系列文章目录
  • 前言
  • 一、如何做到 不停服更新、 不停服更新的机制有什么好处,


前言

服务迭代发版、少不了的就是停服更新,为了不影响 用户体验,大部分公司选择半夜更新迭代,然后 nginx挂载维护页面, 其实增加了员工的工作成本,和时间成本,最重要的是影响了用户体验、特别是作为一个游戏公司

游戏 大家都知道吧,

QQ飞车,王者荣耀,什么撸呀撸,这些游戏每分钟,几乎都有玩家
但是他们做到了、不停服版本更新、或者修复 BUG,当然修复 BUG 还可以用热修复(大部分热修复是有限制的,这里就不细说)

有人说
使用部署两套服务,更新时发布到另外一台B-server,并在测试通过后 使用Nginx将流量切换到新服务器,这种方式是一种常见的做法,通常被称为蓝绿部署或滚动发布。尽管此方法有一些优点,但也可能存在以下缺点:

缺点:

  1. 部署成本:维护和管理两套服务会带来额外的部署和维护成本。每个服务都需要独立的资源和基础设施支持。

  2. 资源利用率较低:同时部署两套服务意味着需要占用两倍的服务器资源和网络带宽,这可能导致资源利用率较低,

  3. 数据同步问题:如果新旧服务之间存在数据互操作性或持久化存储依赖,需要确保数据的一致性和同步。这可能需要实现额外的机制来确保数据正确地从旧服务迁移到新服务。

  4. 需要额外的测试和验证:尽管已在B-server上进行了测试,但在切换流量之前,仍然需要进行充分的测试和验证来确保新服务与预期一致,并且能够承受实际生产环境中的负载和压力。

  5. 风险较高:
    1、在进行流量切换时,旧服务和新服务之间可能需要进行通信以确保数据的一致性。这可能会增加网络和服务间通信的成本和延迟、如果出现问题需要回滚,需要保证回滚的完整性和一致性。这可能会增加系统出现故障的风险,同时增加了恢复的难度和时间。
    2、nginx进行流量迁移,是通过修改 proxy_pass 地址进行 流量迁移、其一是增加了手动误操作的可能性、其二需要 nginx -s reload 重新加载、nginx会重新启动几个新线程,如果存在 websocket 长连接状态他会一直占用,导致系统内存占满

以上的任何一点,都不值得我去写他的优点、
在这里插入图片描述

一、如何做到 不停服更新、 不停服更新的机制有什么好处,

大白话、说简单点、
比如晚上 11点 我在打游戏、进入了一场赛事、客户端会和 服务端进行一次http的websocket长连接,突然游戏要进行更新发版、

正常情况是 、kill 掉旧服务,然后启动新服务,大家都知道,服务启动是存在依赖的,所以启动是需要时间,特别是关联太多的服务,比如 启动 2分钟,客户就挂2分钟,我想问,你们公司晚上发版不累吗,客户损失谁来承担

高级运维做法

在这里插入图片描述

服务发版不会替换掉旧服务,而且增加一个服务命名为v2

在这里插入图片描述

刚刚在游戏的用户 依然 进行这 websocket v1 服务的 连接,而这个时候 又来了很多玩家用户,他们登录的时候,service mesh 服务网格 只会将新流量发送到 v2 版本,

在这里插入图片描述
发版前的用户 完成了一场赛事,会进行第二次 服务器请求,服务网格会将它流量分配到最新的版本,静默期 5分钟后删除v1 版本(这个是防止v2有问题 等他迁移回来的时间)而且在高并发状态中,pod 服务会自动扩缩容,避免了浪费资源的情况,高并发的时候自动扩展服务到 指定数量

以上是一次完整的服务发版流程

原理

当您将 Istio VirtualService 的配置从 v1 切换到 v2
新的请求,会根据新的路由规则进行路由。但是对于已经存在的,Istio 不会主动关闭这些连接。
如果客户端和 v1 服务端之间存在长连接 ,而且没有发送第二次http请求
那么这些长连接就会继续保持活动状态。Istio 并不会主动阻断这些连接。
一旦通过长连接的请求结束,客户端再次发起请求,根据新的 VirtualService 配置,它们将被路由到 v2 版本的服务

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

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

相关文章

TPCE260PCIE转PMC载板

TPCE60是一个标准的高度PCI Express版本1.1兼容的模块,提供了一个槽用于安装标准PMC模块,灵活和成本有效的I/O解决方案的各种应用如过程控制、医疗系统、电信和交通控制。 桥接PCI Express x1连接到主机板和PCI总线信号的PMC槽之间是由透明的PCIe到PCI桥…

正确释放vector的内存:clear还是swap?

一、size()和capacity()方法的区别 1、vector有size()和capacity()方法都用来获取vector的大小&#xff0c;那么它们两之间有什么区别呢&#xff1f; 我们先来看一段代码&#xff1a; int main() {std::vector<int> v1;std::cout <<"size:"<< v…

工厂模式(工厂方法和简单工厂模式)

工厂模式 概述常见分类简单工厂模式概述设计图解创建People抽象类(产品说明书)创建子类(产品角色)创建工厂(用于根据需求实例化对象)消费者简单工厂模式优点简单工厂模式缺点 工厂方法模式概述设计图解创建抽象父类(产品说明书)子类&#xff08;产品角色&#xff09;工厂工厂接…

数据结构二叉树(OJ)题

分析&#xff1a; 2. 我们要想办法区分&#xff0c;从队列当中出队的数据是属于那一层的数据 3. 我们当前这一道题的时间复杂度是O&#xff08;h * N&#xff09; h是树的高度&#xff0c;我们最坏情况就是在树的最底下找到&#xff0c;得递归h次&#xff0c;树的高度&#x…

vue开发:vue的插槽功能讲解

vue的插槽 举一个生活中的例子&#xff1a;比如装修房子的时候我们会在很多地方预留出一些插孔&#xff0c;可能要插电冰箱&#xff0c;插电式&#xff0c;插充电器等&#xff0c;反正就是你觉得预留在这个位置的插座一定有用&#xff0c;这个预留的插座就类似我们今天要说的插…

【C语言13】结构体的声明,定义与结构体的内存对齐

文章目录 一、结构体1.1结构体是什么1.2结构体声明1.3结构体的内存 以上便是结构体的介绍&#xff0c;如有不足&#xff0c;请多多指正&#xff01; 一、结构体 1.1结构体是什么 通俗的说&#xff0c;结构体就是一个类的集合&#xff0c;如同整形数组是整形数字的集合体&…

高数中的驻点以及要注意的事项

在高等数学中&#xff0c;驻点是指函数导数为零的点&#xff0c;即函数的极值点或拐点。在求解函数的最大值、最小值或拐点时&#xff0c;需要找到函数的驻点。 要注意以下几点&#xff1a; 1. 导数为零不一定是驻点&#xff1a;虽然驻点定义为函数导数为零的点&#xff0c;但…

力扣 | 双指针技巧

前文回顾&#xff1a;力扣 | 数组和字符串简介 力扣LeetBook&#xff1a;数组和字符串 文章目录 &#x1f4da;双指针技巧&#xff1a;情形一&#x1f449;反转字符串&#x1f449;数组拆分I&#x1f449;两数之和 II - 输入有序数组 &#x1f4da;双指针技巧&#xff1a;情形二…

基于智能手机的医院服务客户端设计与实现(论文+源码)_kaic

摘 要 近年来&#xff0c;随着中国经济的迅猛发展&#xff0c;医疗技术水平也在不断提高&#xff0c;但由于人口数目巨大&#xff0c;导致医疗资源人均分配不足的情况依旧十分严峻。预约挂号一直是制约医疗机构服务质量提高的主要环节之一。在传统预约挂号方式下&#xff0c;繁…

EMQ X(3):客户端websocket消息收发

在EMQ X Broker提供的 Dashboard 中 TOOLS 导航下的 Websocket 页面提供了一个简易但有效的WebSocket 客户端工具&#xff0c;它包含了连接、订阅和发布功能&#xff0c;同时还能查看自己发送和接收的报文数据&#xff0c;我们期望 它可以帮助您快速地完成某些场景或功能的测试…

ncm格式如何转换为mp3,分享几个方法!

你是否曾在网易云音乐上下载了一些NCM格式的音频文件&#xff0c;但发现无法在其他设备上播放&#xff1f;别担心&#xff0c;记灵在线工具可以帮助你将这些NCM格式转换为常见的MP3格式。今天小编就来分享三种方法&#xff0c;教你如何搞定&#xff01; 方法一&#xff1a;曲线…

C#学习之路-循环

有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着是第二个语句&#xff0c;依此类推。 编程语言提供了允许更为复杂的执行路径的多种控制结构。 循环语句允许我们多次执行一个…

Notepad++设置查看函数列表的快捷键

Notepad是一个非常精巧、启动便捷、支持文本自动补全的记事本软件&#xff0c;到2023年7月&#xff0c;已经更新到了v8.5.4版本&#xff0c;这里介绍设置其查看函数列表的快捷键方法。老版本的Notepad&#xff0c;比如Notepad v7.3, 默认查看函数列表的快捷键的为F8&#xff0c…

python PYQT5 键盘,鼠标,绘制,焦点,改变,输入法,事件的方法和使用例子

https://img-blog.csdnimg.cn/7630017d3ee444eab9bdedf8d48d575f.png from PyQt5.Qt import * import sys class MyQwidget(QWidget):def __init__(self):super().__init__()def showEvent(self, a0) -> None:print("窗口被展示出来",a0)def closeEvent(self,a0) …

网络编程4——传输层TCP协议的三大安全机制:三次握手四次挥手+确认应答机制+超时重传机制

文章目录 前言一、TCP协议段与机制TCP协议的特点TCP报头结构TCP协议的机制与特性 二、TCP协议的 连接管理机制 TCP建立连接&#xff1a;三次握手 TCP断开连接&#xff1a;四次挥手 三、TCP协议的 确认应答机制 四、TCP协议的 超时重传机制 总结 前言 本人是一个刚刚上路的I…

快速入门QT大法

QT大法 个人博客地址&#xff1a;https://zjxweb.github.io/#/ 1. 入门介绍 1.1 版本控制工具 svn vss git 1.2 QT 优点 跨平台接口接单&#xff0c;容易上手一定程度上简化了内存回收 2. 创建第一个QT程序 2.1 流程 点击创建项目后&#xff0c;选择项目路径以及给项目…

计算机体系结构基础知识介绍之指令集并行的基本编译器技术(循环展开、基本管道调度)

一、基本管道调度和循环展开 为了保持管道满载&#xff0c;必须通过查找可以在管道中重叠的不相关指令序列来利用指令之间的并行性。 为了避免流水线停顿&#xff0c;相关指令的执行必须与源指令分开一定的时钟周期距离&#xff0c;该距离等于该源指令的流水线延迟。 编译器执…

linux内核TCP/IP源码浅析

目录 数据接收流程图硬件层网络层ip_rcvip_rcv_coreip_rcv_finish 和 ip_rcv_finish_coreip_local_deliverip_local_deliver_finish 和 ip_protocol_deliver_rcu 传输层tcp_v4_rcvtcp_v4_do_rcvtcp_rcv_state_processtcp_rcv_establishedtcp_recvmsg 数据结构socketsocksock_co…

允许Traceroute探测漏洞和ICMP timestamp请求响应漏洞解决方法(三)

目录 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 2、ICMP timestamp请求响应漏洞 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 详细描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来…

Chapter 3: Conditional | Python for Everybody 讲义笔记_En

文章目录 Python for Everybody课程简介Chapter 3: Conditional executionBoolean expressionsLogical operatorsConditional executionAlternative executionChained conditionalsNested conditionalsCatching exceptions using try and exceptShort-circuit evaluation of lo…