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

相关推荐
jwolf22 小时前
基于K8S的微服务:一、服务发现,负载均衡测试(附calico网络问题解决)
微服务·kubernetes·服务发现
Yvemil73 小时前
《开启微服务之旅:Spring Boot Web开发举例》(二)
前端·spring boot·微服务
向阳12184 小时前
sentinel来源访问控制(黑白名单)
java·sentinel
bohu834 小时前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口
腾讯云开发者5 小时前
AI时代,需要怎样的架构师?腾讯云架构师峰会来了!
架构
Yvemil76 小时前
《开启微服务之旅:Spring Boot Web开发》(三)
前端·spring boot·微服务
bohu836 小时前
sentinel学习笔记5-资源指标数据统计
笔记·sentinel·statisticslot
Java程序之猿7 小时前
微服务分布式(二、注册中心Consul)
分布式·微服务·consul
Hello Dam7 小时前
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
spring cloud·微服务·云原生·架构·gateway·登录验证·单点登录