说点大实话丨知名技术博主 Kirito 测评云原生网关

news2025/1/12 21:51:50

作者:徐靖峰

关注了阿里云云原生公众号,经常能看到 MSE-Higress 相关的推文,恰逢这次阿里云产品举办了一个 MSE-Higress 云原生网关的测评活动,借此机会体验了一把云原生网关的功能。

购买流程体验

图片

购买网关时,页面明确提示费用没有包含公网和私网 SLB 的费用,这里需要注意,评测时会产生额外费用,同时也建议 MSE-Higress 购买页给出具体的定价,参考 ACK 购买时的体验。

路由管理体验

通过购买页购买后,等了不多久实例便创建完成了,速度还是很快的,这个体验不错。第一个测评内容先体验下网关最主要的功能路由转发的能力,给 MSE-Higress 配置路由 & 服务,访问 httpbin.org 这个公网的服务,熟悉 HTTP 接口测试的同学一定也不会对 httpbin 感到陌生,它内置很多 endpoint,支持丰富的 HTTP 测试场景。

MSE-Higress 的产品设计和领域模型和我之前接触过的一些开源 API 网关差异不大,所以上手还是很快的,首先创建 httpbin 服务:

图片

接着再创建路由,我准备通过 ${网关ip}/httpbin/get 转发至 httpbin.org/get 的方式来进行路由测试。

图片

匹配方式支持前缀匹配、精确匹配、正则匹配三种,基本覆盖了网关路由场景的常见诉求。另外还需要注意的一点是,路由路径一定要配置成 /httpbin/ 而不能是 /httpbin,否则在待会配置路径重写时,会出现问题,我一开始也是因为不了解 MSE-Higress 的设计,错配成了 /httpbin,导致路由不通。

参考文档:《配置重写策略》 [ 1]

下一步,关联好刚刚创建的服务。

图片

最后在路由的策略配置中,配置重写策略,使得网关在请求 upstream service 时,去掉用于路由匹配的 /httpbin 前缀。

图片

MSE-Higress 提供了一个调试的界面,可以很方便地对路由进行调试,就在我信心满满准备完成第一个测试时,竟然调试报错了:

图片

步骤并不复杂,稍微花了点时间搜索了一下注意事项,定位到了问题,原来配置服务时是有提示的:“DNS 域名配置,如 www.aliyun.com,公网域名需要在 VPC 内配置公网 NAT 网关,内网域名暂不支持”,于是给 MSE-Higress 所在的 VPC 配置了 NAT 网关,最终调用成功。

➜ ~ curl 101.xx.166.xx/httpbin/get
{
 "args": {},
 "headers": {
  "Accept": "*/*",
  "Host": "101.xx.166.xx",
  "Original-Host": "101.xx.166.xx",
  "Req-Start-Time": "1691746441214",
  "User-Agent": "curl/7.64.1",
  "X-Amzn-Trace-Id": "Root=1-64d60089-5f09b9560522afd56f11b4e0",
  "X-Envoy-Attempt-Count": "1",
  "X-Envoy-External-Address": "140.xx.11.xx",
  "X-Envoy-Original-Path": "/httpbin/get"
 },
 "origin": "140.xx.11.xx, 121.xx.116.xx",
 "url": "http://101.xx.166.xx/get"
}

期间还有一个小插曲,反复保存服务,会触发一个前端的 bug,保存按钮一直在转圈,测评期间稳定复现:

图片

路由策略-限流功能体验

刚刚在测评路由功能时,已经使用到了 MSE-Higress 的一个策略:重写策略,MSE-Higress 共支持 6 种路由策略,分别是:限流、重写、Header 设置、跨域、超时、重试,第二个测评我计划给到另外一个网关场景中常用的功能 – 限流。

创建限流策略时发现界面有组件嵌入的痕迹,跟其他策略的配置交互体验有一定差异,盲猜是不是前端嵌入了什么已有的界面。产品支持按照 QPS 进行限流,为了方便测评,设置为 1,更容易触发限流。

图片

通过行为管理,可以跳转到应用高可用服务 AHAS 的管理界面,看起来是内部集成了应用高可用服务 AHAS,复用了它的限流能力,专业的事情交给专业的产品来做。

图片

通过一个 shell 脚本进行限流测试:

#!/bin/bash
for i in {1..5}
do
curl 101.xx.166.xx/httpbin/get &
done
wait

