稳定性大幅度提升:SOFARegistry v6 新特性介绍

NightlyBuild 每晚建造 立即下载

SOFARegistry 是蚂蚁集团内部在使用的服务注册中心,它支撑起了蚂蚁集团海量规模的业务服务。但随着蚂蚁集团业务规模的日渐庞大,SOFARegistry 在资源、容量、运维等方面也遇到了一些挑战,针对这一系列的挑战,我们对 SOFARegistry 进行了大量的改造,开发了 v6 版本的 SOFARegistry。

背景

1、v5 架构介绍

首先介绍一下我们的注册中心——SOFARegistry 现有的架构设计:采用双层存储架构,外加一个负责内部元数据管理的  Meta 组件;Session 为连接层,用于承载客户端的长连接,接收并转发客户端的注册信息到 Data 上;Data 为数据存储层,采用一致性 Hash 的数据分片方式实现水平扩容,同一个服务的 Publisher 会汇总到同一台 Data 上,同时采用多副本的方式实现高可用;Meta 为注册中心内部的管理组件,用于内部各个节点之间的互相发现。

SOFARegistry 有以下几大特点:

  • 支持海量数据:采用一致性 Hash 的数据分片方式,每台 DataServer 只存储一部分的分片数据,随数据规模的增长,只要扩容 ;DataServer 服务器即可。

  • 支持海量客户端:连接层的 SessionServer 只负责跟 Client 打交道,SessionServer 之间没有任何通信或数据复制,所以随着业务规模的增长,SessionServer 可以较轻量地扩容,不会对集群造成额外负担。

  • 秒级服务上下线通知:对于服务的上下线变化,SOFARegistry 使用推送机制,快速地实现端到端的传达。同时基于连接 + 心跳的探活设计,使得服务下线能更加及时的被发现。

2、一致性 Hash 数据分片

这边简单介绍一下 v5 版本 Data 做数据分片的方案:SOFARegistry 支持海量数据的存储,并使用了一致性 Hash 作为数据分片方案。每台服务器被虚拟成多个节点落在 Hash 环上,每个数据根据  Hash  算法计算出一个值,落到环上后顺时针命中的第一个虚拟节点,即负责存储该数据的主节点,后续命中的 N (N 为数据副本数)个不同节点作为存储该数据的副本节点。

当 Data 节点发生宕机时,比如图中 A 节点发生了宕机,原先存储在 A 上的数据,就会顺次命中顺时针后续节点,也就是该数据的副本节点,以此机制实现 Data 层的高可用。

在虚拟节点足够多的情况下,数据分片在每台节点上是非常分散均匀的,并且增加或减少节点的数量,还是能维持数据的平衡(SOFARegistry 默认虚拟点数为 1000)。

面临的挑战

在蚂蚁集团超大的业务规模下,现有的架构也遇到了很多的挑战。

1、超大规模集群

存储数据量巨大,数据回放耗时长,注册中心推送压力巨大。蚂蚁集团的单个机房,已经存在 900w Pub,2000w Sub 的注册中心集群,而且随着业务的快速发展,新增的服务和拆分的微服务个数也越来越多,注册中心内的数据量每年都在快速增长,相比 18 年,Pub/Sub 的量几乎翻倍。超大的数据量带来的是超大规模的注册中心集群,单集群超过 60 台 Data,120 台 Session,对于应急场景,注册中心的重建和重启都有很大的挑战。当注册中心进行重启,业务 Pod 大量的注册和订阅信息回放到注册中心上,经常触碰到 Session 和 Data 之间的通讯瓶颈,大集群数据回放耗时超过了 5 分钟,这影响着整个集群的快速恢复。

庞大的集群带来的还有巨大的推送压力,部分大型应用发布了上百数量的服务,本身又有数千的 Pods,同时下游订阅它的服务的应用也很多,当这些大型应用进行批量重启期间,比如大促之前的场景,注册中心的推送任务数暴涨,推送延迟会有显著的增长。

还有就是 DataServer 的灰度能力偏弱,变更的节点对于影响范围难以确定。一致性 Hash 数据分片方式有一个特点就是当发生了扩容或者宕机时,虽然只变换了少量的节点,但是会影响到其他大多数节点的数据分布,每台节点都会因为自身负责的数据分片范围发生了变化而要进行数据迁移,而且这个变换和迁移的过程很难实现灰度,比如:我们只迁移少量数据分片到新节点上的灰度试点。

