SpringCloudAlibaba 主要功能 与 实现组件

(1)SpringCloudAlibaba 主要功能 与 实现组件

【功能与实现组件:】
服务限流降级:
基本说明:
默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,
可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
实现组件:
Sentinel: 把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 服务注册与发现:
基本说明:
适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
实现组件:
Nacos: 一个更易于构建云原生应用的动态服务发现和服务管理平台。 分布式配置管理:
基本说明:
支持分布式系统中的外部化配置,配置更改时自动刷新。
实现组件:
Nacos: 一个更易于构建云原生应用的配置管理平台。 消息驱动能力:
基本说明:
基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
实现组件:
RocketMQ: 一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。 分布式事务:
基本说明:
使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
实现组件:
Seata: 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。 阿里云对象存储:
基本说明:
阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
实现组件:
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。 分布式任务调度:
基本说明:
提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。
实现组件:
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。 阿里云短信服务:
基本说明:
覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。
实现组件:
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

(2)开发中常使用的技术搭配

【开发中使用的技术:】
在平时开发中使用的技术搭配,我一般采用一下方案:
SpringCloud:
OpenFeign: 声明式 HTTP 客户端(即 远程服务调用)。
Ribbon: 负载均衡(OpenFeign 中已集成,无需单独引入)。
Gateway: API 网关。
Sleuth: 分布式链路追踪(即 请求调用链监控)。 SpringCloudAlibaba:
Nacos: 注册中心 以及 配置中心(即 服务注册、发现 以及 动态配置管理)。
Sentinel: 服务容错(即限流、降级、熔断)。
Seata: 解决分布式事务。 注:
通过前面几篇博客的学习,知道了 OpenFeign、Ribbon、Sleuth、Sentinel 相关操作。
OpenFeign、Ribbon 相关操作详见:https://www.cnblogs.com/l-y-h/p/14238203.html
Sleuth 相关操作详见:https://www.cnblogs.com/l-y-h/p/14447473.html#_label4
Sentinel 相关操作详见:https://www.cnblogs.com/l-y-h/p/14364167.html#_label2

情景再现:


在阿里云服务器上,想使用 docker-compose 一次性启动三个 Nacos Server 以及 mysql,结果一直启动失败。
坑一:
nacos-mysql:8.0.16 无法启动,更换成 nacos-mysql:5.7 之后正常启动。
但若 nacos-mysql:8.0.16 是事先就启动好的(即不跟随 Nacos Server 启动),那么连接是正常的。
为什么会出现这种情况,没有仔细研究,此处仅简单记录一下可能存在的问题。 坑二:
访问 http://120.26.184.41:8850/nacos,可以成功登录进去。
但点击 “集群管理” =》 “节点列表”,依次点击 “节点元数据”,可以发现其 "state" 均为 "CANDIDATE"。
即 集群中三个节点 并未选举成功,未成功选举出 LEADER、FOLLOWER。 坑三:
集群节点 "state" 均为 "FOLLOWER",没有 "LEADER"。选举仍然失败。
出现了 8848 端口,貌似其被选择为 LEADER。 坑四:
当前觉得你的配置没有问题了,但是 选举依然失败,这边建议你更换一下镜像看看。
此处 nacos/nacos-server:1.4.1 选举总是失败,更换 nacos/nacos-server:1.3.0 之后没问题了。
具体原因没有深入研究,此处仅记录一下可能存在的问题。

S1:
  将 nacos-mysql:8.0.16 镜像替换为 nacos-mysql:5.7 后,重新启动即可。

S2:填坑记录二:
  若在控制台页面中,看见节点 “state” 均为 “CANDIDATE”。这是选举出问题了,可以查看 nacos 日志(naming-raft.log、nacos.log)。