验证限流成功。

sentinel rate limited
{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "101.xx.166.xx",
    "Original-Host": "101.xx.166.xx",
    "Req-Start-Time": "1691747565429",
    "User-Agent": "curl/7.64.1",
    "X-Amzn-Trace-Id": "Root=1-64d604ed-6dc526617e735d4f0f083e86",
    "X-Envoy-Attempt-Count": "1",
    "X-Envoy-External-Address": "140.xx.11.xx",
    "X-Envoy-Original-Path": "/httpbin/get"
  },
  "origin": "140.xx.11.xx, 121.xx.116.163",
  "url": "http://101.xx.166.xx/get"
}
sentinel rate limited
sentinel rate limited
sentinel rate limited

问题记录:限流监控的页面不太稳定,间断出现控制台请求报错,需要优化。

图片

EDAS 微服务集成体验

MSE-Higress 对微服务能力的集成是其亮点之一,除 HTTP 协议族外,还支持 Dubbo 和 gRPC 协议。EDAS 常用于进行微服务应用的托管,MSE-Higress 也对 EDAS 进行了适配,这个测评 case 的内容便是,在 EDAS 中部署一个同时集成了 SpringCloud Alibaba (用于测试 HTTP 协议)和 Dubbo (用于测试 Dubbo 协议)的微服务应用,使用 MSE-Higress 对该应用进行接口代理。

EDAS 应用部署

准备一个 Dubbo 服务:

package moe.cnkirito.sca.provider;

import java.util.List;
import java.util.Map;

public interface IHelloService {

    String sayHello(String str);

    String sayHello();

    String sayHello(List<String> name);

    String sayHello(List<String> name, Integer age);

    String sayHello(List<People> name, String first);

    String sayHello(People name);

    String sayHello(Map<String, Integer> map);

    String sayHello(Integer age);

}

准备一个 RestController:

@RestController
public class DemoController {

  @Autowired
  DemoService demoService;

  @RequestMapping(value = "/echo", method = RequestMethod.GET)
  public String echo() {
    return "Hello MSE-Higress";
  }

}

配置应用信息并连接 EDAS 注册中心:

spring:
 application:
  name: sc-dubbo-mixed-app
 cloud:
  nacos:
   discovery:
    server-addr: edas-registry:8848 # EDAS会自行替换该连接串

dubbo:
 application:
  id: sc-dubbo-mixed-app
  name: sc-dubbo-mixed-app
 protocol:
  id: dubbo
  port: 20880
 registry:
  id: nacos
  address: nacos://edas-registry:8848 # EDAS会自行替换该连接串

部署到 EDAS 中,在 EDAS 应用管理的服务列表菜单,确认该应用启动完毕。

图片

MSE-Higress 创建来源

MSE-Higress 为了更好地支持微服务的服务发现,抽象出了“来源”这一领域模型,对应微服务架构中的注册中心。

图片

MSE-Higress 的来源支持容器服务、MSE Nacos、MSE Zookeeper、EDAS 注册中心、SAE 注册中心这几种类型,选择 EDAS 注册中心,便能关联到 sc-dubbo-mixed-app 应用部署的微服务空间。

MSE-Higress 创建服务

图片

MSE-Higress 的管控可以直接访问 EDAS 注册中心,获取到了 sc-dubbo-mixed-app 和 providers:moe.cnkirito.sca.provider.IHelloService:1.0.0:default 这两个服务。

图片

检查服务的协议,正确识别到是 Dubbo 协议。

图片

这里不免让我产生了一些疑问,在导入服务时,MSE-Higress 并没有机会让我指定服务的协议类型,在协议详情中却正确识别到了服务的协议,猜测是判断了服务的命名格式,因为 Dubbo 类型服务注册到 Nacos 中格式形如 providers:xx:xx:xx,产品上采用了约定大于配置的设计。

MSE-Higress 创建路由

SpringCloud 服务提供的是标准的 HTTP 协议,上面的路由管理测评已经覆盖,不再次测评,重点看下 HTTP2Dubbo 是如何配置路由的。这部分内容没有办法望交互生义,还是得对着文档一步步来:《配置从HTTP到Dubbo协议转换》 [ 2]

配置如下:

图片

MSE-Higress 路由调试

测试 Dubbo 路由:

图片

测试 SpringCloud 路由:

图片

EDAS 微服务集成总结

