什么是微服务?
微服务强调的是服务的大小,关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用。
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、相互配合,为用户提供最终的价值。
服务之间采用轻量级的通信机制相互沟通(HTTP的RESTful API)。(和Dubbo最大的区别)
每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
微服务的核心是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一个事情。
微服务之间是如何独立通讯的?
springCloud和Dubbo有哪些区别?
SpringBoot和SpringCloud,请你谈谈对它们的理解
springboot专注于快速方便的开发单个个体微服务,springcloud是全局的微服务协调治理框架。
Springboot可以离开SpringCloud,但是SpringCloud离不开SpringBoot,属于依赖关系。
什么是服务熔断,什么是服务降级
微服务的优缺点分别是什么?说下你在项目开发中遇到的坑
优点
每个服务足够内举,足够小,代码容易理解。
开发简单,开发效率提高。
能够被小团队独立开发,2-5个人组成。
松耦合,是有功能一一的服务,无论是在开发还是部署阶段都是独立的。
能使用不同语言开发。
易于和第三方集成,通过持续集成工具,如Jenkins、Hudson、bamboo。
只是业务逻辑的代码,不会和HTML,CSS或者其他界面组件混合。
每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。
缺点
处理分布式系统的复杂性
多服务运维难度,随着服务的增加,运维的压力也在增大
系统部署依赖
服务间通信成本
数据一致性
系统集成测试
性能监控
你所知道的微服务技术栈有哪些?
服务开发Springboot、Spring、SpringMVC
服务配置与管理Netflix公司的Archaius、阿里的Diamond等
服务注册与发现Eureka、Consul、Zookeeper等
服务调用Rest、RPC、gRPC服务熔断器Hystrix、Envoy等
负载均衡Ribbon、Nginx等
服务接口调用(客户端调用服务的简化工具)Feign等
消息队列Kafka、RabbitMQ、ActiveMQ等
服务配置中心管理SpringCloudConfig、Chef等
服务路由(API网关)Zuul等
服务监控Zabbix、Nagios、Metrics、Spectator等
全链路追踪Zipkin,Brave、Dapper等
服务部署Docker、OpenStack、Kubernetes等
数据流操作开发包SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
事件消息总线Spring Cloud Bus
eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别。
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性P在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。
因此Zookeeper保证的是CP,Eureka则是AP。
Zookeeper保证CP
当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
Eureka保证AP
Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。除此之外,Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下几种情况:
- Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
- Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
- 当网络稳定时,当前实例新的注册信息会被同步到其它节点中
因此, Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪。