微服务详细教程之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文件。

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文件

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和分布式事务。尽量做到详细。

相关推荐
逻极1 分钟前
Spring Boot 微服务开发提速:我们如何将接口响应时间降低60%
java·spring boot·微服务·性能优化·自动配置
Swift社区4 分钟前
鸿蒙 PC 正在诞生“第二操作系统”:Agent Runtime 架构揭秘
华为·架构·harmonyos
典学长编程17 分钟前
Redis分布式缓存超详细教学(微服务版)!
redis·微服务·持久化·主从复制·redis哨兵集群
zlinear数据采集卡36 分钟前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
AINative软件工程38 分钟前
LLM 应用的 Schema 演进工程:structured output 字段改了,下游为什么炸了?
后端·python·架构
触底反弹1 小时前
面试官问"Ajax原理",我从XHR讲到async/await,他直接懵了!
前端·面试·架构
前端不太难1 小时前
Agent First:鸿蒙 App 的下一代 AI Runtime 架构
人工智能·架构·harmonyos
码云骑士1 小时前
22-接手Django老项目(下)-读懂urls路由树与架构脉络
python·架构·django
2601_961963381 小时前
React对比Vue对比Angular:构建企业级合同签署平台深度评测
java·微服务·架构
王二端茶倒水1 小时前
智慧公寓网络运营:从入住开通到退租停用
运维·物联网·架构