该测评介绍了由 EDAS 托管的 SpringCloud 和 Dubbo 应用,可以很方便地被 MSE-Higress 集成,由 MSE-Higress 充当网关代理,将微服务暴露到集群外被访问,虽然这次测评没有涉及,但理论上还可以借助于 MSE-Higress 提供的限流、鉴权、安全防护,来为微服务体系保驾护航,有一定的想象空间。

同时记录下该测评进行时,个人觉得可以优化的地方。

改进建议1:服务模型的优化

上文有所提及,服务在 MSE-Higress 中的存在感很弱,在我看来服务应该和路由一样,具备很强的定制属性,包括:

  • 协议类型
  • 服务发现层的唯一标识
  • 通信层的唯一标识
  • 负载均衡方式
  • 健康检查配置

目前,MSE-Higress 创建服务时,仅支持指定“服务发现层的唯一标识”,其他属性不支持在创建时指定,协议类型和负载均衡方式允许在服务详情页中进行修改,健康检查允许在服务列表页进行修改。

对于“通信层的唯一标识”稍作解释,以 Dubbo 为例,providers:moe.cnkirito.sca.provider.IHelloService:1.0.0:default 是其在 Nacos namespace 中的唯一定位符,用于服务发现,而服务名 moe.cnkirito.sca.provider.IHelloService,版本 1.0.0,分组 default 则是其在通信层的唯一标识,也应当是服务的属性,但是在 MSE-Higress 中,则是服务绑定路由时的配置,有点归属于路由模型的感觉,这点设计欠妥。

改进建议2:Dubbo 协议转换的优化

上述的测评过程中,介绍了一个 Dubbo 协议转换的配置过程,既然已经识别到了是 Dubbo 服务的格式,可以自动解析出 Dubbo 服务的三元组进行填充。

图片

另外,方法映射的设计让我产生了一些疑惑,不清楚是技术原因导致,还是产品设计有意为之,因为在我的认知中,方法级别可以在请求中动态指定,试想一个应用有 n 个服务,一个服务有 m 个接口,完全暴露需要配置 n x m 次。从技术侧考虑,Dubbo 提供的泛化调用可以支持动态指定方法,无需配置参数列表类型。保持这个设计,能够想到的好处是可以允许部分接口暴露,这又回到了那个永恒的话题:安全和易用性的 trade off。

再参考 MSE-Higress 对 gRPC 协议转换的支持,则是另外一个形态:,请求路径为:{包名}.{服务名}/{方法名},而 gRPC 本身则没有在 MSE-Higress 中以一个服务类型体现在产品设计中。MSE-Higress 有能力支持 Dubbo 和 gRPC 类型的协议转换,但是在产品设计上,还有统一优化的空间。

MSE-Higress 对于 gRPC 的支持可以参考:《基于云原生网关实现gRPC服务的路由转发》 [ 3]

改进建议3:EDAS 注册中心类型支持优化

图片

EDAS 微服务空间背后有两种形态,一种是共享型注册中心的形态,另一种是绑定 MSE Nacos 实例的形态,上述演示时,主要测试了第一种形态,对于第二种形态,MSE-Higress 的支持有些兼容性问题,具体表现为: EDAS 微服务空间绑定的 MSE Nacos 位于 vpc-a 中,MSE-Higress 位于 vpc-b 中,创建来源能够成功,但导入服务时,页面报错:

图片

这背后应该是在支持 EDAS 注册中心时,未考虑其绑定的 MSE Nacos 位于其他 vpc 导致。建议在导入来源时对该 case 进行判断。

插件市场体验

插件体系功能较多,个人精力有限,我只挑选了个别插件进行了使用,表现均符合预期。我挑选了 APISIX 的插件支持情况与 MSE 进行了对比,由于 APISIX 是一款开源产品,我有意筛选的都是一些相对通用的能力,这样才具备比较价值。

图片

除了表格展示的插件之外,两款网关产品还支持很多其他插件,可以发现基本上常见的网关场景所需要的插件,MSE-Higress 都是支持的。与 APISIX 的设计不同,MSE-Higress 并没有将所有功能都堆到插件这一概念上,例如 Mock 和重定向由路由配置控制,跨域和限流通过路由策略控制,也有相当多的功能通过插件提供,在这一点上,我比较认可 MSE-Higress 的设计,这样可以减少网关使用者的理解成本。

