缘起|蚂蚁应用级服务发现的实践之路

零基础用AHK操作Excel:从数据读取到自动填写(附完整脚本解析) 本文为零基础用户详细介绍了如何使用AutoHotkey(AHK)通过COM接口高效操作Excel,实现从数据自动读取到填写的完整自动化流程。文章包含完整的脚本解析、环境搭建指南、核心代码逐行讲解以及实际应用案例,帮助办公人员大幅提升数据处理效率,告别重复劳动。 阅读详情

9ce9bdf8ad79b2664ab224979d8e3b9b.gif

文|肖健(花名:昱恒)

蚂蚁集团技术专家、SOFARegistry Maintainer

专注于服务发现领域,目前主要从事蚂蚁注册中心 SOFARegistry 的设计和研发工作。

本文 8339 字 阅读 15 分钟

PART. 1

前言

什么是服务发现?

我们今天主要聊的话题是“应用级服务发现”的实践,聊这个话题之前,我们先简单介绍一下什么是“服务发现”,然后再聊聊,为什么需要“应用级服务发现”。

在微服务的体系中,多个应用程序之间将以 RPC 方式进行相互通信,而这些应用程序的服务实例是动态变化的,我们需要知道这些实例的准确列表,才能让应用程序之间按预期进行 RPC 通信。这就是服务发现在微服务体系中的核心作用。

77c88accf420aa4771e2e52dca694042.png

图 1

SOFARegistry 是蚂蚁集团在生产大规模使用的服务注册中心,经历了多年大促的考验,支撑了蚂蚁庞大的服务集群,具有分布式可支撑海量数据、可云原生部署、推送延迟低、高可用等特点。

PART. 2

应用级服务发现的设想

介绍完什么是服务发现之后,我们来看看什么是“接口级服务发现”,以及与之相对应的“应用级服务发现”。

从 RPC 框架说起

根据上述描述,我们先看看业界常用的 RPC 框架,是如何进行服务的发布和订阅的。以 SOFARPC 编程界面[1]为例:

|服务发布

package com.alipay.rpc.sample;


@SofaService(interfaceType = FooService.class, bindings = { @SofaServiceBinding(bindingType = "bolt") })
@Service
public class FooServiceImpl implements FooService {
    @Override
    public String foo(String string) {
        return string;
    }
}


@SofaService(interfaceType = BarService.class, bindings = { @SofaServiceBinding(bindingType = "bolt") })
@Service
public class BarServiceImpl implements BarService {
    @Override
    public String bar(String string) {
        return string;
    }
}

|服务使用

@Service
public class SampleClientImpl {


    @SofaReference(interfaceType = FooService.class, jvmFirst = false, 
            binding = @SofaReferenceBinding(bindingType = "bolt"))
    private FooService fooService;


    @SofaReference(interfaceType = BarService.class, jvmFirst = false, 
            binding = @SofaReferenceBinding(bindingType = "bolt"))
    private BarService barService;


    public String foo(String str) {
        return fooService.foo(str);
    }


    public String bar(String str) {
        return barService.bar(str);
    }
}

上述两个编程界面,完成了两个服务 FooService 和 BarService 的发布、订阅、调用。

微服务面临的挑战

上述的服务发布、订阅、调用功能,离不开注册中心的服务发现提供准确的服务地址。将图 1 的服务发现场景进一步展开,此时的工作原理如下图:

c765845cf6139a118ec597a585d6e3dc.png

图 2(点击图片查看大图)

服务发布者:

- 集群内部署了 100 个 pod,IP 分别为:1.1.1.1 ~ 1.1.1.100;

- 服务发布者的 URL:1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0,12200 端口为 sofarpc-bolt 协议默认的端口。

29d9ed78c944f0eceadddc45c31eefee.png

服务订阅者:集群内部署了 100 个 pod,IP 分别为:2.1.1.1 ~ 2.1.1.100。

基于上述的集群部署情况,我们来看看微服务的场景面临的挑战。

|挑战 1:注册中心 publisher 存储的挑战

在上面的集群部署中,可以看到注册中心的数据存储模型,集群内部署了 100 个 provider pod,每个 provider 发布了 2 个服务,即每个 pod 有 2 个 publisher,以 provider1 为例:

210e6e0093886b43d0ae67abfcb52b4f.png

如果在每个 provider 提供更多服务的情况下呢?比如每个 provider 提供了 50 个服务,这样的量级在微服务场景中并不少见,那么此时注册中心对于 provider1,就需要存储 50 个 publisher,分别是:

