spring cloud alibaba 一
spring cloud Alibaba
Spring Cloud阿里为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序。
使用Spring Cloud阿里,您只需要添加一些注释和少量配置,就可以将Spring Cloud应用连接到阿里的分布式解决方案上,并使用阿里中间件构建一个分布式应用系统
Nacos
Nacos(NAming COnfiguration Service):服务注册和配置中心
Nacos = Eureka + Config + Bus
Nacos概念
- 地域 (Region)
物理的数据中心,资源创建成功后不能更换。
- 可用区(Available Zone)
同一地域内,电力和网络互相独立的物理区域。同一可用区内,实例的网络延迟较低。
- 接入点(Endpoint)
地域的某个服务的入口域名。
- 命名空间(Namespace)
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
- 配置 (Configuration)
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
- 配置管理 (Configuration Management)
系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。
- 配置项 (Configuration Item)
一个具体的可配置的参数与其值域,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。
- 配置集 (Configuration Set)
一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
- 配置集 ID(Data ID)
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
- 配置分组(Group)
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
- 配置快照 (Configuration Snapshot)
Nacos 的客户端 SDK 会在本地生成配置的快照。当客户端无法连接到 Nacos Server 时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于 Git 中的本地 commit,也类似于缓存,会在适当的时机更新,但是并没有缓存过期(expiration)的概念。
- 服务(Service)
通过预定义接口网络访问的提供给客户端的软件功能。
- 服务名(Service Name)
服务提供的标识,通过该标识可以唯一确定其指代的服务。
- 服务注册中心(Service Registry)
存储服务实例和服务负载均衡策略的数据库。
- 服务发现(Service Discovery)
在计算机网络上,(通常使用服务名)对服务下的实例的地址和元数据进行探测,并以预先定义的接口提供给客户端进行查询。
- 元信息(Metadata)
Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。
- 应用(Application)
用于标识服务提供方的服务的属性。
- 服务分组(Service Group)
不同的服务可以归类到同一分组。
- 虚拟集群(Virtual Cluster)
同一个服务下的所有服务实例组成一个默认集群, 集群可以被进一步按需求划分,划分的单位可以是虚拟集群。
- 实例(Instance)
提供一个或多个服务的具有可访问网络地址(IP:Port)的进程。
- 权重(Weight)
实例级别的配置。权重为浮点数。权重越大,分配给该实例的流量越大。
- 健康检查(Health Check)
以指定方式检查服务下挂载的实例 (Instance) 的健康度,从而确认该实例 (Instance) 是否能提供服务。根据检查结果,实例 (Instance) 会被判断为健康或不健康。对服务发起解析请求时,不健康的实例 (Instance) 不会返回给客户端。
- 健康保护阈值(Protect Threshold)
为了防止因过多实例 (Instance) 不健康导致流量全部流向健康实例 (Instance) ,继而造成流量压力把健康 健康实例 (Instance) 压垮并形成雪崩效应,应将健康保护阈值定义为一个 0 到 1 之间的浮点数。当域名健康实例 (Instance) 占总服务实例 (Instance) 的比例小于该值时,无论实例 (Instance) 是否健康,都会将这个实例 (Instance) 返回给客户端。这样做虽然损失了一部分流量,但是保证了集群的剩余健康实例 (Instance) 能正常工作。
Nacos功能
服务限流降级
服务注册与发现
消息驱动能力
分布式事务
阿里云对象存储
分布式任务调度
阿里云短信服务
Nacos组件
- Sentinel
把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- Nacos
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- RocketMQ
一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo
Apache Dubbo™ 是一款高性能 Java RPC 框架。
- Seata
阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Alibaba Cloud OSS
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
- Alibaba Cloud SchedulerX
阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
- Alibaba Cloud SMS
覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道
以上信息来源于官网
注册中心对比
服务注册与服务框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP高可用 | 支持 | 低(2.x版本闭源) |
Zookeeper | CP一致 | 支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP+CP | 支持 | 高 |
acos切换 AP 和 CP模式
1 | curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP' |
nacos下载以及使用
https://github.com/alibaba/nacos/releases
下载之后进入bin目录运行
1 | startup.cmd -m standalone |
运行成功即可访问http://localhost:8848/nacos/index.html
默认账号密码都是nacos
注册中心搭建
provider模块
- 父模块pom
1 | <parent> |
- pom
1 | <!--SpringCloud Alibaba nacos--> |
- application.yml
1 | server: |
- controller
1 | @RestController |
- app
1 | @SpringBootApplication |
相同方式再创建一个provider
consumer模块
- pom
1 | <dependencies> |
- application.yml
1 | server: |
- config
1 | @Configuration |
- opfeign
1 | @FeignClient("nacos-provider") |
- controller
1 | @RestController |
- app
1 | @SpringBootApplication |
配置中心搭建
- pom
1 | <dependencies> |
- application.yml
1 | spring: |
- bootstrap.yml
1 | server: |
- controller
1 | @RestController |
- app
1 | @SpringBootApplication |
集群和持久化配置
持久化
nacos是存到临时的文件夹目录中的,所以需要持久化,持久化到DB中
- 修改application.properteis配置文件
1 | spring.datasource.platform=mysql |
集群
需要环境
64 bit OS Linux/Unix/Mac 推荐Linux系统
64 bit JDK 1.8+
Maven 3.2.x+
mysql 8.0
3个或3个以上Nacos节点才能构成集群
- 解压
1 | tar -zxvf nacos-server-2.0.4.tar.gz |
- 修改cluster.conf文件,添加服务器地址
1 | #example |
然后复制3出来设置不同端口模拟多台服务器
修改启动参数
vim startup.sh
1 | JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn64m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" |
修改成这个样子,但是如果你虚拟机分配的内存够用也不用修改,我的分配的不够,电脑配置有点拉
- bin目录启动
1 | sh startup.sh |
Nginx做负载均衡
修改配置文件
1 | #gzip on; |
server { listen 5555;
端口号也改下
启动nginx即可完成
正确的开始 微小的长进 然后持续 嘿 我是小博 带你一起看我目之所及的世界……
发布时间:2022年10月30日 - 19:20
最后更新:2022年10月30日 - 19:22
原始链接:https://codexiaobo.github.io/posts/668782996/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。