Nacos系列:Nacos 控制台手册

在这里插入图片描述

引言

  Nacos是阿里巴巴中间件部门开源的一款用于服务发现和配置管理的产品,Nacos 控制台主要旨在于增强对于服务列表、健康状态管理、服务治理、分布式配置管理等方面的管控能力,以便进一步帮助用户降低管理微服务应用架构的成本。

一、访问 Nacos 控制台

1.1 登录管理

  Nacos Server 运行成功后我们可以打开后台管理界面,查看其运行状态和管理信息。在浏览器访问 http://ip:8848/nacos ,默认会跳转到以下登录页面,默认的账号和密码都为:nacos。

image

  登录后可以看到如下界面,默认进入nacos管理中心,此时还没有服务注册进来,所以服务列表是空的。右上角的内容就是一些超链接,能够跳转到 Nacos 的官网等地方

image

  由于部分公司自己开发控制台,不希望被nacos的安全filter拦截。因此nacos支持定制关闭登录功能找到配置文件 application.properties, 替换以下内容即可。

## spring security config
### turn off security
spring.security.enabled=false
management.security=false
security.basic.enabled=false
nacos.security.ignore.urls=/**

# nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**

注意:默认会话保持时间为30分钟,30分钟后需要重新登录认证,暂时不支持修改该默认时间。

1.2 功能菜单

  登录成功后可以看到左侧的菜单栏,主要功能有:配置管理、服务管理、权限管理、命名空间、集群管理,如下表所示:

一级菜单二级菜单说明
配置管理主要是管理配置中心的所有配置文件
配置列表查询、添加、修改配置数据
历史版本
监听查询
服务管理
服务列表用于展示已经注册到 Nacos Server的服务列表以及服务的基本信息
订阅者列表服务消费方以及包括客户端的版本信息等
权限控制用于维护管理后台系统的用户角色和权限,一般的系统都有这个功能
用户列表用于查询、修改、删除、添加用户
角色管理用于查询、修改、删除、添加角色
权限管理
命名空间用于将服务的注册订阅信息在逻辑上隔离开来
集群管理
节点列表用于查看集群节点、查看节点元数据、下线节点

二、配置管理

  应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。如果服务中配置都放在代码中或者项目里的配置文件中,那么我们想要修改配置,就不得不修改代码,提交上线、重启服务。但若是我们使用统一配置管理,就可以在服务启动的时候从配置管理服务读取配置,启动后,修改配置后,也会主动通知我们的服务。Nacos 提供了动态配置服务,支持基于 Namespace 和 Group 的配置分组管理,以便更灵活的根据自己的需要,实时进行服务应用的配置变更,让配置管理变得更加高效和快捷。

image

  它基于 key/value 方式存储应用配置和其他元数据信息,为分布式系统中的外部化配置提供服务器端和客户端支持,以便用户更灵活的根据自己的需要按照环境或者应用、模块等分组管理微服务以及Spring的大量配置。在配置管理中主要提供了配置历史版本、回滚、订阅者查询等核心管理能力。

2.1 配置列表

  点击Nacos控制台的【配置管理 -> 配置列表】,即可看到以下图所示。界面中展示了不同 namespace 下的配置集列表,可以点击左上角的不同 namespace 进行切换,右上角“+"号或点击某配置集后的编辑按钮可进入配置集编辑器。

image  在 nacos 服务端默认是没有任何配置的,我们可以在配置列表页面新增一个配。在命名空间public中点击右边+号来新建配置或点击某配置集后的编辑按钮,如下图所示。

image

  Nacos支持 YAML、Properties、TEXT、JSON、XML、HTML 等常见配置格式在线编辑、语法高亮、格式校验,帮助用户高效编辑的同时大幅降低格式错误带来的风险。Nacos支持配置标签的能力,帮助用户更好、更灵活的做到基于标签的配置分类及管理。同时支持用户对配置及其变更进行描述,方面多人或者跨团队协作管理配置。

  当我们在修改配置文件的时候,最容易出现的就是误修改某些内容,好在Nacos支持编辑DIFF能力,帮助用户校验修改内容,降低改错带来的风险。

image

  Nacos 提供示例代码能力,能够让新手快速使用客户端编程消费该配置,大幅降低新手使用门槛。

image

注意: 在 Mac 上进行同样的操作,会发现提示: "导入失败! 未读取到合法数据,请检查导入的数据文件。"这个是由于mac系统自带的 .DS_store 文件,Nacos 读取的时候会出现异常,所以需要清除 .DS_store 文件。

2.2 历史版本

  Nacos 通过提供配置版本管理及其一键回滚能力,帮助用户改错配置的时候能够快速恢复,降低微服务系统在配置管理上的一定会遇到的可用性风险。Nacos中,修改配置点击发布后会创建一个对应的历史版本快照,我们可以在Nacos控制台的历史版本列表中找到这些快照,点击回滚按钮即可将配置恢复到指定的版本。

image

2.3 监听查询

  Nacos 提供配置订阅者即监听者查询能力,可以查看配置是否推动更新成功。同时提供客户端当前配置的MD5校验值,以便帮助用户更好的检查配置变更是否推送到 Client 端,如下图所示:

image

三、服务管理

  开发者或者运维人员往往需要在服务注册后,通过友好的界面来查看服务的注册情况,包括当前系统注册的所有服务和每个服务的详情。并在有权限控制的情况下,进行服务的一些配置的编辑操作。Nacos 控制台的服务发现部分,主要就是提供用户一个基本的运维页面,能够查看、编辑当前注册的服务。

3.1 服务列表

3.1.1 服务列表页面

  服务列表页面主要展示已经在Nacos注册的服务列表以及服务的基本信息等,整体界面布局是左上角有一个支持根据服务名搜索服务的搜索框和搜索按钮,页面中央是服务列表的展示。服务列表主要展示服务名、集群数目、实例数目、健康实例数目和详情按钮五部分,如下图所示。我们可以按照服务名称进行搜索,后面的隐藏空服务意思是我们可以创建一个空服务,这个空服务暂时没有任意一个实例,它就只是创建了,占了一个位置等待Nacos Client来进行注册。

image

3.1.2 创建服务页面

  我们可以点击创建服务的按钮来进行创建空服务,然后输入服务名和保护阀值,如下图所示,点击确定后的服务列表就会显示出刚刚创建的服务。

image

  其中,服务名⼀般用于描述该服务提供了某种功能或能力,服务名作为服务唯⼀标示,需要确保在使用中能够唯⼀定位到该服务,在项目中可以通过 spring.application.name 来指定,如下所示:

spring.application.name=spring-cloud-nacos-producer

  服务实例分为健康的实例和不健康的实例,默认在5秒之后Nacos注册中心还没有收到某个实例的心跳就认为这是一个不健康的实例,当30秒还没有收到心跳就把这个服务实例剔除掉。再上图中提到保护阈值,我们可以设置一个0~1之间的数,来进行雪崩保护。如果不设置,默认是0,也就是不开启雪崩保护,当 健康的实例数 / 总实例数 < 保护阀值 就会触发雪崩保护。我们一般也不会设置保护阀值,因为后面一般会结合sentinel服务熔断降级来完成雪崩保护,Nacos 主要还是做注册中心的工作。

  上图中提到分组,这是 Nacos 中次于命名空间的⼀种隔离概念,区别于命名空间的强制隔离属性,分组属于⼀个弱隔离概念,主要用于逻辑区分⼀些服务使用场景或不同应用的同名服务,最常用的情况主要是同⼀个服务的测试分组和生产分组,或者将应用名作为分组以防止不同应用提供的服务重名。分组名默认为 DEFAULT_GROUP,在项目中可通过 spring.cloud.nacos.discovery.group 来设置,如下所示:

# 指定 nacos 中的分组名
spring.cloud.nacos.discovery.group=DEV_GROUP

此项可省略,省略时的默认值为 DEFAULT_GROUP。 分组名可以直接在项目中使用,无需像命名空间那样,在使用前还要在控制台中新建,设定了分组名之后,刷新服务列表就可以看到新的分组名称了。

3.1.3 服务详情页面

  在服务列表页面点击“详情”按钮,就会进入服务详情页面。服务详情页面展示的是一个服务的所有关键信息,包括服务的配置和元数据、集群列表和示例列表,以及一些操作的按钮,如下图所示:

image

  在该页面的上方,是服务的配置和元信息,目前包含服务名、保护阈值、健康检查模式以及元数据metadata。右上方是编辑服务按钮,点击后会有对话框弹出,可以对服务的配置进行编辑。例如服务的元数据编辑,首先点击服务详情页右上角的“编辑服务”按钮,然后在元数据输入框输入:version=1.0,env=prod。

image

  服务详情的下方,是集群列表和集群下的实例列表。实例列表将会分页展示该集群下注册的所有实例,展示的信息有IP、端口、权重、是否健康、元信息和对应的编辑及下线按钮。Nacos 为用户提供了流量权重控制的能力,同时开放了服务流量的阈值保护,以帮助用户更好的保护服务服务提供者集群不被意外打垮。如下图所以,可以点击实例的编辑按钮,修改实例的权重。如果想增加实例的流量,可以将权重调大,如果不想实例接收流量,则可以将权重设为0。

image

  Nacos还提供服务实例的上下线操作,在服务详情页面,可以点击实例的“上线”或者“下线”按钮。下线按钮点击后,该实例将不会返回给订阅端,无论该实例是否健康。“下线”文本会改成“上线”,用于对应的实例上线操作。

image

3.2 订阅者列表

  这里能够查询的服务提供者的访问记录,很简单,没有什么需要说的,略过。

四、权限控制

4.1 用户列表

  Nacos 开启权限控制后,多了权限控制模块,可以给不同的用户分配不同的角色,给不同的角色分配不同资源的不同的权限。点击“用户列表”,进入用户管理页面,可以进行用户的创建、修改和删除。

image

4.2 角色管理

  因为 Nacos 的自带的权限是基于角色来进行分配的,因此需要给创建好的用户绑定一些角色。

image

4.3 权限管理

  角色创建好以后,就可以给这个角色赋予特定的权限了。在“添加权限”对话框里,可以选择绑定的角色、命名空间资源以及对应的动作类型。例如,可以给角色 test 绑定命名空间test的读写权限。然后又因为刚刚我们是将用户 test 绑定到了角色 test 上,那么 test 这个用户就可以对 test 这个命名空间的资源进行读写操作了。

image

  点击控制台右上角,退出 admin 账号,然后用刚才创建的 test 进行登录。首先是左侧的权限管理菜单消失了,因为当前用户不是管理员。其次是会弹出一个鉴权失败的提示框。不用担心,这个提示框意思是 test 没有 public 命名空间的读权限,所以会弹出,但是不影响我们将命名空间切换到 test。

五、命名空间

5.1 隔离设计

  Nacos 服务中最顶层、也是包含范围最广的概念,命名空间的作用其实就是可以进行多租户的分割,Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。其中,Namespace 代表不同的环境,如开发,测试,生产等;Group 代表项目,如 xxx 安全项目、xxx 电商项目等;每个项目往往有若干个工程(微服务),每个配置集(DataId)是一个工程(微服务)的主配置文件,如下图所示:

image

  从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的namespce,以此来实现多环境的隔离。例如,你可能有开发,测试和生产三个不同的环境,那么使用一套nacos 集群可以分别建以下三个不同的 namespace。如下图所示:

image

  从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:

image

5.2 命名空间管理

  在管理界面创建命名空间的方法如下,点击【命名空间–>新建命名空间】,然后输入名称和描述,如下图所示,点击保存之后在列表这里就可以看到刚刚创建的命名空间了,同时在服务列表中也能看到命名空间的身影。

image

  命名空间默认为 public,在项目开发中,如果不指定命名空间,那么会使用默认值 public。官方推荐使用运行环境来定义命名空间,例如: 开发环境(dev)、测试环境(test)、验收测试环境(uat)、生成环境(prod)等,用于将服务的注册订阅信息在逻辑上隔离开来。

  在项目开发中,在Nacos Client 配置的时候其实就通过 spring.cloud.nacos.discovery.namespace 来指定命令空间了,如下所示:

spring:
  application:
    name: order-service # 指定应用名称,Nacos会将该名称当做服务名称
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # 指定Nacos服务的地址,默认值是localhost:8848
      discovery:
        # 指定Nacos 管理界面登录用户名和密码,默认值是nacos
        username: nacos
        password: nacos
        namespace: public # 指定命名空间,可以隔离不同的服务实例。这里填的是命名空间的id,默认是public

注意:如果在控制台没有新建命名空间,直接在项目中使用的话,是不能将服务成功的注册到 Nacos 中的。

六、集群管理

6.1 Nacos 服务存储模型

  Nacos Server可以是集群部署的也可以是单机部署,在实际生产环境中,为了防止单点故障我们肯定不可能部署一个节点。Nacos服务分级存储模型:一级是服务;二级是集群,比如可以按区域机房划分集群,北京集群、上海集群、广州集群等等;三级是实例,例如北京机房的某台服务器部署的某服务。

杭州
上海
北京
实例
集群
实例
实例
集群
实例
实例
集群
实例
服务

6.2 Nacos 服务配置集群

  在 Nacos 注册的服务,如果没有配置集群的话,默认是没有集群的,也就是在一个名为 DEFAULT 的集群下,如下:

image

  我们可以在 Nacos 服务的配置文件中通过配置指定该服务的集群,只需在配置文件比如 application.yml 中添加 spring.cloud.nacos.discovery.cluster-name 属性即可,如下:

spring:
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: http://localhost:8848 # nacos服务地址
      discovery:
        cluster-name: HZ # 配置集群名称,例如:HZ,代指杭州集群

此时,注册在 Nacos 中的服务可以看到它的集群名称就是我们配置的集群名称,如下:

image

  在服务互相调用时我们应该尽可能地去选择本地集群,即同一集群的服务,因为跨集群调用延迟较高,只有当本地集群的需调用的服务不可访问时,再去访问其它集群。如下所示:

上海
北京
order-service
order-service
order-service
order-service
order-service
order-service
order-service
order-service

  但是使用 Spring Cloud 在 Nacos 中注册的服务,默认的负载均衡策略是轮询,也就是会轮询各个服务,不会区别是否同一集群。我们可以通过配置负载均衡策略来使得调用服务时优先选择同一集群的服务。假设 order-service 和 user-service 两种服务在各个集群中都有实例存在,而我们想要配置在 order-service 中调用 user-service 服务的接口时,优先选择同一集群的服务,只需在 order-service 服务中设置负载均衡的 IRule 为 NacosRule ,如下

userservice:    #指定给某个目标服务发起请求时的负载均衡规则,这里是目标服务的服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  #负载均衡规则

  NacosRule 负载均衡策略会优先寻找与自己在同一集群的服务,只有在同一集群中找不到服务提供者,才去其它集群寻找,并且当使用了其他集群的服务时,服务消费者中会提示警告信息。如果一个集群中的服务提供者有多个实例,则会使用随机调用的策略。

6.3 配置实例的权重

  当配置了优先访问同一集群内的服务时,在同一集群内如果有多个服务提供者实例的话,此时会使用随机访问的策略。当有时候,服务器设备之间的性能是有差异,部分实例所在的机器性能较好,另一些较差,我们可能会希望性能好的机器能承担更多的用户请求,而 Nacos 也提供了权重配置来让我们控制实例的访问频率,权重越大则访问频率越高。

  我们可以在 Nacos 的控制台中设置实例的权重值,点击实例后面的编辑按钮,弹出窗口可以设置权重值,如下图所示。所有的实例的权重值默认都是1,我们可以将将权重值设置为 0~1,权重越低,被访问到的概率就越低,为 0 时则完全不会被访问到。

image

七、小结

把今天最好的表现当作明天最新的起点..~

image

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA 第十四讲 分频器--偶分频

时间:2024.12.14 时钟对于 FPGA 是非常重要的,但板载晶振提供的时钟信号频率是固定的,不一定满足工程需求,所以使用分频或倍频产生需要的时钟是很有必要的。 一、学习内容 1.分频器 分频器是数字系统设计中最常见的基本电路之一。所谓“分频”,就是把输入信号的频率变成…

Linux:Git

Git常见指令&#xff1a; git help xx_command git xx_command --help git --version 查看git版本git config --global user.name "xxx_name" 全局级别的签名设置&#xff0c;全局的放在本用 git config --global user.ema…

如何使用aws的bedrock训练适合自己的模型

使用 Amazon Bedrock 训练适合自己的模型是一个涉及多个步骤的过程&#xff0c;包括数据准备、模型选择、训练和部署。以下是九河云总结的详细的步骤指南&#xff0c;帮助您在 AWS Bedrock 上训练和部署自定义模型。 ### 1. **准备工作** 在开始训练模型之前&#xff0c;您需…

30.攻防世界unserialize3

进入场景 解读一下 这个类 xctf 中有一个公共属性 $flag &#xff0c;其值为 111 &#xff0c;并且定义了一个 __wakeup 魔术方法&#xff0c;当对象被反序列化时会自动调用该方法&#xff0c;该方法会输出 bad requests 并终止程序的执行。 ?code提示了参数 <?php clas…

PWM调节DCDC参数计算原理

1、动态电压频率调整DVFS SOC芯片的核电压、GPU电压、NPU电压、GPU电压等&#xff0c;都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS&#xff08;Dynamic Voltage and Frequency scaling&#xff09;&#xff0c;优化性能和功耗。 比如某SOC在…

Python爬虫之Selenium的应用

【1】Selenium基础介绍 1.什么是selenium&#xff1f; &#xff08;1&#xff09;Selenium是一个用于Web应用程序测试的工具。 &#xff08;2&#xff09;Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 &#xff08;3&#xff09;支持通过各种driv…

DocFlow票据AI自动化处理工具:出色的文档解析+抽取能力,提升企业文档数字化管理效能

目录 财务应付 金融信贷业务 近期&#xff0c;DocFlow票据自动化产品正式上线。DocFlow是一款票据AI自动化处理工具&#xff0c;支持不同版式单据智能分类扩展&#xff0c;可选功能插件配置流程&#xff0c;满足多样业务场景。 随着全球化与信息化进程&#xff0c;企业的文件…

Python高性能web框架-FastApi教程:(3)路径操作装饰器方法的参数

路径操作装饰器方法的参数 1. 定义带有参数的POST请求路由 app.post(/items,tags[这是items测试接口],summary这是items测试的summary,description这是items测试的description,response_description这是items测试的response_description) def test():return {items: items数据…

Visual Studio Community安装WebForm创建和数据连接

目录 一、安装Visual Studio Community 1.下载Visual Studio Community 2.双击安装 3.配置 二、项目创建 1.创建新项目 2.配置新项目 3.创建web窗体 4.代码分部 5.文件打开问题 三、数据库访问 1.自己先装一个sql server 2.创建实体数据模型 3.创建连接 4.修改更…

【flutter】webview下载文件方法集锦

说明&#xff1a;android的webview是不支持下载的&#xff01;&#xff01;&#xff01; 所以我们需要监听下载接口 然后手动执行下载操作&#xff0c;分为三种类型 直接打开浏览器下载&#xff08;最简单&#xff09;&#xff0c;但是一些下载接口需要cookie信息时不能满足 …

一行一行出字的视频怎么做?简单的操作方法

在视频制作中&#xff0c;逐行出现的字幕效果不仅能够增强视觉冲击力&#xff0c;还能让观众更加专注于内容&#xff0c;特别适合用于教育视频、书单推荐、诗歌朗诵等多种场景。下面&#xff0c;我们将详细介绍如何影忆&#xff0c;来制作这种逐行出字的视频效果。 1.字幕逐行…

专题三:简单多状态 dp 问题

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是记忆化搜索&#xff0c;并且掌握记忆化搜索算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早…

海外组网之优解:外贸 SD-WAN 跨境组网专线赋能企业全球互联

在全球化商业进程中&#xff0c;众多企业积极拓展海外业务&#xff0c;设立国内外分支&#xff0c;然而分支组网难题也随之而来。外贸 SD-WAN 跨境专线成为解决此类问题的优选方案&#xff0c;为企业提供高效稳定的网络连接。 一、SD-WAN 跨境组网专线优势 &#xff08;一&…

【机器人】轨迹规划 之 spline 规划

在轨迹规划中&#xff0c;使用 spline &#xff08;通常是指通过样条曲线进行轨迹规划&#xff09;可以实现平滑、连续的路径。以下是使用样条&#xff08;如B样条、三次样条插值&#xff09;的具体方法和步骤&#xff0c;结合一个简单的例子说明&#xff1a; 示例场景&#xf…

Python生成对抗神经网络GAN预测股票及LSTMs、ARIMA对比分析ETF金融时间序列可视化

全文链接&#xff1a;https://tecdat.cn/?p38528 本文聚焦于利用生成对抗网络&#xff08;GANs&#xff09;进行金融时间序列的概率预测。介绍了一种新颖的基于经济学驱动的生成器损失函数&#xff0c;使 GANs 更适用于分类任务并置于监督学习环境中&#xff0c;能给出价格回…

【渗透测试】信息收集二

其他信息收集 在渗透测试中&#xff0c;历史漏洞信息收集是一项重要的工作&#xff0c;以下是相关介绍&#xff1a; 历史漏洞信息收集的重要性 提高效率&#xff1a;通过收集目标系统或应用程序的历史漏洞信息&#xff0c;可以快速定位可能存在的安全问题&#xff0c;避免重复…

【泛微系统】流程发起次数报表

流程发起次数报表 应用场景: 查询所有发起过业务流程的员工的信息,可作为绩效考核、系统使用情况等依据; 如何使用该SQL生成系统在线报表,实时查询最新的发起数据? 1、数据库创建视图,并定义一个视图名称如;view_test1 2、系统后台建模引擎-表单-右键创建一个虚拟表单…

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat&#xff0c;到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案&#xff1a; 理解需求&#xff1a;按服务分离日志索引 在 Kubernetes 集群中&#xff0c;有web-oper和web-api两种微服务&#xff0c;希…

【LeetCode】2406、将区间分为最少组数

【LeetCode】2406、将区间分为最少组数 文章目录 一、数据结构-堆、贪心1.1 数据结构-堆、贪心1.2 多语言解法 二、扫描线2.1 扫描线 一、数据结构-堆、贪心 1.1 数据结构-堆、贪心 题目已知一些区间, 需要尽量合并, 使 组 最少. 可以用图解画一下 因为尽量合并, 为了紧凑, …

【现代服务端架构】传统服务器 对比 Serverless

在现代开发中&#xff0c;选择合适的架构是至关重要的。两种非常常见的架构模式分别是 传统服务器架构 和 Serverless。它们各有优缺点&#xff0c;适合不同的应用场景。今天&#xff0c;我就带大家一起对比这两种架构&#xff0c;看看它们的差异&#xff0c;并且帮助你选择最适…