DAY01-微服务

文章介绍了微服务的概念,对比了单体架构和分布式架构的优缺点。接着详细讲解了微服务的特性,如单一职责、面向服务和自治。重点讨论了SpringCloud作为微服务框架的角色,以及Eureka作为注册中心的工作机制。此外,提到了Nacos作为服务注册与发现的新选择,包括其服务分级存储模型、负载均衡策略和环境隔离功能,并对比了Eureka与Nacos的区别。

         认识微服务:什么是微服务?

                单体架构:单体架构是将项目的所有功能集中在一个项目中开发,打成一个包部署。

                单体架构的优点:
                        1.架构简单
                        2.部署的成本低

                单体架构的缺点:
                        1.耦合度高,未来那天修改了代码,可能会导致相关的功能出现

                分布式架构:分布式架构是对项目结构进行拆分,独立开发,每一个功能都对应一个项目,称为一个服务。

                分布式架构的优点:
                        1.降低了代码的耦合度,我们修改代码的时候不会对其他功能产生影响。
                        2.有利于以后对服务升级拓展新的功能

                分布式架构要考虑的问题:
 

         微服务:

                微服务是经过良好架构设计的分布式架构方案,微服务架构的特征:
                        1.单一职责:微服务拆分的力度小,每一个服务对应一个业务能力,做到单一职责,避免重复业务开发。
                        2.面向服务:微服务对外暴露业务接口。
                        3.自治:        团队独立,技术独立,数据独立,部署独立。
                        4.隔离性强:服务调用做好隔离,容错,降级,避免出现级联问题。
                

 两个不同架构的特点:
        单层架构:简单方便,高度耦合,扩展性差,适合小型的项目。
        分布式架构:低耦合,扩展性好,但架构比较复杂,难度大,适合大型互联网项目
        微服务: 
                优点:拆分力度更小,服务更独立,耦合度更低
                缺点:架构非常复杂,运维,监控,部署难度提高

                
 


微服务技术对比:
        

 

 


SpringCloud:
        1.SpringCloud是目前国内使用最广泛的微服务框架。
        2.SpringCloud集成了各种微服务功能的组件。并基于SpringBoot实现了这些组件的自动装配,从而提高了良好的体验。
 

服务拆分注意事项:
        

 

微服务调用方式:
        1.基于RestTemplate发起的http请求实现远程调用
        2.http请求做远程调用是与语言无关的调用,只要知道对方的ip,端口,接口路径,请求参数即可。

提供者与消费者:
        服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)
        服务消费者:一次业务中,调用其他微服务的服务。
一个服务可以同时扮演提供者和消费者。


注册中心(Eureka):
        远程调用的问题:
                1.服务消费者该怎么获取到服务提供者的地址信息
                2.如果有多个服务提供者,消费者该如何选择
                3.消费者如何得知服务提供者的健康状态

 Eureka的作用:

 

 在Eureka架构中,微服务角色有两类:
        EurekaServer:服务端,注册中心
                1.记录服务信息
                2.心跳监控
        EurekaCliont:客户端
                1.Provider:服务提供者:
                        1.1:注册自己的信息到EurekaServer
                        1.2:每隔一段时间向EurekaServer发送心跳
                2.consumer:服务消费者
                        2.1:根据服务名称从EurekaServer中拉取服务列表
                        2.2:基于服务列表做负载均衡,选中一个微服务后发起远程调用

搭建注册中心:
        1.引入eureka-server依赖
        2.添加@EnableEurekaServer注解
        3.在配置文件中配置eureka地址



 

服务注册:
        1.引入eureka-client依赖
        2.在配置文件中配置eureka地址

 

 服务发现:
        1.引入eureka-cilient依赖
        2.配置eureka地址
        3.给RestTemplate添加@LoadBalanced注解
        4.用服务者提供的服务名称实现远程调用

 