826739200727bd30f3586abcc74ece17.png

可以看到,随着 provider 的扩容,注册中心存储的 publisher 数据量是以 50 倍于 provider 的速度在增长。

如果您对 SOFARegistry 有过了解,就会知道 SOFARegistry 是支持数据存储分片,可以存储海量数据的。

但是数据量上涨带来的是 SOFARegistry 本身的服务器数量增涨,如果我们有办法可以降低 SOFARegistry 的数据存储量,那么就能节约 SOFARegistry 本身的服务器成本,同时 SOFARegistry 整个集群的稳定性也会得到提升。

|挑战 2:注册中心 subscriber 存储的挑战

在上述的集群部署中,集群内部署了 100 个 consumer pod,每个 consumer 订阅了 2 个服务,即每个 pod 有 2 个 subscriber,同理于 publisher 的存储挑战,随着 consumer 订阅的接口持续增加,例如 consumer 订阅了 provider 的 10 个 service,此时注册中心存储 consumer1 的 10 个 subscriber 如下:

25e5585c04d6a4d200e46889974ac61e.png

随着 consumer 的扩容,注册中心内的 subscriber 存储同样面临着挑战。

|挑战 3:服务变更通知的挑战

随着 publisher 和 subscriber 数量增长,除了对存储的挑战以外,对于数据变更通知同样面临着极大的挑战,让我们来看看如下的场景:provider 下线了 1 台,从 100 台减少到了 99 台,次数集群内发生了哪些变化呢?

1、首先是在注册中心存储方面,需要将 provide 50 个 service 中的 publishers 列表都减少 1 个,每个 service 剩余 99 个 publisher;

2、然后注册中心需要将这 50 个 service 的变更,都通知给相应的 subscriber;我们上述假设是 consumer 订阅了 10 个 service,分别是:["com.alipay.sample.FooService", "com.alipay.sample.BarService", "com.alipay.sample.Service00", ..., "com.alipay.sample.Service07"];

3、那么对于 consumer1,我们需要将如下的数据推送给 consumer1:

com.alipay.sample.FooService:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.99:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0


com.alipay.sample.BarService:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.99:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0


//...中间省略


com.alipay.sample.Service07:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.99:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0

可以看到一台 provider 的扩缩容,就需要对 consumer1 进行如此大量的数据推送,如果 com.alipay.sample.FooService 的 publisher 的数量更大,达到 1 千个、1 万个呢?此时注册中心的服务变更通知,也面临着网络通信数据量大的挑战。

是否有方式在 provider 的变更时,降低需要通知的数据量呢?

|挑战 4:consumer 的内存挑战

介绍完注册中心面临的挑战后,我们再从图 1 来看看 consumer 存储服务列表时,内存面临的挑战,对于注册中心推送下来的数据,consumer 也需要进行存储,然后再发起 RPC 服务调用的时候,就可以直接从 consumer 内存中获取到服务地址进行调用,consumer 中存储的数据,简化来看是如下的数据:

com.alipay.sample.FooService:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.99:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0


com.alipay.sample.BarService:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.99:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0


//...中间省略


com.alipay.sample.Service07:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.99:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0

此时 privoder 只有 99 个 IP,但是因为订阅了 10 个 service,所以在 consumer 中存储了 99 * 10 = 990 个 publisher 列表;如果订阅的 service 更多,provider 的数量更大呢(比如达到 10 万)?此时 consumer 内存中存储了近 100 万个 publisher,内存将面临着极大的挑战。

微光:应用级服务发现的提出

|应用级服务发布

经过上一个章节的描述,对于一次简单的 RPC 调用背后,服务发现面临的挑战相信各位读者已经有所感受,那么可能得突破方向到底在哪里呢?

初步看,我们不难发现的是,对于一个 provider1,在注册中心存储的 publisher 数据如下:

com.alipay.sample.FooService:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0


com.alipay.sample.BarService:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0


//...中间省略


com.alipay.sample.Service100:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0

每个 publisher 中,除了 serviceName 不相同,url 存储了相同的 100 份,这里是否可以简化为存储 1 份?这是应用级服务发布最初的想法。

按照这个模型我们继续推演,可以得到如下演进模型:

6201d07c68484e186407251da8fe7828.png

图 3(点击图片查看大图)

对比图 2 和图 3,我们设想:

1、prodiver 不再以 service=com.alipay.sample.FooService 向注册中心发布服务,而是以 service=applicationB 进行服务发布,那么注册中心对于 provide1,此时 publisher 存储的数据量从 50 个下降到 1 个,注册中心的整个集群的 publisher 存数量,也将下降 50 倍,这将使得注册中心 SOFARegistry 的服务器成本极大降低,同时注册中心的稳定性也将得到大幅度提升。

2、对于 prodiver 发布了哪些服务,这个关系维护在 metadataMap 中,供后续的应用级服务订阅使用。

|应用级服务订阅

在上一节中我们将服务发现,演进到了应用级服务发布,那么此时的服务订阅与服务调用,应该怎样进行呢?我们继续从图 3 中展开:

1、对于 comsumer1,启动时先根据接口进行一次 metadata fetch 的元数据获取,根据 metadataMap 中的数据,可以知道此时 service=com.alipay.sample.FooService 映射的 app=applicationB;同理其他 9 个 service 映射的 app 也是 applicationB;

2、然后以 applicationB 为 dataid,向注册中心发起订阅,注册中心此时不再是存储 consumer1 的 10 个 subscriber,而是存储一个 dataid=applicationB 的 subscriber;注册中心的 subscriber 数量也降低了 10 倍;

3、consumer1 发起服务订阅后,注册中心进行数据推送,此时注册中心推送的数据为:

applicationB:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.100:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0

4、可以看到,此时注册中心给 consumer1 的数据推送量,相比于【Part.2 挑战 3】中推送的数据,网络的数据量交互也下降了 10 倍。

|应用级路由

经过上述的“应用级服务发布”和“应用级服务订阅”,我们解决了注册中心的数据量存储瓶颈,注册中心的变更通知网络瓶颈,最后我们来看看 consumer1 中的内存瓶颈如何解决。

通过上面的步骤,consumer1 中拿到了一些数据,分别是:metadataMap 和 publishMap:

applicationB:
  - com.alipay.sample.FooService
  - com.alipay.sample.BarService
  - ...
  - com.alipay.sample.Service50


applicationB:
  - 1.1.1.1:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0
  - ...
  - 1.1.1.100:12200?app=applicationB&_SERIALIZETYPE=hessian2&_TIMEOUT=3000&zone=zone1&version=1&_WARMUPTIME=0

此时我们可以在 consumer1 进行“应用级路由”的信息封装,如下图:

0f4302e5e7ced52a81ce7b7913273296.png

图 4(点击图片查看大图)

如图 4 所示,此时 consumer 中只需要保存 applicationB 的 100 个 publisher,而不再是保存 10(假设订阅了 10 个 service)* 100 = 1000 个 publisher,consumer1 中的服务路由表的内存使用,也降低了 10 倍。

PART. 3

长路漫漫

在上述的微服务模型中,经过上面的应用级服务发现方案推演,我们做到了:

- 注册中心存储的 publisher 数据量下降了 50 倍;

- 注册中心存储的 subscriber 数据量下降了 10 倍;

- 注册中心服务变更通知,网络通信数据量下降了 10 倍;

- 服务订阅端 consumer 中,服务路由表的内存 insue 使用降低了 10 倍;

这个推演结果是令人激动的,然而实际的场景要比上述这个数据更复杂。这个推演模型,要进行真正线上实施,并且进行大规模落地,仍然是长路漫漫。这里先抛出几个问题:

1、如果不同的接口之间,参数并不是完全相同的,我们要如何处理?例如 FooService 的 _TIMEOUT=3000,BarService的_TIMEOUT=1000,Service100的_TIMEOUT=5000;

2、provider 的不同 pod 之间,发布的服务列表有差异,要如何处理?例如 provider1 发布的服务列表是 ["com.alipay.sample.FooService","com.alipay.sample.BarService", ..., "com.alipay.sample.Service50"];provider2 发布的服务列表是 ["com.alipay.sample.FooService","com.alipay.sample.BarService", ..., "com.alipay.sample.Service51"];

3、无论是上述的 provider 还是 consumer,都需要进行 SDK 的代码改造,如何保证线上从“接口级服务发现”,平滑过渡到“应用级服务发现”;

4、如果部分应用无法升级 SDK,方案如何继续演进,拿到期望的效果收益;

5、两个方案过度期间,如何确保注册中心服务的一致性。

这些问题,我们将在下一篇文章《技术内幕|蚂蚁的应用级服务发现实践之路》中详细解答,敬请期待。

