Apache ShenYu 网关正式支持 Dubbo3 服务代理

Apache Dubbo 在去年发布了下一代的云原生微服务版本 Dubbo3,目前最新版本 Dubbo3 已在阿里经济体完成对 HSF2 框架的全面替换与升级,Dubbo3 目前已成为社区企业实践推荐版本。Apache Shenyu 网关在这个背景下发布了对 Dubbo3 服务代理的支持。

本文介绍了如何通过 Apache ShenYu 网关访问 Dubbo 服务,主要内容包括从简单示例到核心调用流程分析,并对设计原理进行了总结。

介绍

Apache ShenYu

Apache ShenYu(Incubating)是一个异步的,高性能的,跨语言的,响应式的 API 网关。兼容各种主流框架体系,支持热插拔,用户可以定制化开发,满足用户各种场景的现状和未来需求,经历过大规模场景的锤炼。

2021 年 5 月,ShenYu 捐献给 Apache 软件基金会,Apache 基金会全票通过,顺利进入孵化器。

Apache Dubbo

Dubbo3 是下一代的云原生微服务框架,全面升级了包括下一代 RPC 协议、应用级服务发现、Dubbo Mesh、统一服务治理等核心能力,多语言 Java、Golang 同步发布 3.0 特性。目前最新版本 Dubbo3 已在阿里经济体完成对 HSF2 框架的全面替换与升级,包括阿里核心电商、阿里云、活饿了么、钉钉、考拉等都已经全面升级 Dubbo3,2022 双 11 大促核心系统将跑在 Dubbo3 之上,社区用户包括工商银行、小米、平安健康等也已成功升级 Dubbo3 核心功能。

Dubbo 快速开始

本小节介绍如何将 Dubbo 服务接入到 ShenYu 网关,您可以直接在工程下找到本小节的示例代码 。

启动 shenyu-admin

shenyu-admin 是 Apache ShenYu 后台管理系统, 启动的方式有多种,本文通过本地部署的方式启动。启动成功后,需要在基础配置->插件管理中,把 dubbo 插件设置为开启,并设置你的注册地址,请确保注册中心已经开启。

启动 shenyu 网关

在这里通过源码的方式启动,直接运行 shenyu-bootstrap 中的 ShenyuBootstrapApplication。

在启动前,请确保网关已经引入相关依赖。如果客户端是 apache dubbo,注册中心使用 zookeeper,请参考如下配置:

<!-- apache shenyu  apache dubbo plugin start--><dependency><groupId>org.apache.shenyu</groupId><artifactId>shenyu-spring-boot-starter-plugin-apache-dubbo</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>3.0.8</version></dependency><!-- Dubbo zookeeper registry dependency start --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-client</artifactId><version>4.0.1</version><exclusions><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.0.1</version></dependency><!-- Dubbo zookeeper registry dependency end --><!-- apache dubbo plugin end-->

启动 shenyu-examples-dubbo

以官网提供的例子为例 shenyu-examples-dubbo 。假如 dubbo 服务定义如下:

<beans /* ...... * /><dubbo:application name="test-dubbo-service"/><dubbo:registry address="${dubbo.registry.address}"/><dubbo:protocol name="dubbo" port="20888"/><dubbo:service timeout="10000" interface="org.apache.shenyu.examples.dubbo.api.service.DubboTestService" ref="dubboTestService"/></beans>

声明应用服务名称,注册中心地址,使用 dubbo 协议,声明服务接口,对应接口实现类:

/*** DubboTestServiceImpl.*/
@Service("dubboTestService")
public class DubboTestServiceImpl implements DubboTestService {@Override@ShenyuDubboClient(path = "/findById", desc = "Query by Id")public DubboTest findById(final String id) {return new DubboTest(id, "hello world shenyu Apache, findById");}//......
}

在接口实现类中,使用注解@ShenyuDubboClient 向 shenyu-admin 注册服务。

在配置文件application.yml中的配置信息:

server:port: 8011address: 0.0.0.0servlet:context-path: /
spring:main:allow-bean-definition-overriding: true
dubbo:registry:address: zookeeper://localhost:2181  # dubbo使用的注册中心shenyu:register:registerType: http #注册方式serverLists: http://localhost:9095 #注册地址props:username: admin password: 123456client:dubbo:props:contextPath: /dubbo  appName: dubbo

在配置文件中,声明 dubbo 使用的注册中心地址,dubbo 服务向 shenyu-admin 注册,使用的方式是 http,注册地址是 http://localhost:9095。关于注册方式的使用,请参考应用客户端接入。