【nacos.log 错误日志为:(如下两句语句循环出现)】
java.lang.IllegalStateException: can not find peer: 172.22.0.3:8848
java.lang.IllegalStateException: can not find peer: 172.22.0.5:8848 【naming-raft.log 错误日志为:】
ERROR NACOS-RAFT vote failed: 500, url: http://120.26.184.41:8850/nacos/v1/ns/raft/vote
ERROR NACOS-RAFT vote failed: 500, url: http://120.26.184.41:8851/nacos/v1/ns/raft/vote
WARN [IS LEADER] no leader is available now! 【分析:】
通过 nacos.log 的 ip 地址,可以猜测当前 nacos 读取到的是内网 IP。
而集群列表中不存在这个 IP,所以无法连接到其余 节点(无法通信),进而选举失败。 【解决:】
既然获取不到 IP 地址,那就手动输入 IP 地址。
在环境变量中,通过 NACOS_SERVER_IP 指定当前主机的 IP 即可。
比如: - NACOS_SERVER_IP=120.26.184.41

S3:填坑记录三
  通过上面截图,可以看到三个节点状态均从 "CANDIDATE" 变为了 "FOLLOWER",为什么没有选举出 "LEADER"?

【查看 naming-raft.log 日志如下:】
2021-03-25 17:45:09,770 INFO received approve from peer: {"ip":"120.26.184.41:8848","voteFor":"120.26.184.41:8848","term":9,"leaderDueMs":18440,"heartbeatDueMs":2000,"state":"FOLLOWER"}
2021-03-25 17:45:09,772 INFO received approve from peer: {"ip":"120.26.184.41:8848","voteFor":"120.26.184.41:8848","term":9,"leaderDueMs":18531,"heartbeatDueMs":5000,"state":"CANDIDATE"}
2021-03-25 17:45:09,788 INFO received approve from peer: {"ip":"120.26.184.41:8848","voteFor":"120.26.184.41:8848","term":9,"leaderDueMs":18671,"heartbeatDueMs":5000,"state":"FOLLOWER"}
2021-03-25 17:45:15,001 WARN [IS LEADER] no leader is available now!
2021-03-25 17:45:28,123 INFO vote 120.26.184.41:8848 as leader, term: 10 【分析:】
通过日志可以看到貌似 120.26.184.41:8848 这个东西被选为了 LEADER,
而实际上 我开放的是 8849、8850、8851 三个端口,但是这三个端口并没有被访问。 【解决:】
默认端口号为 8848。既然获取不到端口,那就手动设置端口。
在环境变量中,通过 NACOS_APPLICATION_PORT 指定当前主机需要访问的端口即可。
修改 NACOS_APPLICATION_PORT 后,端口映射 ports 也需要修改。
比如:
environment:
- NACOS_APPLICATION_PORT=8851
ports:
- 8851:8851

(4)连接 Nacos 集群
  在 Nacos Client 配置文件中,直接通过 server-addr 设置节点地址即可,多个节点之间可使用 逗号 隔开。
  若使用 Nginx 做代理,则 server-addr 设置 Nginx 访问地址即可。
  Nginx 在 Nacos 真集群版中使用(请继续往下看)。

【比如:】
spring:
cloud:
nacos:
discovery:
server-addr: 120.26.184.41:8849,120.26.184.41:8850,120.26.184.41:8851
config:
server-addr: 120.26.184.41:8849,120.26.184.41:8850,120.26.184.41:8851 【bootstrap.yml】
server:
port: 7100 spring:
application:
name: nacos-client-config
cloud:
nacos:
discovery:
# 配置 nacos server 地址(作为注册中心)
# server-addr: 120.26.184.41:8848
server-addr: 120.26.184.41:8849,120.26.184.41:8850,120.26.184.41:8851
config:
# 配置 nacos server 地址(作为配置中心)
# server-addr: 120.26.184.41:8848
server-addr: 120.26.184.41:8849,120.26.184.41:8850,120.26.184.41:8851
# 设置配置文件前缀,默认为 ${spring.application.name}
prefix: ${spring.application.name}
# 设置配置文件后缀名
file-extension: yml
shared-configs[0]:
data-id: test-0-dev.yml
shared-configs[1]:
data-id: test-1-dev.yml
shared-configs[2]:
data-id: test-2-dev.yml
group: DEFAULT_GROUP
refresh: true

