当前位置: 首页 > article >正文

微服务详细教程之nacos和sentinel实战

前言

  上一篇文章中已经介绍了java的高并发编程中的问题,现在主要介绍微服相关的问题,其中在网上面经中经常出现的几个微服问题。这也是我们工作中经常遇到的几个问题。

一.微服务有哪些好处?

  微服务优点很多,但是我们通常说一个东西好肯定会跟另一个东西比较, 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处:
在这里插入图片描述
  首先,让我们讨论单体项目的主要一些缺陷:
  单体项目的缺陷:
  1.可扩展性受限: 单体应用通常在可扩展性方面受到限制,因为整个应用程序必须一起扩展。这意味着即使只有一个组件需要更多资源,也必须扩展整个应用程序,这可能会导致资源浪费。
  2.难以维护和更新: 随着时间的推移,单体应用程序往往变得越来越庞大和复杂,难以理解、维护和更新。每次修改都可能引发意想不到的影响。
  3.高风险: 单体应用程序中的一个小错误或故障可能会导致整个应用程序崩溃,因此存在较高的风险。此外,长时间不更新的单体应用可能会受到安全威胁。
  4.技术栈限制:单体应用程序通常使用相同的技术栈,这可能会限制您在项目中使用最新的技术和工具的能力。
  5.团队协作复杂: 单体应用程序的所有组件都在一个代码库中,这可能导致开发团队之间的冲突和协作问题,尤其在大型团队中更为突出。
微服务的优点
  1.可扩展性: 微服务架构允许您根据需要独立地扩展单个服务,而不必扩展整个应用程序,这提供了更高的可扩展性。
  2.灵活性和快速开发: 微服务允许开发团队独立设计、开发和部署服务,这提高了灵活性、允许团队更快地推出新功能和更新。
在这里插入图片描述

二.微服服务组件的介绍

  本文文章基于Spring Cloud Alibaba的技术进行介绍,因为这也是市面上比较主流的,面试也会经常遇到。
  Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
  Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  Alibaba Cloud oss:阿里云对象存储服务(Object storage Serice,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  Alibaba Cloud schedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。

1.Nacos

1.1 基本架构及概念

  nacos的定义延用官方文档中的定义,服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
在这里插入图片描述

  nacos相关的更加详细的介绍,请参考官方文档,包括如何部署nacos,用什么方式部署,如docker,k8s等方式部署,通常情况下docker部署更加的经济一点吧。nacos官方文档
  SpringBoot集成于nacos组件具体如下所示。
  1.首先引入依赖,改pom.xml文件。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
</dependencies>

2.修改yaml文件

spring:
  profiles:
    # 指定环境
    active: dev
  application:
    name: demo
  cloud:
    # nacos server dataId
    # ${spring.application.name)}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
    nacos:
      # Nacos服务注册中心
      discovery:
        serverAddr: 172.16.2.246:8848
        group: DEMO_GROUP
        namespace: 25af15f3-ae79-41c3-847d-960adb953185
        username: nacos
        password: nacos
      # Nacos作为配置中心
      config:
        server-addr: 172.16.2.246:8848
        file-extension: yaml
        group: DEMO_GROUP
        namespace: 25af15f3-ae79-41c3-847d-960adb953185
        username: nacos
        password: nacos
        # 加载多配置
        extension-configs:
          - data-id: user.yaml
            group: DEMO_GROUP
            refresh: true

  nacos在电商平台的应用,每个业务模块的微服都注册成了一个域名,方便别的微服调用,如下所:
在这里插入图片描述
  其中nacos会给微服务发心跳,如果微服务每5s响应一次,nacos收到响应,就认为服务器还活着,这就是所谓的健康检测。
  远程服务调用Feign,具体调用如下,feign的相关的环境集成略过。
在这里插入图片描述
  然后调佣远端的微服,只需要加入Autowired注解就可以直接使用。
在这里插入图片描述

2.sentinel

  sentinel的主要特性如管网给定的特性介绍如下。
在这里插入图片描述
  首先说说服务降级的操作。
  集成SpringBoot环境,也是和上面nacos差不多,改pom.xml和yaml文件。
  修改pom.xml
在这里插入图片描述
  其中开启sentinel对Feign的支持
在这里插入图片描述
  其中服务降级的方法,如下图所示,首先常见方法获取异常后调用降级方法,用到的是java中try{}catch方法捕获异常,回调降级服务方法。
在这里插入图片描述

结束语

  由于文章过长,本文先结束,后面添加更加详细sentinel和分布式事务。尽量做到详细。


http://www.kler.cn/a/448154.html

相关文章:

  • 人工智能ACA(四)--机器学习基础
  • Qt之QML应用程序开发:给应用程序添加图标文件
  • Unity 3D饼状图效果
  • 使用 Docker 打包和运行 Vue 应用
  • Linux系统的阻塞方式和非阻塞方式是什么意思?
  • 【LeetCode】394、字符串解码
  • 机器学习(三)-多项式线性回归
  • 深入了解Java在人工智能领域的最新应用
  • 关系型数据库的完整性和一致性
  • C++初阶—类与对象(下篇)
  • 基于Socket实现客户端和服务端的Tcp通信(C#)
  • 18个AI变现案例分享,每一个都可以作为副业赚睡后收入!
  • Vue.js前端框架教程9:Vue插槽slot用法
  • Java基础复习(二):面向对象编程
  • Apache POI练习代码
  • cocos creator制作2dTop-down游戏(虚拟摇杆、地图加载)
  • UI自动化-八大元素定位方法
  • 如何利用Python爬虫获得1688商品详情
  • 基于单片机的程控电源显示控制电路设计
  • 抓包之使用wireshark抓http2的包
  • R语言读取hallmarks的gmt文档的不同姿势整理
  • 【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧
  • 在 C# 中播放系统声音:蜂鸣声、星号声、问号声等
  • sql注入之union注入
  • STM32完全学习——CRC校验
  • IP地址格式解析(ipv4)