调用 dubbo 服务

shenyu-examples-dubbo 项目成功启动之后会自动把加 @ShenyuDubboClient 注解的接口方法注册到网关。

打开 插件列表 -> Proxy -> dubbo 可以看到插件规则配置列表:

注册成功的选择器信息:

注册成功的规则信息:

选择器和规则是 Apache ShenYu 网关中最灵魂的东西。掌握好它,你可以对任何流量进行管理。对应为选择器与规则里面的匹配条件(conditions),根据不同的流量筛选规则,我们可以处理各种复杂的场景。流量筛选可以从 Header, URI, Query, Cookie 等等 Http 请求获取数据。


然后可以采用 Match,=,Regex,Groovy,Exclude 等匹配方式,匹配出你所预想的数据。多组匹配添加可以使用 And/Or 的匹配策略。具体的介绍与使用请看: 选择器与规则管理 。

发起 GET 请求,通过 ShenYu 网关调用 dubbo 服务:

GET http://localhost:9195/dubbo/findById?id=100
Accept: application/json

成功响应之后,结果如下:

{"name": "hello world shenyu Apache, findById","id": "100"
}

至此,就成功的通过 http 请求访问 dubbo 服务了,ShenYu 网关通过 shenyu-plugin-dubbo 模块将 http 协议转成了 dubbo 协议。

深入理解 Dubbo 插件

在运行上述 demo 的过程中,是否存在一些疑问:

  • dubbo 服务是如何注册到 shenyu-admin?
  • shenyu-admin 是如何将数据同步到 ShenYu 网关?
  • DubboPlugin 是如何将 http 协议转换到到 dubbo 协议?

带着这些疑问,来深入理解 dubbo 插件。

应用客户端接入

应用客户端接入是指将微服务接入到 Apache ShenYu 网关,当前支持 Http、 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议的接入。

将应用客户端接入到 Apache ShenYu 网关是通过注册中心来实现的,涉及到客户端注册和服务端同步数据。注册中心支持 Http、Zookeeper、Etcd、Consul 和 Nacos。默认是通过 Http 方式注册。

客户端接入的相关配置请参考客户端接入配置。

  • 客户端注册

在你的微服务配置中声明注册中心客户端类型,如 Http 或 Zookeeper。应用程序启动时使用 SPI 方式加载并初始化对应注册中心客户端,通过实现 Spring Bean 相关的后置处理器接口,在其中获取需要进行注册的服务接口信息,将获取的信息放入 Disruptor 中。

注册中心客户端从 Disruptor 中读取数据,并将接口信息注册到 shenyu-admin,Disruptor 在其中起数据与操作解耦的作用,利于扩展。

  • 服务端注册

在 shenyu-admin 配置中声明注册中心服务端类型,如 Http 或 Zookeeper。当 shenyu-admin 启动时,读取配置类型,加载并初始化对应的注册中心服务端,注册中心服务端收到 shenyu-client 注册的接口信息后,将其放入 Disruptor 中,然后会触发注册处理逻辑,将服务接口信息更新并发布同步事件。

Disruptor 在其中起到数据与操作解耦,利于扩展。如果注册请求过多,导致注册异常,也有数据缓冲作用。

数据同步原理

数据同步是指在 shenyu-admin 后台操作数据以后,使用何种策略将数据同步到 Apache ShenYu 网关。Apache ShenYu 网关当前支持ZooKeeper、WebSocket、Http长轮询、Nacos 、Etcd 和 Consul 进行数据同步。默认是通过WebSocket进行数据同步。

数据同步的相关配置请参考数据同步配置。

  • 数据同步的意义

网关是流量请求的入口,在微服务架构中承担了非常重要的角色,网关高可用的重要性不言而喻。在使用网关的过程中,为了满足业务诉求,经常需要变更配置,比如流控规则、路由规则等等。因此,网关动态配置是保障网关高可用的重要因素

当前数据同步特性如下:

1、所有的配置都缓存在 Apache ShenYu 网关内存中,每次请求都使用本地缓存,速度非常快。

2、用户可以在 shenyu-admin 后台任意修改数据,并马上同步到网关内存。

3、支持 Apache ShenYu 的插件、选择器、规则数据、元数据、签名数据等数据同步。

4、所有插件的选择器,规则都是动态配置,立即生效,不需要重启服务。