2、部署站点极多,建站和发布成本高

在蚂蚁集团内部,站点非常之多,各种租户,很多城市的数据中心都需要部署注册中心。同时注册中心本身的发布和运维是一个对整个集群影响非常大的动作,这就造成了注册中心的发布和建站人力成本巨大。

SOFARegistry v6 版本改造

针对现有的挑战,SOFARegistry v6 给出了对应的解决方案

  • 通过应用级服务发现改造,减少注册中心存储的数据量,减少推送数据量。

  • 基于 Slot 分配的数据分片存储,支持无损发布和灰度发布,减少 Data 宕机期间的影响。

  • nightly build,自动化部署流程,减少运维人力成本。

1、应用级服务发现改造

服务发现分类

从服务发现的模型上,可以分为两大类:

(1)服务维度:实例的每一个服务都注册一个 Publisher,调用端使用服务名称寻址 IP 列表。

优点:服务的变更对调用方透明,针对新服务上线和微服务拆分的场景,可以做到调用方无感知。

缺点: Publisher 数目是 Pod 数目乘以应用发布的服务数目,数据量巨大而且较难规划容量。

(2)实例维度:每个实例只发布实例级的 Publisher,调用端使用应用名称寻址 IP 列表。

优点:数据量只与 IP 数目成正比,整体角度可以预估压力。

缺点: 丢失了部分信息,比如当前 IP 发布了哪些服务,这就导致了新服务上线和微服务拆分都需要调用端感知。

数据模型改造

我们参考了 Dubbo 3.0 的应用级服务发现设计方案,同时结合蚂蚁集团的 Service Mesh 产品,设计了一套对存量应用平滑迁移到应用级服务发现 + v6 版本注册中心的迁移方案。先简单介绍一下应用级服务发现的实现方案,下面是一份服务级的发布数据。

com.alipay.testapp1.FooService:1.0@DEFAULT
11.34.200.88:8080?v=4.0&_TIMEOUT=3000&_HOSTNAME=testapp1-85-5595&p1&app_name=testapp1&_SERIALIZETYPE=4&tls=false&mosn_version_none&mosn=true


com.alipay.testapp1.BarService:1.0@DEFAULT
11.34.200.88:8080?v=4.0&_TIMEOUT=3000&_HOSTNAME=testapp1-85-5595&p1&app_name=testapp1&_SERIALIZETYPE=4&tls=false&mosn_version=version_none&mosn=true

从原理上讲,主要是把一个应用中和代码版本相关的参数抽取为一份元数据,比如服务名称、协议、版本等等。这些参数一个应用的大多节点都是一致的,只有在版本进行发布的时候才会存在两份元数据,对于这些重复率很高的元数据,会对元数据本身计算一次 Hash,得到一个 Revision 字符串。其他的参数,比如 IP、端口等等,大多是只和所在节点相关的参数,那么这些多个服务下相同参数都可以汇聚成一个实例级的 Publisher,引用元数据上的 Revision,这样从整个集群来看,原先服务级 Publisher 中大部分数据都可以被抽取为一份元数据,可以节省大量的存储空间。

元数据:

