干货 | 秒级上下线,携程服务注册中心架构演进

携程apollo注册中心 携程Apollo注册中心编译好的版本,quikstart 里面有个demo.sh,把里面的数据库信息改下,然后倒入中间的2个sql文件到db中,执行 ./demo.sh start 即可启动,注意windows下需要 git bash 执行命令才能启动。 https://github.com/ctripcorp/apollo/wiki/Quick-Start 立即下载

作者简介

 

Alex,携程资深软件工程师,关注微服务架构及分布式缓存技术。

一、前言

携程的微服务框架产品从2013年发展至今,已经历了7年多的打造。其中所使用的服务注册中心也从最开始人工数据维护架构演进到了现在全自动、百万容量级的架构。本文将逐一回顾携程服务注册中心所经历的三轮迭代过程,并重点介绍最新的第三版架构的设计与实现。

 

二、服务注册中心是什么?

图2-1 微服务架构

微服务架构中所要解决的最核心的技术问题有两点,一个是服务发现,另一个是负载均衡。而服务注册中心就是用来解决服务发现问题的。

如图2-1 所示,在微服务架构中,服务提供方(ServiceProvider),需要手动或自动地将服务地址注册到服务注册中心(Registry)。注册的信息包括但不限于ServiceID 和URL。服务消费方(ServiceConsumer)在首次调用服务前,需要先从服务注册中心查询对应服务的注册信息,然后依据返回的服务地址信息来发起调用。

 

三、携程服务注册中心演变史

3.1 人工数据维护阶段

在携程微服务架构推广初期,为了快速搭建微服务体系,服务的调用过程继续使用传统的域名方式来进行。在服务治理层面,服务提供方首先需要将服务的一个完整URL提交到注册中心。服务消费方在运行时会定期从注册中心同步最新的URL,并发起服务调用。而这个URL与应用服务器的关联关系则由运维人员人工在负载均衡设备上配置。

 

这种模式下的服务注册中心的优点是结构简单、容易实现且运维工作量小,有利于微服务架构快速推广。而缺点则主要集中在以下几个方面:

  • 配置复杂:负载均衡和服务发现的数据依赖人工维护,影响开发效率和体验。

  • 单点问题:服务调用强依赖于负载均衡设备,该设备的可用性会直接影响到微服务体系的可用性。

  • 性能问题:服务调用需要经过一层负载均衡设备,存在额外的网络开销,会直接影响到性能。

3.2 基于etcd的服务注册中心

在携程微服务体系扩展到Java平台时,我们希望能够解决前面由于使用外部负载均衡设备所带来的各种缺陷,所以计划将负载均衡设备的功能集成到微服务的SDK中,同时由注册中心下发的服务注册信息从之前的固定使用域名的URL,改为服务集群各台服务器IP所对应的URL。

改进后的工作流程是这样的:服务提供方启动后,SDK会把包含本机 IP 的服务实例地址上报给注册中心;而服务消费方启动后,SDK会定期从注册中心获取最新的服务地址列表,并使用内置的负载均衡算法选出一个地址来发起请求。同时,为了保证服务注册数据的有效性,其中设置有“存活时间”(TTL,Time to live)。所以需要服务注册中心支持清理过期的注册数据。在设计新的架构时,综合以上这些考虑,我们选择了etcd来存储服务注册数据。

图3-1 基于 etcd 的服务注册中心架构

基于 etcd 的服务注册中心整体架构,如图 3-1所示,包含三个角色。

  • Client

提供应用接入服务注册中心的基本 API。应用通过嵌入到应用程序内的 SDK,实现服务的自注册和自发现。

  • Session

负责处理Client提交的服务注册和发现请求。Client的请求经Session协议转换后,直接转发给 etcd。etcd的响应数据经Session的服务治理逻辑处理后,再返回给Client。

  • etcd

负责存储服务注册数据。集群内各节点间使用Raft协议来进行数据同步。在没有网络分区的情况下,节点上数据可以做到完全一致。

 

etcd 满足CAP(Consistency:数据一致性、Availability:服务可用性、Partition-tolerance:分区容错性)中的 CP,即优先考虑分布式缓存的数据一致性。从其设计的出发点来看,etcd 不适合对读写性能要求特别高的场景,而是适合量小且需要高可靠和一致性数据存储服务,比如配置数据、K8s中的集群元数据等等。

 

在经过一段时间的线上部署和运维后,我们发现etcd中存在潜在的可用性和性能问题。

 