5、数据同步方式支持 Zookeeper、Http 长轮询、Websocket、Nacos、Etcd 和 Consul。

  • 数据同步原理分析

下图展示了 Apache ShenYu 数据同步的流程,Apache ShenYu 网关在启动时,会从配置服务同步配置数据,并且支持推拉模式获取配置变更信息,然后更新本地缓存。管理员可以在管理后台(shenyu-admin),变更用户权限、规则、插件、流量配置,通过推拉模式将变更信息同步给 Apache ShenYu 网关,具体是 push 模式,还是 pull 模式取决于使用哪种同步方式。

在最初的版本中,配置服务依赖 Zookeeper 实现,管理后台将变更信息 push 给网关。而现在可以支持 WebSocket、Http长轮询、Zookeeper、Nacos、Etcd 和 Consul,通过在配置文件中设置 shenyu.sync.${strategy} 指定对应的同步策略,默认使用 webosocket 同步策略,可以做到秒级数据同步。但是,有一点需要注意的是,Apache ShenYu网关 和 shenyu-admin 必须使用相同的同步策略。

如上图所示,shenyu-admin 在用户发生配置变更之后,会通过 EventPublisher 发出配置变更通知,由 EventDispatcher 处理该变更通知,然后根据配置的同步策略(http、weboscket、zookeeper、naocs、etcd、consul),将配置发送给对应的事件处理器。

1、如果是 websocket 同步策略,则将变更后的数据主动推送给 shenyu-web,并且在网关层,会有对应的 WebsocketDataHandler 处理器来处理 shenyu-admin 的数据推送。

2、如果是 zookeeper 同步策略,将变更数据更新到 zookeeper,而 ZookeeperSyncCache 会监听到 zookeeper 的数据变更,并予以处理。

3、如果是 http 同步策略,由网关主动发起长轮询请求,默认有 90s 超时时间,如果 shenyu-admin 没有数据变更,则会阻塞 http 请求,如果有数据发生变更则响应变更的数据信息,如果超过 60s 仍然没有数据变更则响应空数据,网关层接到响应后,继续发起 http 请求,反复同样的请求。

流程分析

流程分析是从源码的角度,展示服务注册流程,数据同步流程和服务调用流程。

  • 服务注册流程

1、读取 dubbo 服务

使用注解@ShenyuDubboClient 标记需要注册到网关的 dubbo 服务。

注解扫描通过 ApacheDubboServiceBeanListener 完成,它实现了 ApplicationListener<ContextRefreshedEvent>接口,在 Spring 容器启动过程中,发生上下文刷新事件时,开始执行事件处理方法 onApplicationEvent()。在重写的方法逻辑中,读取 Dubbo 服务 ServiceBean,构建元数据对象和 URI 对象,并向 shenyu-admin 注册。具体的注册逻辑由注册中心实现,请参考客户端接入原理。

2、处理注册信息

客户端通过注册中心注册的元数据和 URI 数据,在 shenyu-admin 端进行处理,负责存储到数据库和同步给 shenyu 网关。Dubbo 插件的客户端注册处理逻辑在 ShenyuClientRegisterDubboServiceImpl 中。继承关系如下:

  • ShenyuClientRegisterService:客户端注册服务,顶层接口;
  • FallbackShenyuClientRegisterService:注册失败,提供重试操作;
  • AbstractShenyuClientRegisterServiceImpl:抽象类,实现部分公共注册逻辑;
  • ShenyuClientRegisterDubboServiceImpl:实现 Dubbo 插件的注册;

注册信息包括选择器,规则和元数据。

整体的 dubbo 服务注册流程如下:

  • 数据同步流程

1、admin 更新数据

假设在在后台管理系统中,新增一条选择器数据,请求会进入 SelectorController 类中的 createSelector()方法,它负责数据的校验,添加或更新数据,返回结果信息。在 SelectorServiceImpl 类中通过 createOrUpdate()方法完成数据的转换,保存到数据库,发布事件,更新 upstream。

在 Service 类完成数据的持久化操作,即保存数据到数据库。发布变更数据通过 eventPublisher.publishEvent()完成,这个 eventPublisher 对象是一个ApplicationEventPublisher 类,这个类的全限定名是 org.springframework.context.ApplicationEventPublisher,发布数据的功能正是是通过 Spring 相关的功能来完成的。

当事件发布完成后,会自动进入到 DataChangedEventDispatcher 类中的 onApplicationEvent()方法,根据不同数据类型和数据同步方式进行事件处理。