{
  "application": "testapp1",
  "revision": "testapp1-594f803b380a41396ed63dca39503542",
  "clientVersion": "v1.1.0",
  "baseParams": {
    "__SERIALIZETYPE":{"values":["4"]},
    "app_name":{"values":["testapp1"]},
    "_TIMEOUT":{"values":["3000"]},
    "tls":{"values":["false"]},
  },
  "services": {
    "com.alipay.testapp1.FooService:1.0@DEFAULT": {
      "id": "0",
    },
    "com.alipay.testapp1.BarService:1.0@DEFAULT": {
      "id": "1",
    }
  }
  

实例 Publisher

{
  "addr": "11.34.200.88:8080",
  "rev": "testapp1-594f803b380a41396ed63dca39503542",
  "mv": "v1.1.0",
  "bps": {
    "_HOSTNAME": ["testapp1-85-5595"],
    "mosn_version":{"values":["version_none"]},
    "mosn":{"values":["true"]},
  }
}

如上元数据和 Publisher,结合两份数据,调用方就能还原这个节点发布了哪些接口以及有哪些参数,从而拼接出服务级的 URL。

平滑迁移

应用级服务发现改造有个难题就是存量应用的逐步迁移,以及会不会存在部分应用永远无法迁移。在蚂蚁集团内部,绝大部分应用都已经接入了 MOSN,所以我们整套方案都基于 MOSN 建立,借助 MOSN 实现应用级服务发现的平滑迁移和全站快速铺开;应用依然采用服务级 Pub/Sub 的方式和 MOSN 进行交互,MOSN 内部的应用级服务发现模块会转化为应用级的发布订阅,并通过动态配置开关的方式逐步开启应用级服务发现;为了平滑上线应用级服务发现,SOFARegistry v6 的上线采用对 v5 和 v6 两个版本的注册中心双订阅双发布的方式逐步灰度切换,确保在切换过程中,没有升级接入 MOSN 或者没有打开开关的应用完全不受影响。

在完成绝大多数应用的应用级迁移后,全部的应用都已经到了 v6 版本的注册中心上,但仍然存在很少部分应用因为没有接入 MOSN,然后以服务级订阅发布和注册中心交互,为了确保已经改造完的应用和这部分没有改造的应用能够互相订阅,我们做了一些额外的支持:

  • 服务级订阅端是无法直接订阅应用级发布数据的,所以我们实现了一个应用级 Publisher 转接口级 Publisher 的模块,可以按需转化出指定服务的 Publisher,没有接入 MOSN 的应用可以顺利的订阅到这部分数据,因为只有很少部分应用没有接入 MOSN,所以需要进行转化的服务数目同样也很少。

  • 应用级订阅端在订阅的时候会额外发起一个服务级的订阅,用于订阅没有接入 MOSN 应用的发布数据,由于这部分应用非常少,实际绝大多数的服务级订阅都不会有推送任务。

改造效果

上图是我们压测的数据,对两个注册中心进行完全相同的操作,一个进行应用级发布订阅,一个进行服务级发布订阅,同时监控各种事件的发生频率。我们模拟的测试应用,每个应用发布了 100 个服务,订阅了 200 个服务。应用级改造的优化非常明显:

  • Pub 注册的次数大幅度下降,下降了两个数量。

  • Sub 注册小幅度增长,因为如前面提到的那样,会同时发起服务级的 Sub,但大多场景这些额外的订阅是不会有推送的,结合推送次数的下降可以得出实际推送任务下降了几倍的结论。

2、数据分片改造

自定义 Slot 分配算法

我们从逻辑上将数据范围划分成 N 个大小相等的  Slot,并且 Slot 数量后续不可再修改。然后,还需要引进“路由表”SlotTable 的概念,SlotTable 负责存放这每个节点和 N 个 Slot 的映射关系,并保证尽量把所有 Slot 均匀地分配给每个节点。

Session 在进行路由的时候,根据 DataInfoId 的 Hash 值确定数据所在 Slot,再从路由表中拿到数据对应的 Data 节点进行数据拉取,每个 Slot 都会有一个主节点和多个副本节点,从而实现主节点宕机的时候,副本节点能快速提升为主节点。

分配算法的主要逻辑是:

  • 主节点和副本节点不能分配在同一个 Data 上;

  • Slot 对应主节点 Data 宕机时,优先提升副本节点为主节点,减少不可服务时间;

  • 新节点先作为副本节点进行数据同步;主要目标在于减少节点变更时尽可能缩短注册中心数据的不可用时长。

数据完整度校验

Slot 数据完整度校验的作用在于当一个 Slot 数据所有副本所在节点全部宕机,数据发生丢失时,只能通过 Session 上的缓存数据进行数据回放。但在完全回放完成时,Slot 是不可对外提供读取服务的,以此避免推空或者推错。

数据同步架构

  • Data 和 Session 通过心跳的机制在 Meta 上进行续约,当 Data 发生节点变更的时候,Meta 此时会重新进行分配,生成新的 SlotTable,并通过广播和心跳的方式返回所有的节点,Session 就会用这份 SlotTable 寻址新的 Data 节点。存在一个时刻,集群中存在两份 SlotTable,分裂时间最大(1s)。

  • Session 上会缓存 Client 的 Pub 和 Sub 数据作为基准数据,在增量发送给 Data 的同时,Slot 的 leader 节点会定时和 Session 进行数据比对,Slot 的 follower 和 leader 也会定时进行数据对比,这样做到整个集群数据能快速达到最终一致,减少异常场景的不可服务时间。

无损发布

无损发布的整体流程是 Data 上的 Slot 逐步迁移,期间仍然对外提供服务。

迁移完成后主动从列表中剔除并设置节点黑名单并下线。

以图为例,假设要下线的节点是 DataServer-1:将 Data-server 添加到注册中心迁移名单中;再将 Slot-2 对应的 follower(DataServer-2)提升为 Leader;等待 Data 节点达到稳定;继续将 Slot-3 对应的 follower(DataServer-3) 提升为 Leader;按照以上步骤分配掉剩余的 follower Slots;Slot 迁移完毕,Data-server 从 Data 列表中剔除,同时添加为黑名单;从迁移名单中设置为 succeed。

灰度发布

通过建立一个 DataId 到 Slot 的映射关系覆盖采用 Hash 的方式计算所属 Slot,同时暴露接口给外部的管控系统来实现,某一个特定服务的数据调度到新的 DataServer 来实现 DataServer 的灰度功能。

3、新版本性能优化

SOFARegistry 的 v6 版本相比于 v5 版本性能也有较大的提升:压测采用的机器都是 4c8g, Session*8, Data*3。

从压测数据可以看到 v6 版本相对 v5 版本性能有较大提升;v5 版本在此压力场景下已经触碰到瓶颈,推送次数开始下降;v6 推送延迟也有显著下降。这边提一下推送延迟,指的是从发布端进行变更操作到订阅端接收到对应的数据的时长。结合断链感知和服务端推送的机制,v6 版本的数据变更能在较短时间以内广播到集群中的所有订阅端。

4、nightly build 

结合前面的改造,通过 Slot 分配算法实现无损发布和灰度发布,以及应用级服务发现改造减少数据量。可以使得注册中心的整个发布过程变得更加的自动化。

一个版本的注册中心合入主分支后自动产出新的 Docker 镜像部署到测试集群,通过集测、单测的结果,还有高压混沌测试的测试报告,验证该版本后推进到线下、预发和灰度集群的发布。预发和灰度集群运行正常后发布至生产集群,生产发布的过程中会检查注册中心相关指标和数据检查进行变更防御。

sofa-registry-chaos

nightly build 中有两个重要的步骤,门禁中的高压混沌测试,以及变更防御中的数据检查。我们开发了一套可以对注册中心进行功能验证、压测、混沌测试的测试平台 sofa-registry-chaos,用来完成门禁系统中高压混沌测试这项,以及变更防御中的采样数据检查。图示是我们一个专门用于注册中心 7*24 测试的压测集群,从中能观察到:

  • 注册中心在无故障期间的推送延迟是否稳定,新版本上线是否造成推送延迟的上涨;

  • 故障发生后数据是否能快速恢复最终一致性;

  • 故障发生期间,容许注册中心数据推送延后一段时间,但不会推少或者推空。


未来规划

SOFARegitry v6 还在内部上线阶段,目前还没有开源,未来会持续增强作为服务注册中心方面的能力,比如多语言,多机房等等,同时会开源周边的配套组件和工具,也会更加贴合目前社区云原生的趋势,支持 Kubernetes, Istio 等等,预计功能的排期:

  • 21/07 SOFARegistry v6 版本开源发布;

  • 21/08 支持多语言客户端和多机房数据互通;

  • 21/09 混沌测试平台 sofa-registry-chaos 开源。

 延伸阅读

强化学习新手上路:用PPO-Clip轻松玩转Pendulum-v1(PyTorch保姆级教程) 本文提供了一份基于PyTorch的PPO-Clip算法实战教程,指导强化学习新手在Pendulum-v1环境中构建连续控制智能体。教程详细解析了PPO-Clip的核心机制,特别是其Clip机制如何限制策略更新幅度以确保训练稳定,并涵盖了从环境配置、策略网络设计、经验收集到完整训练框架搭建的全过程,是掌握连续动作空间强化学习的实用指南。 阅读详情

相关推荐

(1)大蚂蚁即时通讯

即时通讯软件BigAnt(大蚂蚁)是杭州艾朴软件推出的一个”企业级”的即时通讯平台。该平台专为企业,其他企事业单位和政府单位而设计,目的就是为了增强内部沟通能力,提高内部员工的工作效率;同时服务器就直接置于单位内部,所有信息由单位自己管理,让单位以更安全、更可伸缩和更易于管理的方式灵活方便地使用协同和通信服务的功能! BigAnt(大蚂蚁)即时通讯软件包括服务器端和客户端。客户端功能包括单位

少安的砖厂 2234

什么是 Nightly Build

每日构建(Nightly Build,也叫Daily Build), 是将一个软件项目的所有最新代码取出,从头开始编译,链接,运行测试软件包对代码进行单元测试并对主要功能进行测试,发现错误并报告错误的完整过程.每日 构建是连续集成的一个最佳实践,它要求每天至少构建软件一次.因为对于许多大型项目来说,每次构建花掉的时间可能高达几个小时,在白天进行构建可能会消耗 过多的计算机资源,对开发造成一定的影响

mingyuan's workspace 3693

避坑指南:在Linux服务器上用Conda安装antiSMASH 5.2.0(解决Jinja2报错和Matplotlib权限问题)

本文详细介绍了在Linux服务器上使用Conda安装antiSMASH 5.2.0的避坑指南,重点解决了Jinja2报错和Matplotlib权限问题。通过创建专用conda环境、安装指定版本依赖包和配置缓存目录,帮助用户顺利完成antiSMASH的本地部署,适用于批量处理基因组分析任务。

weixin_26911099的博客 316

大型网站架构:无损发布

大型网站架构:无损发布 2015-07-06 1. 背景 因为发布系统,导致应用可用性跌到 99.99 以下,细节参考:Nginx 上收集的系统可用性损失记录,借此机会,寻求应用无损发布的解决方案。 备注: 通过比对「系统发布时间」和「系统可用性降低」时 Nginx 的访问日志,2 个时间相吻合,因此,确定系统发布过程中,应用不可用,损失可用性。 2. 分析 之前可用性文章中,提...

远古大猛犸 809

MaxDEA如何计算超效率DEA

MaxDEA如何计算超效率DEA第一步,导入数据,设置输出和输出,点击OK;第二步,运行模型; 本文计算的是超效率DEA-BCC。 第一步,导入数据,设置输出和输出,点击OK; 第二步,运行模型; 在distance选项框中选择Radial:CCR(1978);BCC(1984)。 在Orientation中选择Non-oriented。其中,Input-oriented是投入最小;Outp...

王樰沫 1万+

双轮差动机器人SLAM实战:轮速里程计从建模到精度验证(附Matlab代码)

本文详细介绍了双轮差动机器人SLAM系统中轮速里程计的实现全流程,包括核心原理、建模方法、Matlab代码实现及精度验证。通过轮速仪数据建模和连续积分算法,提升定位精度,并附有完整的误差分析和工程优化技巧,为开发者提供实用参考。

weixin_29050271的博客 224

为啥总在凌晨上线,如何无损发布

为什么很多公司升级系统,选择在晚上上线?答:美名其曰,晚上上线,对用户影响最小。 为什么会对用户产生影响?答:系统升级往往需要重启,重启的过程中,正在访问的用户会访问失败...

架构师之路 3277

YOLOv5s模型训练全流程解析:从数据准备到实战检测

本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。

weixin_29041767的博客 333

无损发布学习

偶然听到这个名字,很好奇,学习一下。 场景:分布式环境下,服务重启,摘流和增流 服务停止,但是现有需求还未处理完,仍有新流量进来

xybz1993的博客 443

Palantir解密:说人话,到底什么是“本体”?

笔者2018年在云计算公司开展政企数字化专项时,便意识到全面数字化进程背后存在大量未知领域,尤其是未来数字世界的底层架构如何构建这一关键问题。可惜因为种种原因,连那几个小专项最终都未能落地,也就无从深入了。近期看了很多有关Palantir的材料,倒觉得这像是新硅谷(区别于比尔盖茨、扎克伯格等主导的硅谷时代)交出的一份关于“数字世界底层架构”的答案,至于这个答案是否成立、有没有更优解、我们本土对标的版本是什么,可能都还待看。《Palantir解密》系列尝试通过解析Palantir,来系统回答这一问题。

SZSDQJC的博客 2157

【Claude Code 源码解析教程】总体大纲

本教程旨在深入解析 Anthropic Claude Code 项目的源码架构和实现细节。Claude Code 是一个基于 TypeScript + Bun 构建的 AI 编程助手 CLI 工具,代号 "Tengu",具有复杂的多模块架构和丰富的功能特性。本教程基于Claude Code 的源码分析来生成,将帮助您全面掌握 Claude Code 的源码架构和实现细节,为开发类似 AI 编程助手工具奠定坚实基础。

rengang66的博客 387

微服务生产实战-Spring Cloud灰度发布和无损发布

Spring Cloud灰度发布和无损发布 随着服务越来越多, 我们在实际的工作中我们会经常遇到如下问题: 1、几十上百的服务如何更好的在线上进行灰度发布, 使得部分用户能够使用最新的功能? 2、多人同环境开发或者共享部分服务的情况, 如果针对同一个服务分别进行不同逻辑的调试和验证? 3、服务在启动后突然收到大量请求会导致延时很大且业务大量失败, 如何做到服务级别的无损发布? 通过灰度发布, 我们希望做到任意链路的服务都能通过灰度规则请求到, 如下图所示: 灰度发布实现简述 spring..

einarzhang的专栏 1585

TMC2240 芯片数据手册解读|第三篇 TMC2240 芯片引脚配置与说明

本文详细解析了TMC2240芯片的两款封装(TQFN32和TSSOP38-EP)的引脚分布、电气属性及硬件设计要点。内容涵盖:1)芯片内部功能架构,包括供电、运动控制等五大链路;2)两款封装的核心规范与适用场景;3)七大引脚分类详解(电源、控制、编码器等)及接线要求;4)PCB设计避坑指南,强调电源分割、电荷泵布局等关键点。文章提供完整的原理图绘制和硬件调试指导,适合不同基础的工程师参考实践。