先说下可用性问题。假设etcd集群存在 A、B、C、D和E 五个节点,A 是当前集群的 Leader 节点。如果此时发生网络分区故障,其中A、B 在一个分区,而C、D和E在另一个分区。Leader A向所有的Follower发送心跳,但无法获取到大多数节点响应(计算公式为(N+2)/2,即在拥有五个节点的集群中需要至少获得三个节点的响应)。心跳超时后,集群进入选举阶段。但受到网络分区的影响,A和B都无法获得大多数节点投票。所以由于缺少Leader,A和B 所在的分区会处于不可用的状态,无法写入数据。

 

再说下性能问题。etcd所有的写操作都由 Leader 节点负责执行。而自注册服务实例的健康检测,是依赖注册中心数据中的过期机制实现的。所以各个服务实例需要不断的发送心跳,来保持数据的活跃和有效。但这样就会产生大量的写操作,对Leader节点的性能和网络带宽都是一个极大的挑战。

 

在服务发现的场景下,服务注册中心的可用性比数据一致性更加重要。数据不一致可以通过客户端容错(比如熔断或踢出不可用服务器等),来把影响降到最低,甚至可以忽略不计。而可用性的下降将直接会导致服务的注册和发现异常,甚至会引发大规模的生产故障。

 

综合以上问题,并考虑到 etcd 无法很好的接入携程当时的运维和监控体系,我们走上了自研服务注册中心的道路。

 

3.3 携程自研的服务注册中心

在设计这套自研的服务注册中心时,我们参考了当时业界使用比较广泛的由 Netflix 开源的 Eureka。新版注册中心同样没有使用外部存储,而是将服务的注册数据保存在内存中。节点间采用对等的架构设计。所有节点都可以接受客户端的读写请求。节点间会进行数据同步,实现数据最终一致。

在基本的服务注册和发现功能外,为了提升效率,我们还在其中增加了服务变更通知推送功能。这样客户端可以以最快的速度获取到更新的服务注册信息,目前已经实现了服务实例的秒级上下线。

 

我们将这套全新的服务注册中心的开发代号起名为 Artemis。为了简单,后文中均以该开发代号来进行指代。

 

四、Artemis 架构说明

4.1 总体架构

图 4-1 Artemis 架构

Artemis 的整体架构与基于 etcd的服务注册中心类似。如图4-1 所示,一共包含四个角色:

  • Client

提供应用接入注册中心基本API。应用通过引用Artemis 对外提供SDK,以编程方式实现服务注册和发现。

  • Session

负责接受 Client 的服务注册和发现请求。Session作为中间层将服务提供方的注册请求复制分发给Data,并从Data上查询服务注册数据或推送数据变化给服务消费方。Session节点自身是无状态的,集群规模可随着Client的规模增长而扩容,支持Artemis 服务能力的水平扩展。

  • Data

负责存储服务注册数据,数据按ServiceId进行一致性哈希分片存储,通过多副本备份保证数据的高可用。Data集群规模可随着注册数据量增长而持续扩容,从而支持 Artemis 数据存储容量的水平扩展。

  • MetaServer

负责从K8s同步Artemis集群服务器地址列表。在Artemis集群发生变化时,MetaServer会实时通知到Session。Session在程序启动或者收到Artemis 集群变化通知时,将主动从MetaServer拉取最新的Artemis地址列表并缓存到本地。

4.2 如何支持海量数据

分布式系统在处理海量数据时,首先是考虑如何拆分数据,其次是在数据拆后的如何保障系统的可用性。

 

Artemis使用一致性哈希环来拆分数据。一致性哈希环的基本使用方式是通过一个哈希函数来计算数据或节点的哈希值,令该哈希函数的数据值域为一个环,即哈希函数输出的最大值是最小值的前序,节点依据其哈希函数计算结果分布在环上,每个节点负责处理从自己开始逆时针至下一个节点全部哈希值域上的数据。Artemis使用服务注册数据的ServiceId来计算哈希值,这样可以保证同一个服务的注册数据可以被存储在相同的节点上,减少网络调用的操作量。

 

例:假设一致性哈希函数值域是[0, 8),系统中有三个节点 A、B、C,分别处于一致性哈希环的2、5、6位置。由此可知,节点A的负责范围为 [7,8)和 [0,3),节点B的负责范围为[3, 6),节点C的负责范围为[6, 7),如图 4-2所示。

图4-2一致性哈希环

使用一致性哈希环拆分数据的优点在于可以任意动态扩容或缩容节点。对集群进行扩容或缩容的操作,仅会影响与被操作节点相邻的节点上的数据分布。

 