|参考链接|

[1]SOFARPC 编程界面:https://www.sofastack.tech/projects/sofa-rpc/programing-sofa-boot-xml/

[2]Dubbo 迈向云原生的里程碑 | 应用级服务发现:https://lexburner.github.io/dubbo-app-pubsub/

 了解更多...

SOFARegistry Star 一下✨:
https://github.com/sofastack/sofa-registry/

插播一条重要消息🙆🏻‍♂️

对云原生、微服务、容器、镜像加速、应用运行时、密码学、规模化运维等方向感兴趣的的伙伴们,快来报名 SOFA五周年活动啦!现场为大家设置了包括 10 多个开源项目的开源互动集市(精美周边等你来拿),也会为大家献上一场轻松、愉快且精彩的开源分享~

fa6d862c8278b12439ebb192096ee011.png

本周六 12:00,我们在 C work(北京市朝阳区恒通国际创新园 C6 栋)与你不见不散哦!

eb53723d80e7b40dec13a826602cb5e6.png点击“阅读原文”即刻报名,一起来玩吧!

uniapp - 解决在线预览PDF文件空白打不开的问题,无论是后端下载二进制文件流pdf还是本地插件或JS预览查看打开白屏不显示,详细排查解决(适用于移动端H5网页、安卓/苹果app、微信小程序) uniapp App端 实现pdf文件预览打开白屏解决,uniapp 在线预览pdf打开一片空白,跨域白屏,uni-app中使用WebView预览PDF文件打开空白,微信小程序(uniapp)预览PDF空白怎么办,下载PDF文件流后打开空白或无法打开的问题,Uniapp H5网页下载二进制pdf文件页面空白以及解决文件损坏打不开的情况,Uniapp app在线预览pdf文件流,PDF加载出来怎么办,服务器后端返回PDF文件流后前端进行下载但打开后一片白屏,解决pdf文件流,预览全是空白页,pdf文件流,下载 阅读详情

相关推荐

VsCode+JLink+GCC替代Keil开发GD32程序-个人总结

对个人使用vscode+Jlink开发GD32程序做了总结,供需要者参考。

MyCollege1999的博客 2763

sofarpc高级进阶之服务发布刨析

SOFARPC 服务发布原理 SOFARPC 是蚂蚁SOFASTACK中的rpc框架,每一个中间件的兴起都值得我们学习它的设计理念,以拓展我们的知识储备。基本应该这里就不再展示了。没了解的过的同学可以参考:https://www.sofastack.tech/projects/sofa-rpc/overview/ 本次基于zookeeper作为注册分析。 暴露服务 配置好接口后如下 @SofaService(interfaceType = HelloSofaV2.class, bindi

m0_38097114的博客 1110

Mac版UltraEdit 18.00.0.19破解教程:终端一行命令搞定(附版本适配指南)

本文为Mac用户提供了UltraEdit的合法替代方案与授权指南,强调破解软件的法律风险和安全隐忧。推荐使用VS Code、Sublime Text等开源或商业编辑器,结合终端工具如Vim/Neovim,实现高效文本编辑。同时详细介绍了UltraEdit的官方授权选项,帮助开发者在遵守软件许可的前提下提升工作效率。

k9l0m1的博客 357

升级dubbo3方案

dubbo3升级方案

Brucelwl的博客 1534

告别谷歌!QGC地面站v4.0.x保姆级教程:用高德/天地图瓦片替换老旧地图源

本文提供QGroundControl(QGC)地面站v4.0.x的详细教程,指导用户如何用高德地图和天地图瓦片替换默认地图源,解决数据陈旧、访问不稳定等问题。教程涵盖环境配置、源码修改、地图集成及性能优化,帮助无人机开发者打造稳定高效的中文地图解决方案。

weixin_30836759的博客 503

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2079

Soul 学习笔记之 SofaRpc探索(十三)

目录总系列目录地址SofaRpc 是啥SofaRpc 总体架构SofaRpc 有什么功能SofaRpc 特色功能SofaRpc 整合SofaRpc 在项目中的应用场景SofaRpc 第一性原理总结 总系列目录地址 SofaRpc 是啥 soul 里面的 sofa 是sofastack 社区下面的一个高可扩展,高性能,生产级的 java rpc 框架, 由蚂蚁金服开源, 全名 SOFARPC SofaRpc 总体架构 当一个 SOFARPC 的应用启动的时候,如果发现当前应用需要发布 RPC 服务的话,那