但同时,在策略配置灵活度上,MSE-Higress 的设计仍有优化空间,以限流为例,由于其被抽象到了路由策略这一模型中,而该模型没有支持配置到消费者级别,这就让 MSE-Higress 失去了消费者级别限流的能力。

在商业化集成上,由于 MSE-Higress 是阿里云官方提供的一款网关产品,还额外提供了诸如:waf 安全防护、edas 鉴权插件、IDaaS 认证鉴权等集成,在公共云组装式开发的模式下,可以更好地跟已有的云产品联动,这是相比开源网关提供的插件能力最大的优势。

EDAS x MSE-Higress 金丝雀发布体验

MSE-Higress 在配置路由时,允许关联到多个服务,借助于这个特性,可以完成很多灰度的实践,这个测评将验证 MSE-Higress 和 EDAS 配合完成金丝雀发布的场景。

金丝雀的意义是先引流一小部分流量到新版本服务,大部分流量仍然保持在旧版本。

仍然使用之前的 sc-dubbo-mixed-app 应用,但需要稍作改造,为 SpringCloud 和 Dubbo 服务引入版本的概念,参考《管理服务版本》 [ 4] 一节,可知在 Nacos 服务发现场景下,MSE-Higress 是通过节点标签来进行路由的,以下是我的改造。

EDAS 部署 V1 版本

SpringCloud 服务引入版本:

spring:
 application:
  name: sc-dubbo-mixed-app
 cloud:
  nacos:
   discovery:
    server-addr: edas-registry:8848 # EDAS会自行替换该连接串  
    metadata: 
     x-version: v1
@RestController
public class DemoController {
  @Autowired
  DemoService demoService;

  @RequestMapping(value = "/echo", method = RequestMethod.GET)
  public String echo() {
    return "Hello MSE-Higress V1";
  }
}

Dubbo 服务引入版本:

@DubboService(group = "default", version = "1.0.0",parameters = {"x-version:v1"})
public class IHelloServiceImpl implements IHelloService {
  @Override
  public String sayHello() {
    return "Hello MSE-Higress V1";
  }
}

在 EDAS 上部署以上版本,并扩容成 2 个副本,此时两个副本内容一致。

EDAS 分批部署 V2 版本

SpringCloud 服务新版本:

@DubboService(group = "default", version = "1.0.0",parameters = {"x-version:v1"})
public class IHelloServiceImpl implements IHelloService {
  @Override
  public String sayHello() {
    return "Hello MSE-Higress V1";
  }
}
@RestController
public class DemoController {

  @Autowired
  DemoService demoService;

  @RequestMapping(value = "/echo", method = RequestMethod.GET)
  public String echo() {
    return "Hello MSE-Higress V2";
  }
}

Dubbo 服务新版本:

@DubboService(group = "default", version = "1.0.0",parameters = {"x-version:v2"})
public class IHelloServiceImpl implements IHelloService {

  @Override
  public String sayHello() {
    return "Hello MSE-Higress V2";
  }
  
}

在 EDAS 进行分批发布:

图片

这里解释下,为什么不使用 EDAS 的金丝雀发布,因为 EDAS 金丝雀发布主要是用于微服务之间的调用,而不是入口流量,而此次测评的恰恰是 MSE-Higress 对 EDAS 应用进行的调用,在这个 case 中,EDAS 需要做的是分批发布,保证后端同时有 v1 和 v2 两个版本即可。

这样就完成了金丝雀发布的准备工作,同时存在了 v1 和 v2 两个版本的应用,剩下的就是对 MSE-Higress 进行配置,让其按照特定比例对这两个版本进行引流(试想一下,如果没有金丝雀发布,由于 v1 和 v2 都是一台机器,那流量比例应该是 1:1)。

MSE-Higress 配置服务版本和标签路由

在服务详情中,可以添加服务版本,这里 MSE-Higress 的体验做的很好,由于关联了注册中心,可以自动获取到对应的标签名和标签值,能够实时计算出对应的节点数量,不用担心配错了。

图片

需要修改路由关联服务的方式,从单服务改成标签路由,并配置 v1 和 v2 版本流量比例为 80:20。

图片

走到这一步,我发现标签路由怎么都选不到 Dubbo 服务,才注意到上方有提示“多服务和标签路由功能不支持添加Dubbo服务”!也就是说我之前的 Dubbo 服务打标签的准备工作都白费了,但我还是将测评过程记录了下来。