但最基本的一致性哈希环用法存在一个很明显的缺陷,那就是环上的节点分布不均匀。由此所带来另一个较为严重的问题是,当一个节点出现异常时,该节点的压力会全部转移到相邻的一个节点;而当一个新节点加入时,只能为一个相邻节点分摊压力。

 

一种常见的改进算法是引入虚拟节点(virtual node)的概念。系统在初始化时,每个真实节点都会对应的创建多个虚拟节点。虚拟节点的个数一般远大于集群中服务器的个数。依据虚拟节点的哈希值,系统将它们分布到环上。在操作数据时,首先需要通过数据的哈希值在环上找到对应的虚拟节点,然后从元数据中查找到对应的真实节点,再进行数据读写操作。使用虚拟节点有多个好处。首先,一旦系统中某个节点出现不可用,其对应的所有虚拟节点也会同时变为不可用,从而它的服务压力会被均衡的分配到多个相邻的真实节点上。同理,一旦系统中加入一个新节点,也将在环上引入多个虚拟节点,从而使得新节点可以均衡的分担多个真实节点的压力。从全局看,这种实现方式更加容易实现集群扩容时的负载均衡。

 

Artemis使用一致性哈希环加虚拟节点的方法,实现了海量数据的分片存储和集群扩缩容时的负载均衡。而在数据拆分后的集群可用性方面,Artemis则是通过数据副本策略来保障的。每一条服务注册数据同时被存储在多个节点上,其中一个是主副本节点,其余的是从副本节点。假如我们需要在集群中选择N个节点来存储同一条数据,那么在根据哈希函数计算出数据中ServiceID的哈希值后,系统会从哈希值落到环上的位置开始顺时针依次选择连续N个不同的真实节点来存储这一份数据的各个副本。

图4-3 一致性哈希环(6个虚拟节点,2个注册数据副本)

 

4.3 服务实例秒级上下线

在设计服务注册中心时,一个重要的考量指标就是服务实例的上下线延迟。这个延迟是指从服务注册中心确定服务实例发生了上下线变更起,到服务消费方收到更新后的注册数据的时间间隔。延迟越高,则服务流量切换所需时间就越长,涉及到流量切换的场景(故障转移、服务发布)给用户带来的体验就越差。

 

为了降低服务实例的上下线延迟,Artemis基于WebSocket实现了服务实例的上下线通知功能。通知可以秒级送达到服务消费方。这一功能的具体实现过程如下:

  • 服务消费方在初始化过程中,会先经Session域名查询Session的IP地址列表并缓存到本地,然后再从列表中选择一台Session服务器与之建立 WebSocket长连接,并发送服务订阅请求。

  • Session在收到服务订阅请求后,先会将服务订阅信息和 WebSocket 连接的映射关系存储到本地。后续当Session收到Data推送的服务变更消息时,它会先从上述映射关系中查询该服务对应的变更订阅方(即对应的WebSocket 连接列表),然后将消息通过这些连接推送出去。

  • 在收到服务变更消息后,服务消费方会根据消息的内容更新本地缓存中的服务地址列表。

 

4.3.1 服务实例上线过程

图4-4 服务实例上线过程

如图 4-4所示,这是一次服务实例正常上线过程,其中包含了服务注册数据在 Artemis内部的流转过程。

  • 服务提供方发送注册数据给Session。

  • Session收到服务实例的注册数据,依据ServiceID在环上查找到相应的Data节点列表,再将数据写到对应的数个Data节点上。

  • Data在收到数据后,先将数据写入本地缓存,然后推送服务实例上线消息给所有的Session节点。

  • Session在收到服务实例上线消息后,将消息推送给对应的服务消费方。

  • 服务消费方在收到服务实例上线消息后,将消息中所包含的服务地址加入到本地缓存中的服务地址列表,后续客户端 SDK中的负载均衡模块将分配部分流量给新上线的服务实例。

 

4.3.2 服务实例下线过程

图4-5服务实例正常下线过程

服务实例下线分为正常下线和异常下线两种情况。正常下线并不会在服务消费方引起调用异常,而异常下线则可能会导致服务消费方出现短时间的调用异常。

 

服务实例正常下线,一般是通过监听应用程序关闭事件(如 JVM的 Shutdown Hook),主动触发服务实例注销操作,将服务实例从 Artemis 中删除。服务下线大致过程与服务上线过程类似,这里就不再赘述了。

 