weixin_54395016的博客 1800

STM32裸机开发基础:寄存器直接操作详解

寄存器是微控制器内部的特殊存储单元,直接与硬件电路连接,用于控制和监视硬件功能。与普通内存不同,寄存器的每一位(bit)通常都有特定的硬件含义。寄存器就是机器的控制面板上的各种开关和指示灯每个开关控制一个具体功能(如打开LED、启动通信)每个指示灯显示一个具体状态(如数据接收完成、错误发生)// GPIO引脚定义1。

2401_88760782的博客 2187

Dubbo3.0新特性

Dubbo3.0强势发布,本编文档持续更新3.0重要的新特性

weixin_43988251的博客 1302

相位相关匹配法的opencv C++实现

这一段就是PCIAM算法的核心了,计算两幅图像的峰值相关矩阵,也是完全按照matlab移植过来的,但是后面几行,是为了筛选一些不可能存在的情况,比如边缘处的完全重合,或者只有一行,或者一列重合等等情况,由于PCIAM算法在边缘处的响应值高,所以在一些场景下可能是一种干扰,所以进行了剔除,当然可以不剔除,就是对后期的峰值选取会有影响。头文件,以及各类函数,还有主函数,第一次独立的写这种分文件类型的项目,写的拉跨还请包涵,以及当然可以转成类的形式,但感觉有点小麻烦,后期再修改吧。

qq_43616651的博客 4263

基于C#的工业机器人上位机控制程序开发(搭配松下PLC+MC协议)

基于C#的工业机器人上位机控制程序开发,核心是上位机与松下PLC的MC协议通信和机器人控制的安全逻辑,而不是单纯的界面编写。在工控现场,程序的稳定性和安全性永远是第一位的——比如解耦通信逻辑、处理跨线程问题、添加安全互锁、记录操作日志,这些都是保证产线稳定运行的关键。新手在学习时,建议先跟着步骤搭建好环境,跑通基础的PLC通信和机器人控制功能,再逐步尝试进阶优化。数据模型化、通信封装化、逻辑模块化、UI解耦化。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1239

聊聊Dubbo3.0新特性之应用级服务发现

文章目录什么是服务发现信息孤岛问题Http通信微服务与Rpc框架Dubbo2.0中的接口级服务发现应用级服务发现兼容性设计Rpc元数据同步机制性能表现参考资料 什么是服务发现 信息孤岛问题 计算机诞生之初,往往信息系统都是以单机的形式存在,系统与系统交互较少,存在信息孤岛问题,数据的交换得通过硬件设备的拷贝、人工在不同系统之间进行拷贝(硬盘、U盘等)。随着互联网的兴起,任何一个系统都难以在互联网浪潮中“独善其身”,不同服务、系统之间往往存在信息互通的需求,比如浏览淘宝网是用户的电脑请求淘宝网的服务器获得相关

hosaos的博客 2569

Universal Robot——在Gazebo中模拟UR5机器人

今天的目标是在Gazebo安装我们的ur5机器人。Gazebo是一个流行的模拟工具,它不仅可以让你像在Rviz中一样可视化你的机器人,而且还内置了一个物理引擎。这样你就可以在更真实的环境中测试你的机器人应用程序。我们将查看我们需要的属性 添加对我们的机器人——我们的order的描述,以模拟它以及如何在Gazebo中生成我们的机器人。

如果想成为中心,那么就到中心去吧。 1969

SOFA Weekly|SOFA 开源五周年来自社区家人的祝福、社区本周贡献 & issue 精选

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 504

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

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SOFA Weekly|SOFAArk 社区会议回顾、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控...

金融级分布式架构 215

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Dubbo开启应用级服务发现

Dubbo开启应用级服务发现

ronshi的博客 501

数学建模模型总结

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

SOFABoot扩展@sofaservice

项目需要,使用了SOFABoot,它是蚂蚁金服开源的基于 Spring Boot (当然它是建立在spring 之上)的研发框架,使用过程中,发现很多个服务注册时有些慢,特别是测试时,其实我只想测试一两个服务,那么程序启动时我根本就不需要注册那么多服务,测试时按需注册、个性化,钉钉上问了相关工作人员,他们说没有,我只能自己实现了。 1. 首先去github上把源码下载下来,地址:https://github.com/sofastack/sofa-boot 导入到开发工具,看个人情况是eclipse...

董广明的博客 3480

【SOFARPC】SOFA入门实战

