微服务的优点与缺点?
优点:
每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求
开发简单、开发效率提高,一个服务可能就是专一的只干一件事
微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成
微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的
微服务能使用不同的语言开发
易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如
Jenkins, Hudson, bamboo
微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无
需通过合作才能体现价值
微服务允许你利用融合最新技术
微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合
每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库
缺点:
多服务运维难度,随着服务的增加,运维的压力也在增大
系统部署依赖
服务间通信成本
数据一致性
系统集成测试
性能监控
什么是 SpringCloud?
从字面理解,Spring Cloud 就是致力于分布式系统、云服务的框架。
Spring Cloud 是整个 Spring 家族中新的成员,是最近云服务火爆的必然产物。
Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具,例如:
配置管理服务注册与发现
断路器
智能路由
服务间调用
负载均衡
微代理
控制总线
一次性令牌
全局锁
领导选举
分布式会话
集群状态
分布式消息
......
使用 Spring Cloud 开发人员可以开箱即用的实现这些模式的服务和应用程序。这些服务可以任何
环境下运行,包括分布式环境,也包括开发人员自己的笔记本电脑以及各种托管平台。
SpringCloud 和dubbo区别?
服务调用方式:dubbo是RPC,SpringCloud是RestApi
注册中心:dubbo是zookeeper,SpringCloud是eureka,也可以是zookeeper
服务网关:dubbo本身没有实现,只能通过其他第三方技术整合,SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,SpringCloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
SpringCloud 断路器的作用是什么?
在Spring Cloud中使用了Hystrix 来实现断路器的功能,断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决,如果问题似乎已经得到纠正,应用程序可以尝试调用操作。
断路器增加了稳定性和灵活性,以一个系统,提供稳定性,而系统从故障中恢复,并尽量减少此故障的对性能的影响。它可以帮助快速地拒绝对一个操作,即很可能失败,而不是等待操作超时(或者不返回)的请求,以保持系统的响应时间。如果断路器提高每次改变状态的时间的事件,该信息可以被用来监测由断路器保护系统的部件的健康状况,或以提醒管理员当断路器跳闸,以在打开状态。
SpringCloud 的核心组件有哪些?
服务发现——Netflix Eureka
一个RESTful服务,用来定位运行在AWS地区(Region)中的中间层服务。由两个组件组
成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是
一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换
支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出
错状态的加权负载均衡。
客服端负载均衡——Netflix Ribbon
Ribbon,主要提供客户侧的软件负载均衡算法。Ribbon客户端组件提供一系列完善的配置选
项,比如连接超时、重试、重试算法等。Ribbon内置可插拔、可定制的负载均衡组件。
断路器——Netflix Hystrix
断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待
故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正,应用程序可以尝试调用操作。
服务网关——Netflix Zuul
类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。
分布式配置——Spring Cloud Config
这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。
微服务之间是如何独立通讯的?
远程调用,比如feign调用,直接通过远程过程调用来访问别的service。
消息中间件
Eureka自我保护机制是什么?
当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。
什么是服务熔断?什么是服务降级?
服务直接的调用,比如在高并发情况下出现进程阻塞,导致当前线程不可用,慢慢的全部线程阻塞,导致服务器雪崩。
服务熔断:相当于保险丝,出现某个异常,直接熔断整个服务,而不是一直等到服务超时。通过维护一个自己的线程池,当线程到达阈值的时候就启动。
服务降级:如果其他请求继续访问就直接返回fallback的默认值
什么是Ribbon?
Ribbon是一个负载均衡客户端,可以很好的控制HTTP和TCP的一些行为。Feign默认集成了
Ribbon。
Ribbon负载均衡能干什么?
将用户的请求平摊的分配到多个服务上
集中式LB即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;
进程内LB将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
注意: Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
什么是 Zuul路由网关?
Zuul 包含了对请求的路由和过滤两个最主要的功能:其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
注意: Zuul服务最终还是会注册进Eureka 提供=代理+路由+过滤三大功能。
分布式配置中心能干嘛?
集中管理配置文件不同环境不同配置,动态化的配置更新,分环境部署比如
dev/test/prod/beta/release
运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露