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