2、网关数据同步

网关在启动时,根据指定的数据同步方式加载不同的配置类,初始化数据同步相关类。

在接收到数据后,进行反序列化操作,读取数据类型和操作类型。不同的数据类型,有不同的数据处理方式,所以有不同的实现类。但是它们之间也有相同的处理逻辑,所以可以通过模板方法设计模式来实现。相同的逻辑放在抽象类 AbstractDataHandler 中的 handle()方法中,不同逻辑就交给各自的实现类。

新增一条选择器数据,是新增操作,会进入到 SelectorDataHandler.doUpdate()具体的数据处理逻辑中。

在通用插件数据订阅者 CommonPluginDataSubscriber,负责处理所有插件、选择器和规则信息。

将数据保存到网关的内存中,BaseDataCache 是最终缓存数据的类,通过单例模式实现。选择器数据就存到了 SELECTOR_MAP 这个 Map 中。在后续使用的时候,也是从这里拿数据。

上述逻辑用流程图表示如下:

  • 服务调用流程

在 Dubbo 插件体系中,类继承关系如下:

ShenyuPlugin:顶层接口,定义接口方法;
AbstractShenyuPlugin:抽象类,实现插件共有逻辑;
AbstractDubboPlugin:dubbo插件抽象类,实现dubbo共有逻辑(ShenYu网关支持ApacheDubbo和AlibabaDubbo);
ApacheDubboPlugin:ApacheDubbo插件。
  • org.apache.shenyu.web.handler.ShenyuWebHandler.DefaultShenyuPluginChain#execute()

通过 ShenYu 网关代理后,请求入口是 ShenyuWebHandler,它实现了 org.springframework.web.server.WebHandler 接口,通过责任链设计模式将所有插件连接起来。

  • org.apache.shenyu.plugin.base.AbstractShenyuPlugin#execute()

当请求到网关时,判断某个插件是否执行,是通过指定的匹配逻辑来完成。在 execute()方法中执行选择器和规则的匹配逻辑。

  • org.apache.shenyu.plugin.global.GlobalPlugin#execute()

最先被执行的是 GlobalPlugin ,它是一个全局插件,在 execute()方法中构建上下文信息。

  • org.apache.shenyu.plugin.base.RpcParamTransformPlugin#execute()

接着被执行的是 RpcParamTransformPlugin , 它负责从 http 请求中读取参数,保存到 exchange 中,传递给 rpc 服务。在 execute()方法中,执行该插件的核心逻辑:从 exchange 中获取请求信息,根据请求传入的内容形式处理参数。

  • org.apache.shenyu.plugin.dubbo.common.AbstractDubboPlugin

然后被执行的是DubboPlugin 。在 doExecute()方法中,主要是检查元数据和参数。在 doDubboInvoker()方法中设置特殊的上下文信息,然后开始dubbo的泛化调用。

在 genericInvoker()方法中:

1、获取 ReferenceConfig 对象;

2、获取泛化服务 GenericService 对象;

3、构造请求参数 pair 对象;

4、发起异步的泛化调用。

通过泛化调用就可以实现在网关调用 dubbo 服务了。

ReferenceConfig 对象是支持泛化调用的关键对象 ,它的初始化操作是在数据同步的时候完成的。

  • org.apache.shenyu.plugin.response.ResponsePlugin#execute()

最后被执行的是 ResponsePlugin ,它统一处理网关的响应结果信息。处理类型由 MessageWriter 决定,类继承关系如下:

MessageWriter:接口,定义消息处理方法;
NettyClientMessageWriter:处理 Netty 调用结果;
RPCMessageWriter:处理 RPC 调用结果;
WebClientMessageWriter:处理 WebClient 调用结果;

Dubbo 服务调用,处理结果是 RPCMessageWriter。

  • org.apache.shenyu.plugin.response.strategy.RPCMessageWriter#writeWith()

在 writeWith()方法中处理响应结果,获取结果或处理异常。

分析至此,关于 Dubbo 插件的源码分析就完成了,分析流程图如下:

小结

本文从实际案例出发,由浅入深分析了 ShenYu 网关对 Dubbo 服务的代理过程。涉及到的主要知识点如下:

  • 通过责任链设计模式执行插件;
  • 使用模板方法设计模式实现 AbstractShenyuPlugin,处理通用的操作类型;
  • 使用单例设计模式实现缓存数据类 BaseDataCache;
  • 通过 springboot starter 即可引入不同的注册中心和数同步方式,扩展性很好;
  • 通过 admin 支持规则热更新,方便流量管控;
  • Disruptor 队列是为了数据与操作解耦,以及数据缓冲。