图4-6 服务异常下线过程

 

服务实例异常下线,是指服务因意外情况(如宕机、网络中断或断电等)而不可用,但没有将注册数据从Artemis中删除。这些异常的注册数据,依赖Artemis的健康检测机制进行处理。类似于Eureka和etcd等系统中的数据过期机制,Artemis中的服务实例注册数据以Lease(租约)的形式存在,需要服务提供方不断发送心跳来续约。同时 Artemis内部会运行一个异步线程来自动踢出到期的 Lease。异常下线的服务实例由于不会再继续上报心跳,它的注册数据在一段时间后(TTL)将自动被Artemis清理掉。

 

Artemis也支持用户在客户端自定义健康检测逻辑,当应用程序不健康时,应用程序可以主动更新服务提供方的状态或停止上报心跳。那么服务提供方状态又是如何被服务消费方感知到的呢?当服务提供方注册数据修改后,服务注册数据会生成一个新的版本号(单调递增),并在下一次上报心跳时,发送给Artemis。Artemis在收到服务提供方的心跳后,会先检查心跳中服务注册数据的版本号。如果该版本号大于本地Lease中的服务注册数据版本号,Artemis就会更新Lease中的服务注册数据,并生成一条服务变化消息,逐级经Data、Session 推送给服务消费方。

 

五、小结

本文介绍了携程的微服务注册中心架构演进迭代过程,并重点介绍了当前版本服务注册中心(Artemis)的架构,以及海量数据存储和服务秒级上下线机制的实现。在携程微服务架构演进的过程中,服务发现的主要方式从手工维护,逐步过渡到自注册和自发现,解决了注册地址的维护复杂性问题。负载均衡的主要实现方式也从外部设备的负载均衡,逐步过渡到在应用程序内嵌代理(SDK)的软件负载均衡,解决了单点问题和性能问题,但同时也带来了多语言、多版本SDK维护的复杂性问题。

 

现在,携程正在构建全新的 ServiceMesh 平台,计划以K8s替换Artemis来作为服务的注册中心,并通过 sidecar模式将服务发现、负载均衡以及一些切面功能(例如熔断、限流、监控等)从SDK中剥离出来,使得这些功能可以独立于用户应用外进行更新升级。ServiceMesh 与云原生技术的推广,将极大的提升服务的治理效率,为携程的微服务开发者和使用者带来更上一层楼的使用体验。

 

参考文档

1、https://github.com/netflix/eureka

2、https://github.com/sofastack/sofa-registry

团队招聘信息

我们是平台研发中心,一个为携程快速发展提供各类基础产品和服务的平台,我们以技术驱动提升客户体验,提升跨团队协作效率。

 

我们拥有优秀而强大的团队,引导你学习业内领先的开发技术,与技术高手交流对话,学习切磋。在亿级用户严苛的品质要求中,激发你脑中不断涌现的创新思维,带领你体验飞速成长的惊喜快乐,并在各种机遇与挑战中发展自我,成就自身。

 

目前我们前端、后台、算法、测试等技术岗位均有职位。简历投递:tech@trip.com,邮件标题:【姓名】-【携程平台研发中心】-【投递职位】

【推荐阅读】

 “携程技术”公众号

  分享,交流,成长

NAO V6 开发环境的配置(附所有文件) NAO V6开发环境配置前言环境Robot SettingsChoregraphe 2.8.5.10python2.7+naoqi2.8+opencv4.1.0putty与FileZilla 前言 学校的机器人摸索了一段时间,之前摸爬滚打探索环境,之前没接触这类机器人可能会非常艰辛,希望能给需要的人一些帮助。Nao与pepper通用 环境 win10(x64)+naoqi2.8 1、Robot S... 阅读详情

相关推荐

PTA 编程题(C语言)-- 然后是几点

PTA 编程题(C语言)-- 然后是几点

LCCprogrammer 5079

解决nacos服务注册中心及时上下线

nacos做为注册中心纳管其下边的服务模块,然后我们有时候关闭服务的时候发现客户端还能继续访问该服务,这是因为nacos默认的心跳检测时间为30s,所以需要等到30s之后才会剔除不可用服务。如果网关使用的事gateway,gateway还要想注册中心拉取服务列表,如果时间很长,也会造成调用不可用服务。一般我们也将拉取服务列表的时间调整一下。具体数字要看实际生产需要。步骤1可能需要花3秒中更新实例,步骤2定时拉取nacos最新实例需要最快3秒,因此加起来,修改nacos的心跳检测时间,在注册的服务中配置。