Ribbon负载均衡
        

 策略:Ribbon的负载均衡是使用IRule的接口来定义的,下面的每一个子接口都是一种规则。

 

 

 


 Nacos注册中心:Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
        

 

 

 

1. Nacos 服务分级存储模型
一级是服务,例如 userservice
二级是集群,例如杭州或上海
三级是实例,例如杭州机房的某台部署了 userservice 的服务器
2. 如何设置实例的集群属性
修改 application.yml 文件,添加 spring.cloud.nacos.discovery.cluster -name 属性即可

 

1. NacosRule 负载均衡策略
优先选择同集群服务实例列表
本地集群找不到提供者,才去其它集群寻找,并且会报警告
确定了可用实例列表后,再采用随机负载均衡挑选实例
1. 实例的权重控制
Nacos 控制台可以设置实例的权重值, 0~1 之间
同集群内的多个实例,权重越高被访问的频率越高
权重设置为 0 则完全不会被访问

 

1. Nacos 环境隔离
每个 namespace 都有唯一 id
服务设置 namespace 时要写 id 而不是名称
不同 namespace 下的服务互相不可见
 

 Eureka与Nacos的区别:

1. Nacos eureka 的共同点
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
2. Nacos Eureka 的区别
Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos 集群默认采用 AP 方式,当集群中存在非临时实例时,采用 CP 模式; Eureka 采用 AP 方式

 

### 黑马头条 Day7 用户微服务启动失败的原因分析 #### 可能原因一:Feign 调用超时或阻塞 如果在调用百度云进行文章审核的过程中,`feign` 的跨服务调用出现了阻塞,则可能导致前端用户体验受到影响[^1]。这种情况可能是因为 `feign` 默认的连接和读取超时时间过短,无法满足实际需求。 #### 解决方案一:调整 Feign 配置参数 可以通过修改 Nacos 中的服务配置文件来设置更合理的超时时间。例如,在 wemedia 的 nacos 配置中心中添加以下内容: ```yaml feign: hystrix: enabled: true # 开启 feign 对 Hystrix 熔断降级的支持 client: config: default: connectTimeout: 5000 # 设置连接超时时间为 5 秒 readTimeout: 8000 # 设置读取超时时间为 8 秒 ``` 通过上述方式可以有效减少因网络延迟或其他外部因素导致的调用失败问题[^5]。 --- #### 可能原因二:Spring Cloud Gateway 配置错误 微服务之间的通信通常依赖于 Spring Cloud Gateway 实现 API 请求路由、流量控制以及熔断处理等功能[^2]。如果网关未正确配置或者服务注册出现问题,则可能会导致整个用户微服务不可用。 #### 解决方案二:检查并修复网关配置 确认 `AppGatewayApplication` 是否已正确定义,并且是否开启了服务发现功能。以下是该引导类的标准定义形式: ```java package com.heima.app.gateway; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient // 开启注册中心支持 public class AppGatewayApplication { public static void main(String[] args) { SpringApplication.run(AppGatewayApplication.class, args); } } ``` 确保此应用能够成功运行并与 Eureka 或其他服务注册中心正常交互[^4]。 --- #### 可能原因三:接口实现逻辑异常 假设存在某些业务逻辑上的缺陷,比如 `ApUnlikesBehaviorService` 接口方法未能按预期返回数据结构,也可能引发启动过程中的异常情况[^3]。 #### 解决方案三:验证接口实现细节 仔细审查 `unlike()` 方法的具体实现部分是否存在潜在隐患。例如,输入参数校验不足、数据库操作失误等问题均需逐一排查。 --- ### 总结 综上所述,针对当前描述的现象可以从以下几个方面入手解决问题: 1. **优化 Feign 客户端性能表现**; 2. **重新审视 Spring Cloud Gateway 的部署状态及其关联组件健康状况**; 3. **深入剖析具体业务层代码质量保障措施落实到位与否**; 最终目的是让各个模块协同工作顺畅无误从而顺利完成项目目标!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值