流量比例测试

通过调试 /sc-dubbo-mixed-app/echo 10 次,观察返回值:

Hello MSE-Higress

Hello MSE-Higress

Hello MSE-Higress

Hello MSE-Higress V2

Hello MSE-Higress

Hello MSE-Higress

Hello MSE-Higress

Hello MSE-Higress V2

Hello MSE-Higress

Hello MSE-Higress

符合预期。

测试总结

通过上述的例子,可以发现 MSE-Higress 和 EDAS 应用在 Nacos 服务发现场景下实现金丝雀发布还是很简单的,但从中也看出了一些问题,就是产品仅告诉了用户怎么达到金丝雀发布的验证态,没有走完最后一公里,即金丝雀发布验证到什么阶段可以认为发布完毕了,发布完之后,怎么完成 EDAS 的分批发布,怎么修改标签路由,达到一个运行终态。并且,这个流程配置还是很复杂的,要结合到用户的运维系统中,有一定集成工作,至少应该在 EDAS 这样的系统中提供一个基于 MSE-Higress 金丝雀发布入口应用的最佳实践。

体验总结

大概浏览了下 MSE-Ingress 的其他功能,精力有限加上篇幅限制,没法一一罗列,简单总结下。

MSE-Higress 除了文章开头的购买流程外,还支持作为一个 ACK 集群的 Ingress 网关,这得益于其云原生的基因,并且可以对标到 Nginx Ingress,这对于愿意拥抱云原生生态的公司是一个福音,我这次就不单独评测这一功能了。

文档支持上,我本次的测评完全是参考控制台文案及文档完成,可以看的出来,文档体系相对比较完善,一些常见的疑问,也都在文档中高亮了,点赞。需要注意的是一些新功能上线之后,需要对已有的相关文档进行更新,以《从 Spring Cloud Gateway 迁移到云原生网关》 [ 5]  为例,目前已经支持了 EDAS 共享注册中心来源了,对于文档中使用 EDAS 共享注册中心这一 case 而言,就不需要先迁移了,可能会让 SpringCloud Gateway 迁移用户产生误解。

MSE-Higress 可以很好地承担安全网关和流量网关的作用,但对于是否能够很好的承担起微服务网关/业务网关的作用,我觉得有待讨论。因为业务网关很直接的诉求是将企业内部的大量 API 通过网关暴露出来,MSE-Higress 的领域模型是路由/服务这套模型,这就限制于了其对于业务能力的抽象,路由大多数时候还是一个泛接口的作用,往往用于承接一个后端应用模型。从用户形态来看,可能是偏运维侧的用户会关注目前的 MSE-Higress 形态,而不是开发。

