前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务框架

微服务框架

作者头像
京剧猫
发布2023-03-04 11:26:22
4420
发布2023-03-04 11:26:22
举报
文章被收录于专栏:Pixel Fandom

1. Spring、Spring MVC以及SpringBoot的区别

  • Spring Spring的核心始终是IOCAOPIOC提供依赖注入的容器,AOP解决面向切面的编程,在二者基础上实现其他的功能
  • Spring MVC Spring MVC提供了一种分离式的方法来开发Web应用。通过运用像DispatcherServletModelAndView等简单的概念,简化Web应用的开发
  • SpringBoot SpringBoot通过自动配置类与启动项实现了自动装配,降低了项目搭建的复杂度

2. SpringBoot的优点
  1. 独立运行。其内嵌了各种servlet容器故只需要一个jar包便可以独立运行
  2. 简化配置。spring-boot-starter-web启动器自动依赖于其他组件,简化了maven的配置
  3. 自动配置。SpringBoot可以根据当前类路径下的类、jar包自动配置bean
  4. 无代码生成及xml配置。SpringBoot的配置借助于条件注解完成的
  5. 避免了大量的maven导入以及版本冲突
  6. 应用监测。SpringBoot提供了一系列端点可以监控服务及应用,进行健康检查

3. SpringBoot的启动过程

  1. SpringBoot启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration的指定值
  2. 将值作为自动配置类导入容器,自动配置类随即生效,整个J2EE的解决方案与自动配置都在springboot-autoconfigure的jar包中
  3. 其会给容器中导入相当多的自动配置类(xxxAutoConfiguration)

4. Spring Factories的机制

SpringBoot的自动配置是基于Spring Factories机制实现的。Spring Factories机制是SpringBoot中的一种服务发现机制,SpringBoot会自动扫描所有jar包路径下的META-INF/spring.factories文件,并读取其中的内容进行实例化,这也是SpringBoot Starter的基础


5. SpringBoot自动配置原理

注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass就是自动配置的核心。其中@EnableAutoConfiguration给容器导入META-INF/spring.factories里定义的自动配置类,每一个自动配置类结合对应的xxxProperties.java读取配置文件进行自动配置


6. SpringBoot的核心注解及其组成

核心注解为@SpringBootApplication,其由三个注解组成:

  1. @SpringBootConfiguration:组合了@configuration注解,实现了配置文件的功能
  2. @EnableAutoConfiguration:打开自动配置功能
  3. @ComponentScan:进行组件扫描

7. bootstrap.yml与application.yml的区别

二者都是SpringB的核心配置文件,其中:

  • bootstrap.yml由父ApplicationContext加载,优于application加载,配置在应用程序上下文的引导街道生效,一般用于SpringCloud Config或者是nacos,同时bootstrap中的属性不可被覆盖
  • application.yml由ApplicationContext加载,用于SpringBoot项目的自动配置

8. SpringBoot 配置文件的加载顺序

  1. config/application.properties
  2. config/application.yml
  3. application.properties
  4. application.yml
  5. resources/config/application.properties
  6. resources/config/application.yml
  7. resources/application.properties
  8. resources/application.yml

9. SpringBoot读取配置文件的方式

  1. 使用@value注解
  2. 使用@ConfigurationProperties注解将值绑定到一个对象
  3. 通过Environment进行获取

10. 微服务的优缺点

  • 优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模小。在开发中只需要专注于当前功能,便利集中,功能小而精。一个功能受损对其他功能影响不大,可以快速定位问题,不会与html和css等界面混合,搭配灵活。
  • 缺点:随服务数量增加,管理复杂,部署复杂,服务器需求量大,服务通信和调用压力大,系统依赖性增强。

11. SpringCloud的概念

SpringCloud是一系列框架的有序集合,它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务注册与发现、配置中心、消息总线、负载均衡、断路器、数据监控等


12. SpringCloud的优点

单体架构的项目随业务的发展会越来越复杂,可能会出现代码结构混乱开发效率低排查解决问题成本高等问题,因而近年来微服务架构逐步取代了单体架构,而SpringCloud是目前最常用的微服务开发框架,已经在企业级开发中有了大量的应用


13. SpringCloud与SpringBoot的区别

  • SpringBoot专注于快速方便的开发单个个体微服务
  • SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整理并管理,为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线等集成服务