BackCatK Chen的博客 1094

SOFA Weekly | SOFARegistry 发布 V6-alpha 代码,QA 整理

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)是...

金融级分布式架构 222

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

每日集成 --- 也许被敏捷忽视的重要技术实践

先从每日构建说起:每日构建是什么? 每日构建对应的英文是Daily Build,由于翻译和理解的问题,也有称之为“每日编译” 由于一般的每日构建发生在晚上,发生在晚上的每日构建,也称为Nightly Build ,中文译为“夜晚构建”或者“晚间构建”,百度检索下,“夜晚构建”要远多于“晚间构建” 来自 http://en.wikipedia.org/wiki/Daily_build ...

各研发管理 409

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

支付宝资深技术专家尹博学:新一代金融核心突破之全分布式单元化技术架构

在介绍完行业常见的分布式架构后,我们来看一下蚂蚁的分布式架构发展历程,和单元化架构的详细介绍。这是蚂蚁分布式架构发展历程。蚂蚁也经历了单活、同城双活、两地三中心,三个阶段。其中两地三中心是同城双活加一个冷备。随着蚂蚁业务和业务量复杂度的越来越高,业务对于基础架构的要求也越来越高,即扩展能力、容灾能力、灰度能力要求越来越高。最终蚂蚁发展到了单元化架构,将主要业务拆分单元即分片,装入不同的逻辑单元内,每个分片的数据库实现三地五中心部署即三地五中心的单元化架构。