有任何疑问,欢迎通过以下渠道联系社区:

  • Apache Shenyu 社区:

https://github.com/apache/incubator-shenyu

  • Dubbo3 社区:

https://github.com/apache/dubbo https://github.com/apache/dubbo

作者:刘良

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

支持中英文自由说、访谈自动整理,新一代会议AI助理“听悟”升级发布

“你只需专注会议&#xff0c;其余一切交给听悟。”11月4日&#xff0c;2022杭州云栖大会&#xff0c;阿里巴巴达摩院研发的智能产品“听悟”进阶版亮相大会现场。仅需一台个人电脑&#xff0c;观众和媒体记者们即可体验全面集成达摩院语音语言智能的最新AI助理&#xff0c;感受…

成本节省 50%,9人团队使用函数计算开发 wolai 在线文档应用

我们的日常工作场景几乎离不开“云文档”。目前&#xff0c;人们对于文档的需求再不仅仅是简单的记录&#xff0c;而扩展到办公协同、信息组织、知识分享等。在国内众多在线文档中&#xff0c;wolai 因为功能新、迭代快、流畅的异地协同体验、高效的信息组织方式以及“信息块”…

阿里云“汽车云”亮相云栖大会,小鹏、一汽、长城、地平线等均已上云

11月3日&#xff0c;阿里云“汽车云”在2022云栖大会上正式亮相。基于云、钉钉、达摩院、瓴羊等核心技术能力&#xff0c;通过与客户、伙伴紧密共创&#xff0c;阿里云在研发、制造、流通三个业务场景形成了“自动驾驶云”“智造云”“营销云”解决方案&#xff0c;提供“产研供…

阿里云架构师梁旭:MES on 云盒,助力客户快速构建数字工厂

2022年5月18日&#xff0c;在“云上数字工厂与中小企业数字化转型创新论坛”暨“鼎捷MES & 阿里云云盒云上数字工厂解决方案发布会”上&#xff0c;阿里云智能弹性计算产品解决方案架构师梁旭为大家带来了《MES on 云盒&#xff0c;助力客户快速构建数字工厂》的主题分享&a…

如视技术副总裁杨永林:当传统产业遇到“数字空间”

图&#xff1a;2022阿里云视觉计算私享会现场 5月11日&#xff0c;在“2022阿里云视觉计算私享会”上&#xff0c;如视技术副总裁杨永林为大家带来了题为《当传统产业遇到“数字空间”》的主题分享。以下内容根据他的演讲整理而成。 随着互联网的发展&#xff0c;我们不断地将…

第二届上汽零束SOA平台开发者大会揭幕,智能汽车生态加速落地

重磅发布一览&#xff1a; 上汽、OPPO联合发布《生态域白皮书》&#xff0c;率先打通不同品牌硬件、操作系统和产品之间的交互壁垒&#xff0c;构建广泛兼容的生态域底层协议&#xff0c;并向全行业开放技术标准和开发资源。上汽、地平线联合发布基于征程5芯片的智驾解决方案。…

从 Redis7.0 发布看 Redis 的过去与未来

前言 经历接近一年的开发、三个候选版本&#xff0c;Redis 7.0终于正式发布&#xff0c;这是Redis历史上改变最多的一个大版本&#xff0c;它不仅包含了50多个新命令&#xff0c;还有大量核心新特性与改进&#xff0c;这些不仅能够解决用户使用中的诸多问题&#xff0c;还进一…

聊一聊并行文件系统的客户端优化之道

并行文件系统作为文件存储的一个高性能分支&#xff0c;自出现以来已经走过了二十个年头&#xff0c;一直被大规模应用于气象预测、石油勘探、高能物理、汽车制造、芯片制造、自动驾驶、影视渲染等高性能计算领域。在AI时代下&#xff0c;GPU并行计算如火如荼&#xff0c;阿里云…

马斯克“灭霸式”裁员,多个部门遭“团灭”!结果火速打脸,开始“跪求”被裁工程师复职?...

整理 | 郑丽媛出品 | 程序人生&#xff08;ID&#xff1a;coder_life&#xff09;“为了使 Twitter 走上健康的道路&#xff0c;我们将在周五经历裁减全球员工的艰难过程。我们清楚&#xff0c;这势必会影响到一些为 Twitter 做出宝贵贡献的人&#xff0c;但不幸的是&#xff0…

