什么是微服务?

  1. 微服务就是一个独立的职责单一的服务应用程序。在 intellij idea 工具里面就是用maven开发的一个个独立的module,具体就是使用springboot 开发的一个小的模块,处理单一专业的业务逻辑,一个模块只做一个事情

微服务之间是如何通信的?

  • 同步通信:dobbo通过 RPC 远程过程调用、springcloud通过 REST 接口json调用 等。
  • 异步:消息队列,如:RabbitMq、RocketMQ、Kafka 等

什么是springcloud?

  • springcloud流应用程序启动器是基于springboot的spring集成应用程序,提供与外部系统的集成。
  • springcloud task,一个生命周期短暂的微服务框架,用于快速执行有限数据处理的应用程序。

    springcloud有什么优势?

  • 使用springboot 开发分布式微服务时候。我们面临下面几个问题。

  • (1)与分布式系统相关的复杂性,这种开销包括网络问题,延迟开销,带宽问题,安全问题。
  1. (2)服务发现,服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
  • (3)冗余-分布式系统中的冗余问题。
  • (4)负载均衡—- 负载均衡改善多个计算机资源的工作负荷,诸如计算机,计算机群,网络链路,中央处理单元,或磁盘驱动器的分布。
  • (5)性能问题— 由于各种运营开销导致的性能问题。
  • (6)部署复杂性— Devops技能的要求。

    服务注册和发现是什么意思?spring cloud 如何实现的?

  • 当我们开始一个项目的时候i,我们通常需要在配置文件中进行各种的配置。

  • 随着越来越多的服务的开发和部署,添加和修改这些属性就很复杂了。
  • 有些服务可能下降,而某些位置可能会发生变化。
  • 手动更改属性可能会产生问题。
  • Eureka服务注册和发现可以在这种情况下提供帮助。
  • 由于所有服务都在eureka服务器上注册并通过调用eureka服务器完成查找,因此无需处理服务地址的任何更改和处理。

    springcloud 和 dubbo区别?

    1. 服务调用方式:dubbo是rpc,springcloud是 rest api。
    2. 注册中心:dubbo是zookeeper。springcloud是eureka,也可以是zookeeper。
    3. 服务网关:dubbo本身没有实现,只能通过第三方技术整合。springcloud有zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构元素。

springcloud和springboot的区别?

  1. springboot专注与方便的开发单个个体的微服务。
  2. springcloud是关注全局的微服务协调治理框架,它将springboot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供给,配置管理,服务发现,断路器,路由,微代理,事物总线,全局锁,决策竞选,分布式会话等等集成服务。
  3. springBoot 可以离开springcloud独立使用开发项目,但是springcloud离不开springboot,属于依赖关系 。
  4. springboot专注于快速,方便开发单个微服务个体,springcloud关注全局的服务治理框架。

总结:

  1. SpringBoot:专注于快速方便的开发单个个体微服务(关注微观);
  2. SpringCloud:关注全局的微服务协调治理框架,将SpringBoot开发的一个个单体微服务组合并管理起来(关注宏观);
  3. SpringBoot可以离开SpringCloud独立使用,但是SpringCloud不可以离开SpringBoot,属于依赖关系。

负载均衡的意义何在?

在计算机,负载均衡可以改善跨计算机,计算机集群,网络连接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。
负载均衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。
使用多个组件进行负载均衡而不是单个组件可能通过冗余来提高可靠性和可用性。
负载均衡通常涉及常用的软件或硬件,例如多层交换机或域名系统服务器进程。

springcloud的核心的组件有哪些?

  1. Eureka :服务注册与发现
  2. Feign:基于动态代理机制,根据注解和选择的机器,拼接请求url地址,发起请求。
  3. Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
  4. Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用隔离,避免了服务雪崩的问题。
  5. Zuul:网关管理,有Zuul网关转发请求给对应的服务。

    springcloud如何实现服务的注册?

  1. 服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)

  2. 注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。

    什么是服务熔断?什么是服务降级


  • 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。
  • 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性

    微服务的优缺点

    ```java 优点:松耦合,聚焦单一业务功能,无关开发语言,团队规模降低。在开发中,不需要了解多有业务,只专注于当前功能,便利集中,功能小而精。微服务一个功能受损,对其他功能影响并不是太大,可以快速定位问题。微服务只专注于当前业务逻辑代码,不会和 html、css 或其他界面进行混合。可以灵活搭配技术,独立性比较舒服。

缺点:随着服务数量增加,管理复杂,部署复杂,服务器需要增多,服务通信和调用压力增大,运维工程师压力增大,人力资源增多,系统依赖增强,数据一致性,性能监控

  1. <a name="W8wxN"></a>
  2. ## Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别?
  3. 1. ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的。
  4. Eureka各个节点是平等关系,只要有一台Eureka就可以保证服务可用,而查询到的数据并不是最新的。<br />Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪。
  5. 2. ZooKeeper有Leader和Follower角色,Eureka各个节点平等
  6. 3. ZooKeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题
  7. 4. Eureka本质上是一个工程,而ZooKeeper只是一个进程
  8. <a name="av5ZQ"></a>
  9. ## eureka自我保护机制是什么?
  10. ```java
  11. 当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。

什么是Ribbon?

ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。feign默认集成了ribbon。

什么是feigin?它的优点是什么?

  1. 1.feign采用的是基于接口的注解
  2. 2.feign整合了ribbon,具有负载均衡的能力
  3. 3.整合了Hystrix,具有熔断的能力
  4. 使用:
  5. 1.添加pom依赖。
  6. 2.启动类添加@EnableFeignClients
  7. 3.定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务

Ribbon和Feign的区别?

  1. 1.Ribbon都是调用其他服务的,但方式不同。
  2. 2.启动类注解不同,Ribbon@RibbonClient feign的是@EnableFeignClients
  3. 3.服务指定的位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
  4. 4.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign需要将调用的方法定义成抽象方法即可。

什么是Spring Cloud Bus?

  1. spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控。
  2. 如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置文件。
  3. 使用:
  4. 1.添加依赖
  5. 2.配置rabbimq

什么是Hystrix?

  1. 防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard
  2. 服务降级:
  3. 双十一 提示 哎哟喂,被挤爆了。 app秒杀 网络开小差了,请稍后再试。
  4. 优先核心服务,非核心服务不可用或弱可用。通过HystrixCommand注解指定。
  5. fallbackMethod(回退函数)中具体实现降级逻辑。

springcloud断路器作用?

  1. 当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)
  2. 断路器有完全打开状态:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务
  3. 半开:短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭
  4. 关闭:当服务一直处于正常状态 能正常调用

什么是SpringCloudConfig?

  1. 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client
  2. 使用:
  3. 1、添加pom依赖
  4. 2、配置文件添加相关配置
  5. 3、启动类添加注解@EnableConfigServer

架构?

  1. 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。
  2. 在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的服务。服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理,配置服务的配置文件放在git仓库,方便开发人员随时改配置。