如果深入使用 MSE-Higress,可能会有精细化管理 API 接口的诉求,目前 MSE-Higress 的产品设计似乎不能很好地满足这一诉求,具体表现为 MSE-Higress 的路由模型和 API 精细化管理的需求之间的矛盾。MSE-Higress 的路由模型如果配置为泛路由 /order/* 的前缀匹配模式,则会将应用的所有接口暴露出去;如果配置为 /order/createOrder 的精确匹配模式,可以达到精细化管理的诉求,但接口级别常见的需求 API 出入参定义、参数映射、错误码管理,跟路由的模型无法很好的适配。这可能是大多数研发用户使用 MSE-Higress 未来可能面临的问题。

整体而言,我还是很看好 MSE-Higress 这款产品的。 产品界面交互还时髦,大多数操作流程很流畅;产品集成上,从它跟 WAF、EDAS、ACK 等产品的集成来看,可以看出阿里云对它的定位不仅仅是一个网关组件,而是希望能够借助它完成一个产品生态的构建,云原生公众号上 Serverless 挺火的,MSE-Higress 还不支持 Serverless 服务,这点倒是有点意外。同时它还具备 Higress 的开源属性,也解决了一部分选型时被阿里云绑死的顾虑。


参与云原生网关 MSE-Higress 测评赢大奖

2023 年 8 月 10 日-2023 年 9 月 15 日,通过体验 MSE-Higress,围绕三大主题,进行测评创作,有机会赢取 30 元猫超卡、米家台灯 Lite、CHERRY 机械键盘 MX3.0S 等大奖。

评测活动详情:阿里云产品测评赢大奖丨云原生网关 MSE-Higress

相关链接:

[1] 《配置重写策略》

https://help.aliyun.com/zh/mse/user-guide/configure-a-rewrite-policy

[2] 《配置从HTTP到Dubbo协议转换》

https://help.aliyun.com/zh/mse/user-guide/configure-http-to-dubbo-protocol-conversion**

[3] 《基于云原生网关实现 gRPC 服务的路由转发》

https://help.aliyun.com/zh/mse/getting-started/route-the-traffic-of-grpc-applications-based-on-cloud-native-gateways

[4] 《管理服务版本》

https://help.aliyun.com/zh/mse/user-guide/manage-service-versions

[5] 《从 Spring Cloud Gateway 迁移到云原生网关》

https://help.aliyun.com/zh/mse/user-guide/migrate-services-from-spring-cloud-gateway-to-cloud-native-gateways

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

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

相关文章

python入门篇04-循环(while与for),变量,函数基础

python目录 1. 前言1.1 上文传送 2. python基础使用2.1 while循环2.1.1 while循环的使用> 案例: 猜数字游戏(多经典...) 2.1.2 while双层循环> 案例: 输出9*9乘法表> 运行结果 2.2 for循环2.2.1 **for循环使用**> 案例: (字符串)查出有多少字符 2.2.2 方法range()的…

Leetcode每日一题:1448. 统计二叉树中好节点的数目

原题 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 解…

网络映射会遇到哪些困难

网络映射通过将复杂的网络划分为更小、可管理的块&#xff0c;帮助 IT 管理员获得对其网络的更大控制和可见性&#xff0c;它有助于可视化不同的网络组件&#xff08;如服务器、交换机端口和路由器&#xff09;如何互连以执行其功能&#xff0c;通过表示网络设备的通信方式&…

腾讯云服务器价格表大全_轻量服务器_CVM云服务器报价明细

腾讯云服务器租用费用表&#xff1a;轻量应用服务器2核2G4M带宽112元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、云服务器CVM S5实例2核2G配置280.8元一年、GPU服务器GN10Xp实例145元7天&#xff0c;腾讯云服务器网长期更新腾讯云轻量…

无涯教程-进程 - 子进程监控

正如我们所看到的&#xff0c;每当我们使用fork从程序创建子进程时&#xff0c;都会发生以下情况- 当前进程成为父进程新进程成为子进程 如果父进程比子进程提前完成任务然后退出&#xff0c;会发生什么?现在谁将成为子进程的父进程?子进程的父进程是init进程&#xff0c;它…

业财融合背景下,全面预算管理的发展之路

随着社会经济的高速发展&#xff0c;单一的组织机构职能极大限制了企业发展的创新动能。业务壁垒的不断滋生造成了信息传达严重的不对等&#xff0c;沟通协作成本加大&#xff0c;业务效率降低&#xff0c;专业化的分工形式逐渐成为了制约企业发展的桎梏。 2016年&…

基于Python科研论文绘制学习 - task3

Seaborn seaborn 在matplotlib 的基础上进行了更高级的封装&#xff0c;能用更少的代码绘制配图。 1、图类型 关系型图 数据分布型图 分类数据型图 回归模型分析图 2、多子图网格型图 FacetGrid&#xff08;&#xff09; import pandas as pd import numpy as np…

全球纳米烧结银市场年复合增长率为6.5%!

烧结银简单来讲是指经过低温烧结技术将纳米银粉&#xff08;平均粒径<0.1μm(100nm)&#xff09;印刷在承印物上&#xff0c;使之成为具有传导电流和排除积累静电荷能力的银浆&#xff0c;其由导电填料——银粉、粘合剂、溶剂及改善性能的微量添加剂组成&#xff0c;使用低熔…

云企业网CEN与转发路由器TR

云企业网CEN 云企业网CEN&#xff08;Cloud Enterprise Network&#xff09;是运行在阿里云私有全球网络上的一张高可用网络。云企业网通过转发路由器TR&#xff08;Transit Router&#xff09;帮助您在跨地域专有网络之间&#xff0c;专有网络与本地数据中心间搭建私网通信通…

苹果手机数据恢复的详细教程,果粉必看!

“照片不小心误删”、“清理内存把聊天记录删除了”、“手机重要文件丢失”……大家是否也会遇到以上的糟糕情况呢&#xff1f;“手机数据丢失”这六个字的杀伤力有多大&#xff0c;大家可想而知。 那么&#xff0c;手机删除的数据能够恢复吗&#xff1f;苹果手机数据恢复的方…

Hadoop Yarn 核心调优参数

文章目录 测试集群环境说明Yarn 核心配置参数1. 调度器选择2. ResourceManager 调度器处理线程数量设置3. 是否启用节点功能的自动检测设置4. 是否将逻辑处理器当作物理核心处理器5. 设置物理核心到虚拟核心的转换乘数6. 设置 NodeManager 使用的内存量7. 设置 NodeManager 节点…

光伏发电储能方案(小城光伏电站的智慧节能之路)

​阳光城小城光伏电站位于某省郊区,建成于5年前,总装机100兆瓦。电站采用光伏组串并联方式,将太阳能转换为电力后并网发电。但受限于光照条件,发电量经常无法有效利用,浪费严重。 为实现清洁能源的充分应用,电站管理层决定改造储能系统。经评估,采用联合电站侧、电网侧储能方式…

Java之内部类的详解

3.1 概述 3.1.1 什么是内部类 将一个类A定义在另一个类B里面&#xff0c;里面的那个类A就称为内部类&#xff0c;B则称为外部类。可以把内部类理解成寄生&#xff0c;外部类理解成宿主。 3.1.2 什么时候使用内部类 一个事物内部还有一个独立的事物&#xff0c;内部的事物脱…

Pytorch-day08-模型进阶训练技巧

PyTorch 模型进阶训练技巧 自定义损失函数 如 cross_entropy L2正则化动态调整学习率 如每十次 *0.1 典型案例&#xff1a;loss上下震荡 1、自定义损失函数 1、PyTorch已经提供了很多常用的损失函数&#xff0c;但是有些非通用的损失函数并未提供&#xff0c;比如&#xf…

4.7 为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?

主要原因是为了防止历史报文被下一个相同四元组的连接接收。 如果正常通过四次挥手完成&#xff0c;TIME_WAIT状态会持续2MSL&#xff0c;历史报文会在下一个连接之前就自然消失&#xff0c;但无法保证每次连接都能通过四次挥手正常关闭。 假设客户端和服务端建立一个连接后&a…

Unity项目如何上传Gitee仓库

前言 最近Unity项目比较多&#xff0c;我都是把Unity项目上传到Gitee中去&#xff0c;GitHub的话我用的少&#xff0c;可能我还是更喜欢Gitee吧&#xff0c;毕竟Gitee仓库用起来更加方便&#xff0c;注意Unity项目上传时最佳的方式是把 Asste ProjectSetting 两个文件夹上传上…

基于redisson实现延时队列解耦业务

前言 今天跟大家分享的是一个基于redisson实现的延时队列&#xff0c;有个初版的封装工具&#xff0c;使用者只用关心延时时间到了取到的数据处理&#xff08;或者之前处理&#xff0c;到时间只做剩下的业务&#xff09;&#xff0c;废话不多说&#xff0c;直接上货。 一、业务…

目前电视盒子哪个最好?2023公认最佳电视盒子排名TOP5

电视盒子作为我们看片必备&#xff0c;功能更加丰富&#xff0c;看视频、玩游戏、K歌、上网课等都能实现&#xff0c;新手们在下单前会参考排行榜&#xff0c;近期业内发布了公认最好的电视盒子排名前五&#xff0c;不懂目前电视盒子哪个最好可以从入围的品牌中选择&#xff1a…

IET独立出版 | EI检索 | 2023年第三届机械、航空航天与汽车工程国际会议

会议简介 Brief Introduction 2023年第三届机械、航空航天与汽车工程国际会议&#xff08;CMAAE 2023&#xff09; 会议时间&#xff1a;2023年12月8 -10日 召开地点&#xff1a;中国南京 大会官网&#xff1a;www.cmaae.org 航天是当今世界最具挑战性和广泛带动性的高技术领域…

RTSP流媒体服务器EasyNVR视频平台设备通道时间与服务器录像时间不一致的问题解决步骤

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议&#xff0c;将前端接入设备的音视频资源进行采集&#xff0c;并转码成适合全平台、全终端分发的视频流格式&#xff0c;包括RTMP、RTSP、FLV、HLS、WebRTC等格式。平台已经在智慧水利、智慧工厂、智慧校园、智慧仓储等场景中应…