SpringCloudAlibaba 主要组件与nacos 填坑记录的更多相关文章

  1. webapp填坑记录[更新中]

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  2. webapp填坑记录

    网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...

  3. Phoenix踩坑填坑记录

    Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...

  4. Kafka踩坑填坑记录

    Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...

  5. Linux踩坑填坑记录

    Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...

  6. F2eTest和uirecorder自动化测试环境部署填坑记录

    坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示. 填坑:需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重 ...

  7. 微信小程序发送红包功能。填坑记录

    微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...

  8. MVC5项目转.Net Core 2.2学习与填坑记录(1)

    流程都是自己摸索,错误地方随便指正... 老项目过于臃肿,并且所有请求都是提交到一个api中,这样当api挂掉的时候,基本所有的项目都瘫痪掉了. 在4月底的时候,下决心将项目用微服务进行重写,刚开始的 ...

  9. 微信小程序开发技巧及填坑记录

    以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add pag ...

  10. React Native工作小技巧及填坑记录

    以下是本人在React Native开发工作中使用的一些小技巧,记录一下. 1.从网络上拉取下来的React Native缺少React和React Native库. 终端 1. cd 项目根目录 2 ...

随机推荐

  1. Quartus Ⅱ调用FIFO IP核方法实现求和(Mega Wizard)

    摘要:本次实验学习记录主题为"FIFO_IP核实现算术求和",主要内容是上位机通过串口向FPGA发送一定规格的数字矩阵,FPGA对矩阵处理,按规定逻辑实现求和运算,将结果返回串口转 ...

  2. 流式查询1. mybatis的游标Cursor,分页大数据查询

    流式查询流式查询 指的是查询成功后不是返回一个集合而是返回一个迭代器,应用可以通过迭代器每次取一条查询结果.流式查询的好处是能够降低内存使用.例如我们想要从数据库取 1000 万条记录而又没有足够的内 ...

  3. LabVIEW之项目文件结构透析

    代码的管理非常重要,LabVIEW本身自带很多代码管理工具.下面来剖析一个相对标准的小项目:

  4. 学习Java的第一周总结

    经历了一周关于Java的学习后,我想已经初步了解了Java.在这一周中我跟随黑马程序员的脚步初步学习,现在已经安装了jdk环境(当然它不只是一个运行环境,还附带了许多开发工具)并能够用它输出" ...

  5. 强烈推荐:18.3k star,推荐一款简单易用的HTTP请求流量录制回放工具:Goreplay

    在软件开发和测试过程中,我们经常需要对应用程序的网络请求进行录制和回放,以便进行性能分析.压力测试或者模拟复杂的网络环境.今天,我要向大家推荐一款简单易用的 HTTP 请求流量录制回放工具:Gorep ...

  6. .NET跨平台UI框架Avalonia 11.1重磅发布

    本篇为译文 原文地址 https://avaloniaui.net/blog/avalonia-11-1-a-quantum-leap-in-cross-platform-ui-development ...

  7. Python版WGCNA分析和蛋白质相互作用PPI分析教程

    在前面的教程中,我们介绍了使用omicverse完成基本的RNA-seq的分析流程,在本节教程中,我们将介绍如何使用omicverse完成加权基因共表达网络分析WGCNA以及蛋白质相互作用PPI分析. ...

  8. 【SpringMVC】05 RestFul风格

    什么是RestFul风格? 一个资源定位和资源操作的风格,不是标准,也不是协议, 基于此风格的路径访问可以隐藏真实的参数传递,以提高网站的安全访问 以往的请求参数: jdbc:mysql://loca ...

  9. 突破单点瓶颈、挑战海量离线任务,Apache Dolphinscheduler在生鲜电商领域的落地实践

    ​ 点亮 ️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler 精彩回顾 近期,食行生鲜的数据平台工程师单葛尧在社区线上 ...

  10. 在线flex布局----自己写的一个flex布局的小玩意,需要的私聊加关注0.0