辛辛苦苦原创的网站,被抄袭了怎么办?

几个月前&#xff0c;某公司A针对网站被恶意抄袭发布了一则严正声明。A公司是一家网站设计公司&#xff0c;该公司网站精巧的设计、美观的排版&#xff0c;总会让人眼前一亮。可某天A公司却发现&#xff0c;另外一家B公司在没有任何授权的情况下&#xff0c;其网站照搬了A公司网…

IT人才能嗑到的这对CP,甜!

提到文件存储&#xff0c;相信大家都不陌生&#xff0c;在浩瀚的存储发展史中&#xff0c;文件存储无疑是璀璨的&#xff0c;耀眼的。那么&#xff0c;在性能已经成为刚需&#xff0c;自动驾驶行业风起云涌的当下&#xff0c;文件存储与GPU这对CP又有怎样的含糖量呢&#xff1f…

走进施耐德电气中国软件研发中心,读懂软件创新推动“双转型”

低碳发展和数字化的“双转型”挑战下&#xff0c;施耐德电气认为&#xff0c;软件将成为企业增长的强力引擎——软件能够打通产品、生产、运营和资产的各个环节&#xff0c;实现全生命周期管理&#xff0c;让数据“可视、可管、可控、可用”&#xff0c;促进整个产业链实现从设…

PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及

PolarDB-X 2.1 新版本发布 让“MySQL 原生分布式”触手可及 ——黄贵&#xff08;曲山&#xff09;阿里云数据首席架构师 了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release PolarDB-X 2.1 是 PolarDB-X 非常重要的版本&#xff0c…

PolarDB-X 高可用存储服务:基于 X-Paxos 一致性协议

了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release 一、DN 高可用方案 在 PolarDB-X 的系统结构中&#xff0c;DN 组件负责数据存储。 一个 DN 节点是 一个 MySQL 实例。 为了数据安全&#xff0c;我们需要多副本&#xff0c;一个逻辑…

奋战开源操作系统二十年:为什么编程语言是突破口?

【编者按】编程语言之于操作系统&#xff0c;意味着什么&#xff1f;本文作者飞漫软件创始人魏永明经过二十余年的操作系统开发探索&#xff0c;明确提出编程语言是自主基础软件&#xff0c;尤其是操作系统的重要抓手。如果说操作系统是基础软件生态里的皇冠&#xff0c;那编程…

一站式智能运维解决方案,企业系统的隐形守护者

时有爆发的疫情&#xff0c;加速引导着用户观影方式的改变。越来越多的用户习惯将观影模式从线下转移到线下。 疫情作为电影行业的“黑天鹅”&#xff0c;让线下影院陷入沉寂&#xff0c;但是却让网络视频平台焕发新生。多家视频平台公布了2022财年Q4的财报&#xff0c;其用户…

事务、全局索引、透明分布式,再见,分区健

事务、全局索引、透明分布式 再见&#xff0c;分区健&#xff01; ——陈默&#xff08;墨城&#xff09;阿里云数据库技术专家 了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release 在刚刚发布的PolarDB-X 2.1.0版本中&#xff0c;开…

坚不可摧!腾讯安全设三道防线,一站式护航云上安全

数字经济时代催生了企业的“云”化发展&#xff0c;随着业务规模的迅速扩大&#xff0c;混合云和多云的部署日益增多&#xff0c;随之而来的各类漏洞和威胁让企业的安全防护门槛和复杂度越来越高。 据腾讯安全发布的《2021年度公有云安全报告》显示&#xff0c;2021年腾讯安全…

好的 MySQL 兼容性可以做到什么程度? PolarDB-X 如何做生态兼容

好的 MySQL 兼容性可以做到什么程度 PolarDB-X 如何做生态兼容 ——吴学强&#xff08;燧木&#xff09;阿里云数据库高级技术专家 了解更多PolarDB-X 内容&#xff1a; https://developer.aliyun.com/topic/polardbx_release 众所周知&#xff0c;数据库是基础的软件系统&…

如何「场景化」的企业上云

随着“十四五”规划正式提出“以混合云为重点培育行业解决方案、系统集成、运维管理等云服务行业”&#xff0c;混合云成为产业内众多服务商和企业关注的重点。自混合云概念出现以来&#xff0c;已有超过十年的历史。初期的混合云基本只是云环境之间的简单连接&#xff0c;其能…