SofaBoot+Sofarpc+zk使用案例

极客中年的博客 1948

dubbo3 应用级服务发现机制

前言 dubbo3发布的最大的特性就是应用级服务发现机制,原先的是接口级服务发现机制,那么应用级服务发现机制能带来什么好处呢,按官方说法,以下是官网的原文 相比于 2.x 版本中的基于接口粒度的服务发现机制,3.x 引入了全新的基于应用粒度的服务发现机制, 新模型带来两方面的巨大优势: 进一步提升了 Dubbo3 在大规模集群实践中的性能与稳定性。新模型可大幅提高系统资源利用率,降低 Dubbo 地址的单机内存消耗(50%),降低注册中心集群的存储与推送压力(90%), Dubbo 可支持集群规模步入百万

qq_31086797的博客 1948

SofaBoot使用Nacos进行服务注册发现

前提 最近创业公司的项目组基于业务需要,开发一套新的微服务,考虑到选用的组件必须是主流、社区活跃、生态完善以及方便迁移到云上等因素,引入了SOFAStack全家桶。微服务开发里面,一个很重要的功能就是服务发现与注册,笔者花了点时间做了一个SOFABoot、SOFARpc结合Nacos实现微服务发现注册与远程调用的示例。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-...

Throwable 5790

小白也能看懂的dubbo3应用级服务发现详解

dubbo 是一款开源的 RPC 框架,主要有3个角色: 提供者(provider)、消费者(consumer) 、注册中心(registry) 提供者启动时向注册中心注册服务地址,消费者启动时订阅服务,并通过获取到的提供者地址发起调用,当提供者地址变更时,通过注册中心向消费者推送变更。这就是 dubbo 主要的工作流程。 在2.7.5之前,dubbo 只支持接口级服务发现模型,>=2.7.5的版本提供了接口级与应用级两种服务发现模型,3.0之后的版本应用级服务发现更是非常重要的一个功能。

java_xiaoo的博客 621

dubbo原理和机制_Dubbo 迈出云原生重要一步 - 应用级服务发现解析

作者 | 刘军(陆龟) Apache Dubbo PMC概述社区版本 Dubbo 从 2.7.5 版本开始,新引入了一种基于实例(应用)粒度的服务发现机制,这是我们为 Dubbo 适配云原生基础设施的一步重要探索。版本发布到现在已有近半年时间,经过这段时间的探索与总结,我们对这套机制的可行性与稳定性有了更全面、深入的认识;同时在 Dubbo 3.0 的规划也在全面进行中,如何让应用级服务发现成为...

weixin_39683863的博客 1537

【剖析 | SOFARPC 框架】系列之 SOFARPC 注解支持剖析

SOFAScalable Open Financial Architecture是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 1、前言在 SOFABoot 环境下,SOFARPC 提供三种方式给开发人员发布和引用 RPC 服务:XML 方式(配置)Annotation 方式(注解)编程 API 方式(动态)编程 API 方式...

weixin_33835103的博客 1902

SOFABoot源码解析之JVM服务

1.SOFABoot源码解析1.1  JVM服务1.1.1 服务发布        以SOFABoot自带的RPC案例sofaboot-sample-with-rpc为例,详细描述SOFABoot JVM服务发布过程。        在此提前说明,源码分析主要分析主流程,以及本人认为比较重要的一些内容,对于其它部分,大家可以基于本文档,自行研读。        RPC案例的SpringXML配置文...

闲来无事 3904

dubbo应用级服务发现初体验

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。 dubbo应用级服务发现介绍 了解dubbo的朋友知道,dubbo的provider启动时向注册中心注册,consumer从注册中心消费。 目前dubbo往注册中心上注册的数据是接口级,而应用级服务发现是往注册中心上注册实例(ip+port),两者的区别只是注册的粒度不同。 至于为什么会出现应用级服务发现,有如下几点原因 与业界主流微服务模型对齐,比如 SpringCloud、Kubernetes.

捉虫大师 573

Dubbo 迈出云原生重要一步 - 应用级服务发现解析

Photo@Markus Winkler文 |陆龟概述社区版本 Dubbo 从 2.7.5 版本开始,新引入了一种基于实例(应用)粒度的服务发现机制,这是我们为 Dubbo ...

阿里巴巴中间件 578
上一篇: Dragonfly|KubeCon 2023 议题分享
下一篇: Seata 将参展 SOFA 五周年开源集市~
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值