awodewen的博客 4117

TMC5160电机驱动芯片实战:从模式选择到参数配置全解析

本文深入解析TMC5160电机驱动芯片的实战应用,涵盖三种核心工作模式的选择策略与参数配置。详细介绍了全功能运动控制、外部脉冲驱动及独立驱动模式的应用场景与配置要点,并提供了电流控制、静音优化、SPI通信及高级功能(如StallGuard2)的调优指南,帮助开发者充分发挥其高精度、低噪音性能。

weixin_29179311的博客 323

用redis做注册中心如何感知服务的上线和下线?

这里是引用 众所周知,分布式或者说微服务之间能够互相感知对方的存在,互相通信,就是因为有着注册中心的存在。 springcloud常用的eureka、zookeeper,以及dubbo常用的zookeeper、redis等。 这都是注册中心的不同实现。 redis是相对来说使用的比较少的一种实例。 redis注册中心的使用 1. 存储形式 服务在zookeeper中存放是以文件路径的形式存在的。 而在redis中是以key-value形式存在的。 外层的key是表明这个key存储的是生产者列表或者消费者.

路辉的博客 4715

creo二次开发使用映射

在creo进行二次开发时,一些无法直接通过访问底层代码来对特征进行操作,比如“镜像装配”,这个时候就可以使用映射(Mapkey)来完成一键镜像。 注:这是镜像装配的代码 ProError status; ProMacro macro; wstring Macro; strMacro = L"mapkey(continued) ~ Command ProCmdMirrorAssem ; mapkey(continued) ~ Activate mirror_component_dialog Sy

qq_49328512的博客 1631

AI订单流异常检测:精准识别与闭环处置

本文系统阐述了订单流AI驱动的可视化与异常解释系统的构建策略。核心包括:1)多维度融合的异常检测技术,结合数据指纹、行为图谱和时序分析实现精准识别;2)分级分类与自动化处置机制,通过规则矩阵和风险熵值量化进行智能决策;3)基于SHAP/LIME的可解释性技术,提升决策透明度;4)千万级数据训练要求,确保模型达到87%以上的F1值。系统采用Flink+PAI实时计算架构,支持从异常检测到根因分析的完整闭环,为电商、金融等领域的订单风险管理提供智能化解决方案。

2401_83000568的博客 1360

携程Apollo配置中心架构介绍

Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,其成熟度和企业级特性要远远强于Spring Cloud体系中的Spring Cloud Config产品。

纵横千里 捭阖四方 的专栏 3006

SGLang:结构化生成语言推理框架深度解读

SGLang是由斯坦福大学和加州大学伯克利分校联合提出的高性能大语言模型推理框架,针对复杂多轮对话、结构化输出等场景优化。其核心创新包括: RadixAttention机制:通过基数树数据结构实现跨请求的KV Cache自动复用,避免重复计算共享前缀 跳跃前瞻解码:对格式化输出中的固定模板部分直接填充,仅采样变量槽位,提升3-5倍生成速度 约束解码引擎:通过正则表达式和JSON Schema保证输出严格符合预定义格式 声明式DSL:提供类Python的编程接口简化复杂推理流程开发 相比传统框架,SGLang

Ricky Yang的专栏 331

干货|携程注册中心整体架构与设计取舍

作者简介Siegfried,携程软件技术专家,负责携程注册中心的研发。一、前言目前,携程大部分业务已经完成了微服务改造,基本架构如图。每一个微服务的实例都需要和注册中心进行通讯:服务端实例向注册中心注册自己的服务地址,客户端实例通过向注册中心查询得知服务端地址,从而完成远程调用。同时,客户端会订阅自己关心的服务端地址,当服务端发生变更时,客户端会收到变更消息,触发自己重新查询服务端地址。疫情刚过去...

携程技术 1443

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1013

基于STM32+OneNet设计的物联网智慧路灯(100)

本次设计的智能路灯采用STM32芯片和OneNet物联网平台进行连接,开发出支持太阳能充电锂电池供电、GPS定位上传位置信息、手动/自动控制路灯开关、环境光照调节、红外传感器检测周围人员、空气质量监测等多项功能。同时,当路灯发生异常情况时,系统可以自动发送邮件或短信到指定邮箱或电话。

7727

【最佳实践】携程服务注册中心架构演进