Java程序员的知识博客 780

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

实战每晚构建(上)

本文有两个目的:实现每晚构建平台和探讨一个软件从需求文档到设计文档的书写规范。 1、前言 本文有两个目的:实现每晚构建平台和探讨一个软件从需求文档到设计文档的书写规范。 每晚构建是软件研发管理中极具价值的手段,对于加快发现和改正缺陷,降低集成风险,提高产品质量,加强成员沟通与协作,缩短产品上市时间,增加项目开发透明度,提高项目组成员信心和斗志有着非常重要的作用和意义。本文从软件工...

asd3318118的博客 176

开源软件约定成俗的版本称谓

1.Release:实现承诺的特性,并且通过彻底测试的稳定版本。这种版本一般非常健壮,并且拥有许多可以配合使用的第三方软件,适合开发商业项目。    2.Stable Build:新的Release版本一般要经过若干个开发周期,在此期间,如果某个版本经过测试相对稳定,开发人员便会把它发布成Stable Build, 供渴望尝试新特性的用户在第一时间体验。相当于Beta测试版本的Windows。

风轻云淡 勇往直前 815

Highcharts Nightly Builds 每日构建:确保图表库持续集成

本文探讨了NightlyBuilds(每夜构建)在Highcharts图表库开发中的应用与价值。作为持续集成的关键实践,NightlyBuilds通过每日自动构建和测试最新代码,帮助开发者提前发现错误、验证依赖关系并获取质量反馈。Highcharts通过npm和CDN提供NightlyBuilds版本,支持开发者测试新功能但不建议用于生产环境。这种实践不仅提高了代码质量,还促进了开发者社区的协作与创新

