系列文章目录
本章将根据多年经验,进行规划讲解
文章目录
- 系列文章目录
- 前言
- 一、如何做到 不停服更新、 不停服更新的机制有什么好处,
前言
服务迭代发版、少不了的就是停服更新,为了不影响 用户体验,大部分公司选择半夜更新迭代,然后 nginx挂载维护页面, 其实增加了员工的工作成本,和时间成本,最重要的是影响了用户体验、特别是作为一个游戏公司
游戏 大家都知道吧,
QQ飞车,王者荣耀,什么撸呀撸,这些游戏每分钟,几乎都有玩家
但是他们做到了、不停服版本更新、或者修复 BUG,当然修复 BUG 还可以用热修复(大部分热修复是有限制的,这里就不细说)
有人说
使用部署两套服务,更新时发布到另外一台B-server,并在测试通过后 使用Nginx将流量切换到新服务器,这种方式是一种常见的做法,通常被称为蓝绿部署或滚动发布。尽管此方法有一些优点,但也可能存在以下缺点:
缺点:
-
部署成本:维护和管理两套服务会带来额外的部署和维护成本。每个服务都需要独立的资源和基础设施支持。
-
资源利用率较低:同时部署两套服务意味着需要占用两倍的服务器资源和网络带宽,这可能导致资源利用率较低,
-
数据同步问题:如果新旧服务之间存在数据互操作性或持久化存储依赖,需要确保数据的一致性和同步。这可能需要实现额外的机制来确保数据正确地从旧服务迁移到新服务。
-
需要额外的测试和验证:尽管已在B-server上进行了测试,但在切换流量之前,仍然需要进行充分的测试和验证来确保新服务与预期一致,并且能够承受实际生产环境中的负载和压力。
-
风险较高:
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 版本的服务。