一.微服务的优点缺点?说下开发项目中遇到的坑?
- 优点:
- 每个服务直接足够内聚,代码容易理解
- 开发效率高,一个服务只做一件事,适合小团队开发
- 松耦合,有功能意义的服务。
- 缺点:
- 多服务运维难度加大。
- 系统部署依赖,服务间通信成本,数据一致性,系统集成测试,性能监控。
二.什么是微服务?
1.微服务是一种架构模式或是一种架构风格,它提倡的是将单一的应用程序划分成若干个小的服务,每个服务都有独立的进程,服务之间相互协调,相互配合,最终完成目的。
三. 什么是Ribbon负载均衡?
- Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。
- Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。
四.什么是springcloud?
- Spring Cloud是一个微服务框架的规范
- Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。
五.spring cloud 和dubbo区别?
- 服务调用方式 dubbo是RPC springcloud Rest Api
- 注册中心,dubbo 是zookeeper springcloud是eureka、zookeeper、consul等
- 服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
六.REST 和RPC对比
- RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突。
- REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只需要一个约定进行规范。
七.你所知道的springcloud微服务技术栈?
- 维度(springcloud)
服务开发:springboot spring
服务注册与发现:Eureka,Zookeeper
服务调用:Rest RPC gRpc
服务熔断器:Hystrix
服务负载均衡:Ribbon Nginx
服务接口调用:Fegin
消息队列:Kafka Rabbitmq activemq
服务配置中心管理:SpringCloudConfig
服务路由(API网关)Zuul
事件消息总线:SpringCloud Bus
八.springcloud如何实现服务的注册?
- 服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)
- 注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。
九.Eureka和Zookeeper区别
- Eureka取CAP的AP,注重可用性,Zookeeper取CAP的CP注重
一致性。- Zookeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但选举期间不可用。
- eureka的自我保护机制,会导致一个结果就是不会再从注册列表移除因长时间没收到心跳而过期的服务。依然能接受新服务的注册和查询请求,但不会被同步到其他节点。不会服务瘫痪。
- Zookeeper有Leader和Follower角色,Eureka各个节点平等。
- Zookeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题。
- eureka本质是一个工程,Zookeeper只是一个进程。
十.什么是Hystrix?
- 防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)
- 服务降级:
双十一 提示 哎哟喂,被挤爆了。 app秒杀 网络开小差了,请稍后再试。
优先核心服务,非核心服务不可用或弱可用。通过HystrixCommand注解指定。
fallbackMethod(回退函数)中具体实现降级逻辑。
十一.什么是服务熔断?什么是服务降级?
- 服务直接的调用,比如在高并发情况下出现进程阻塞,导致当前线程不可用,慢慢的全部线程阻塞,导致服务器雪崩。
- 服务熔断:相当于保险丝,出现某个异常,直接熔断整个服务,而不是一直等到服务超时。
- 通过维护一个自己的线程池,当线程到达阈值的时候就启动服务降级,如果其他请求继续访问就直接返回fallback的默认值。
十二.springcloud断路器作用?
- 当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应 当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)
- 断路器有完全打开状态:一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务
- 半开:短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时 断路器关闭
- 关闭:当服务一直处于正常状态 能正常调用
十三.什么是Ribbon?
ribbon是一个负载均衡客户端。feign默认集成了ribbon。
十四.什么是feigin?它的优点是什么?
- feign采用的是基于接口的注解
- feign整合了ribbon,具有负载均衡的能力
- 整合了Hystrix,具有熔断的能力
- 使用:
- 添加pom依赖。
- 启动类添加@EnableFeignClients
- 定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务
十五.Spring Cloud Gateway?
-
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
-
使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。
十六.架构?
- 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统