Highcharts可视化图表库中文博客 854

究竟为啥总在凌晨上线,如何进行无损发布

为什么很多互联网公司升级系统,选择在晚上上线?美名其曰,晚上上线,对用户影响最小。为什么会对用户产生影响?很多人认为,系统升级往往需要重启,重启的过程中,正在访问的用户会访问失败。例...

shenjian58的博客 1185

rust安装nightly build版本

一、安装stable版 $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 二、安装nightly版 $ rustc --version $ rustup toolchain install nightly $ rustup default nightly info: using existing install for 'nightly-x86_64-apple-darwin' info: default toolchain

ViewViewer的专栏 1965

基于Nginx实现无损发布

一、原理 Nginx的nginx_upstream_check_module可以向服务端发送心跳探活。 在服务启动后,服务的内存中放置一状态200,Nginx请求接口获得这个状态,认为服务可用,会继续为其转发流量。 当发布服务时,我们再启动脚本中向服务发布一个put请求,修改服务内存的状态为503,Nginx检测到后,认为这台服务故障,不会为其转发流量。 我们在脚本中sleep一段时间,用于处理未完成的请求,之后kill进程,重新编译启动。 启动后内存的值又变为了200,Nginx心跳探活发现服

帝都的雁的博客 1012

Kubernetes 学习总结(24)—— Kubernetes 滚动更新、蓝绿发布、金丝雀发布等发布策略详解