14. SpringCloud的组成组件

  • Eureka/Nacos:服务注册与发现
  • Zull/SpringCloud Gateway:服务网关
  • Ribbon:客户端负载均衡
  • Feign:声明性的Web服务客户端
  • Hystrix:断路器
  • SpringCloud Config/N按从事:分布式统一配置管理

15. Eureka和ZooKeeper的区别

  • ZooKeeper中的节点服务挂掉会进行重新选举,在选举期间注册服务瘫痪;Eureka各个节点平等,只要有一台Eureka就可以保证服务可用
  • ZooKeeper本质上是一个进程;Eureka本质是一个工程
  • ZooKeeper保证的是CP;Eureka保证的是AP

16. Eureka工作原理

  • EurekaServer(服务注册中心)对外暴露自己的地址
  • 提供者启动后向Eureka注册自身信息
  • 消费者向Eureka订阅服务,Eureka将对应服务的所有提供者地址列表发送给消费者并定期更新
  • 心跳续约:提供者定期通过HTTP方式向Eureka刷新自身状态

17. Feign工作原理

  1. 主程序入口添加@EnableFeignClients注解开启对FeignClient扫描加载处理。根据FeignClient开发规范,定义接口并添加@FeignClientd注解
  2. 当程序启动时进行包扫描,扫描所有带有@FeignClients注解的类,并将信息注入到Spring IOC容器中,当定义的Feign接口中的方法被调用时,通过JDK的代理方式生成具体的RequestTemplate
  3. 生成代理时,Feign会为每个接口方法创造一个RequestTemplate对象,该对象封装HTTP请求需要的全部信息
  4. RequestTemplate生成Request,然后将Request交给Client处理,最后Client被封装到LoadBalanceClient类,该类结合Ribbon负载均衡发起服务之间的调用

18. Hystrix防雪崩的方式

  1. 服务降级:在高并发的情况下,防止用户一直等待,使用服务降级方式进行处理(返回友好的提示给客户端,fallback回调方法)。
  2. 服务熔断:在高并发的情况下,如果达到一定的极限(可以自己设置阈值),如果流量超出了设置的阈值,然后拒绝访问,保护当前服务。当服务器达到最大的承受能力的之后,直接拒绝访问服务,然后调用降级方法,返回友好提示。
  3. 服务隔离:每个服务接口之间互不影响,服务隔离有2种实现方式,线程池方式、信号量。
  • 线程池方式:相当于每个接口(服务)都有自己独立的线程池,不同的线程池之间互不影响,能够实现服务接口隔离。缺点:CPU内存开销较大。
  • 信号量方式:底层使用原子计数器(atomic),针对于每个服务都设置自己的独立的限制阈值。比如设置每个服务接口最多同时访问的次数,如果超出缓存队列请求后,自己实现拒绝策略。

19. 服务雪崩

雪崩效应指的是大型互联网项目中,当某个服务发生宕机时,调用这个服务的其他服务也会发生宕机,大型项目的微服务之间的调用是互通的,这样就会将服务的不可用逐步扩大到各个其他服务中,从而使整个项目的服务宕机崩溃


20. 微服务之间的独立通信方式

  • 同步通信:Dubbo通过RPC远程过程调用,SpringCloud通过REST接口json调用
  • 异步通信:消息队列,如:RabbitMQActiveMKafka
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/12/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Spring、Spring MVC以及SpringBoot的区别
    • 2. SpringBoot的优点
    • 3. SpringBoot的启动过程
    • 4. Spring Factories的机制
    • 5. SpringBoot自动配置原理
    • 6. SpringBoot的核心注解及其组成
    • 7. bootstrap.yml与application.yml的区别
    • 8. SpringBoot 配置文件的加载顺序
    • 9. SpringBoot读取配置文件的方式
    • 10. 微服务的优缺点
    • 11. SpringCloud的概念
    • 12. SpringCloud的优点
    • 13. SpringCloud与SpringBoot的区别
    • 14. SpringCloud的组成组件
    • 15. Eureka和ZooKeeper的区别
    • 16. Eureka工作原理
    • 17. Feign工作原理
    • 18. Hystrix防雪崩的方式
    • 19. 服务雪崩
    • 20. 微服务之间的独立通信方式
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档