1.前言 携程的微服务框架产品从2013年发展至今,已经历了7年多的打造。其中所使用的服务注册中心也从最开始人工数据维护架构演进到了现在全自动、百万容量级的架构。本文将逐一回顾携程服务注册中心所经历的三轮迭代过程,并重点介绍最新的第三版架构的设计与实现。 ...

天天新知 639

vscode中运行gcc -v命令失败了,提示:gcc不是内部或外部命令...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 976

干货 | 携程 SOA 的 Service Mesh 架构落地

作者简介本文作者 Dozer、Bender、vio-lin 来自携程 SOA 团队。目前主要负责 SOA 系统的研发工作和 Service Mesh 架构的演进、落地工作,同时也关注服务治理、JVM、云原生等技术领域。一、背景携程的 SOA 系统经历了 ESB、微服务等架构的演变,正处于一个较平稳的阶段。但当前的微服务架构却遇到了各种业内经常遇到的问题,例如:1)无法支...

携程技术 1830

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 Apollo支持4个维度管理Key-Value格式的配置: application (应用) environment (环境...

luhong327的博客 17万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

微服务架构~携程Apollo配置中心架构剖析

本文转自微信公众号 波波微课 的文章 微服务架构~携程Apollo配置中心架构剖析 一、介绍 Apollo(阿波罗)[参考附录1]是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 Apollo目前在国内开发者社区比较热,在Github上有超过5...

weixin_34362991的博客 1202

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

springcloud alibaba整合nacos服务注册中心和ribbon服务调用

springcloud alibaba整合nacos服务注册中心和ribbon服务调用nacos安装nacos的作用spring cloud整合nacos添加maven依赖启动类修改添加配置整合ribbon创建负载均衡的restTemplate测试结果 nacos安装 从官网上(https://nacos.io/zh-cn/index.html)下载最新版本的nacos的tar.gz包,上传到自己虚拟机或是云主机上指定目录下,解压启动即可,因为是作为学习之用,所以这是部署单节点的nacos服务 启动命令:.

weixin_41521925的博客 2832

当前主流服务注册中心对比

当前主流服务注册中心对比

牧竹子 5246

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 461

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 429

企业版虚拟机ESXi网络配置

1. 把卷组里剩下的所有空间(100%FREE)全加给根目录。# 2. 刷新文件系统,让系统立刻认出新容量。

墨痕诉清风的博客 230

本地化部署会议视频软件如何替换旧平台?账号迁移、历史数据与用户培训怎么安排?

账号先映射:身份与权限验证通过,再开放使用。资料分级处理:能查、能读、权限正确,比“全部搬完”更重要。切换可恢复:入口、增量数据和业务通知都要纳入回退方案。培训按岗位落地:让用户完成真实任务,而不是只听功能介绍。这套方法适合政企、集团及医疗等具有长期资料留存、多终端接入和业务集成需求的组织。小规模替换可以简化批次与流程,但不应省略权限验证、备份恢复和关键会议演练。

hz56789的博客 287

给openlab搭建web网站

此时输入song 账号 即可登录。

ytdbc的博客 106

自动化运维选型:四条技术路线的能力边界,以及它们为什么不能互相替代

自动化运维怎么选型?拆解配置管理、基础设施即代码、作业调度与场景化编排四条技术路线边界,分析账本归属与时间语义差异,给出四种架构组合与判断点,帮企业看清为何不能互相替代。

trainsignalcn的专栏 329

中科热备备份一体机选型技术剖析:安全厂商跨界后的能力边界与实测数据对比

灾备与数据保护技术实战:CDP持续保护、数据库备份、异地容灾架构等核心技术深度解析。

weixin_70618949的博客 292

LNMP 容器化实战:基于 Harbor 私有仓库部署 ECShop,吃透 Docker 底层机制

优势:同一网络内部支持容器 DNS 解析,直接写容器名字访问服务,不用硬编码 IP。网络层面:多容器 LNMP 架构,优先自建自定义 bridge 网络,利用容器名 DNS 解析,避免写死 IP,方便环境迁移;持久化思想:镜像保存程序代码;配置、数据库数据、日志全部 volume 挂载宿主机目录,删除容器业务数据不丢失;镜像管理:生产环境建议部署 Harbor 私有仓库,业务镜像统一内网托管;PHP 镜像构建:php‑fpm 容器补齐业务需要全部扩展;商城上传、缓存目录读写权限是高频故障点;

Wzh5452830的博客 141
上一篇: 干货 | 携程机票前端安卓虚拟机测试集群建设实践
下一篇: 干货 | 用数据描述和驱动业务,携程指标标准化管理实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值