前言 大部分公司都已经在使用 Kubernetes进行容器管理和编排了,但是关于 Kubernetes的发布策略相关的概括我们很多同学还没有一个完整的认识,下面我们对 Kubernetes 的多种发布策略从整体上做一个概括的认识。Kubernetes 中常见的发布策略主要有如下六种: 重建(recreate) :即停止一个原有的容器,然后进行容器的新建。 滚动更新(rollingUpdate) :停掉一个容器,然后更新一个容器。 蓝绿布署(blue/green ):准备一套蓝色的容器和一套绿...

科技D人生 3144

微服务在弹性云实现无损发布实践

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 1. 背景 原来的系统是个单体服务,导致逻辑越来越复杂,牵一发而动全身。为了提高系统的可扩展性,我们把原来的单体系统,按照功能拆分成不同的微服务。 2. 弹性云配置 我们所有的微服务都是部署在弹性云上的,希望在部署服务时能够做到无损发布。要做到这一点,以下几个步骤是需要实现的

www_xuhss_com的博客 246

软件工程进阶之每日构建

在昨天“正确地做事(善用工具)”的帖子里提到了代码提交频度的问题。当时我特别强调了“要保证提交的代码能编译通过”,理由是“对于每日构建很重要”。我估计列位看官中,不太熟悉每日构建的,大有人在;而且国内停留在手工作坊阶段的软件公司,为数也不少。因此今天我们就来说一下"每日构建"这个话题。假如你平时已经很善于运用"每日构建"这一有效的手段,可以直接略过本系列,去看其它帖子。   照例先来说说什么是“每

蜜我生活之牛仔“闺房” 588

UEFI网络协议栈安全配置:安全配置示例

UEFI(统一可扩展固件接口)网络协议栈是现代固件系统的重要组成部分,负责在启动阶段提供网络连接能力。正确配置其安全参数对于保护设备启动过程中的网络通信至关重要。本文将介绍UEFI网络协议栈的核心安全配置方法,并提供实用示例帮助开发者构建安全的启动环境。 ## 一、UEFI网络协议栈安全基础 UEFI网络协议栈通过一系列模块化组件实现网络功能,主要包括TCP/IP协议族、HTTP服务和安全协议

gitblog_01103的博客 337
上一篇: 【直播预约】下一代机密计算即将到来:性能比肩普通应用
下一篇: SOFA Weekly | SOFARegistry 发布 V6-alpha 代码,QA 整理
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值