文章总结(7)—微服务

1. 微服务

  1. 微服务和单体架构适合的场景?

在不同的场景下,选择合适的架构进行开发:

单体应用适合场景:

  • 业务场景简单;
  • 创业团队,或者项目初期场景,需要快速开发迭代;

微服务适合场景:

  • 业务场景复杂,核心业务可以独立;
  • 业务量大;
  1. 单体架构优缺点

优点:

  1. 中小型项目可以快速迭代,不需要太多资源;
  2. 没有分布式开销,所有服务都在本地容器中;
  3. 方便调试,容易部署;

缺点:

  1. 妨碍持续交互:单体应用一般比较大,构建和部署的时间比较长,不利于频繁部署;
  2. 受技术栈限制:每个团队成员必须使用相同的开发语言,无法根据具体场景做出其他选择;
  3. 开发效率低:所有开发在一个项目改代码,容易发生冲突;
  4. 代码运维难:代码功能耦合严重;
  5. 技术债务:系统设计或者写好的代码难以重构。因为应用程序其他部分可能会以意料之外的方式使用;
  6. 线上问题修复时间长:任何一个线上问题修复都需要对整个应用系统进行全面升级。
  1. 微服务架构优缺点

优点:

  1. 分而治之:单个服务功能内聚,复杂性低,方便团队拆分和管理;
  2. 可伸缩:能够单独对指定服务进行伸缩;
  3. 迭代周期短:支持快速的迭代开发;
  4. 独立部署,独立开发;
  5. 细粒度扩展:对于热点服务,可单独扩展;

缺点:

  1. 分布式事务支持;
  2. 团队依赖强:一个服务版本延迟会拖慢整个应用开发周期;
  3. 开发难度大:微服务调用需要考虑微服务间处理超时、网络异常等问题;
  4. 应用级别的需求变动常常波及多个服务;

2. Eureka

  1. CAP理论

根据分布式理论,一个分布式系统不能同时满足C(强一致性)、A(高可用)、P(分区容错)。由于当前无法保证两个子网络(区)之间的通信一定成功,所有必须满足P(分区容错)。故只能在C(强一致性)、A(高可用性)之间选择。

  1. Eureka和Zookeeper区别

两者均可以作为服务注册中心,实现服务的注册与发现。但是Eureka实现的是AP而Zookeeper实现的CP。

  1. Eureka如何保证高可用

Eureka服务器注册与发现

Eureka保证CAP理论中的AP,即高可用性,舍弃强一直性。即作为一个注册中心,可以忍受返回的是几分钟前的注册信息,但是不能忍受注册中心服务不可用。

Eureka设计的时候保证了可用性,即Eureka节点是去中心化,即各个节点平等,几个节点挂掉并不会影响其他节点的正常工作,剩余节点依旧可以提供注册和查询的功能。

Eureka并且实现了自我保护机制,默认情况下:Eureka会检查正常心跳占比,如果低于85%就会触发自我保护机制。触发自我保护机制后,Eureka将暂时失效的服务保护起来,不让其过期如果这些被保护的服务过一段时间(默认90s)依旧没有恢复,就会把这些服务剔除。

  1. Eureka自我保护机制:是否推荐打开

Eureka自我保护机制引发的生产事故

Eureka自我保护机制,避免的是网络故障导致服务不可用的问题。但是存在误伤:即服务被人为kill掉时(需求的上线,下线),若Eureka依旧开始自我保护,就会导致请求被Feign负载均衡到挂掉的服务器上,导致部分请求失败的请求。

解决办法有两个,一个是关闭自我保护机制。一个是在2020.03,eureka提供了1.9.17版本,可以解决这个问题。

  1. Zookeeper作为注册中心有什么缺陷?

Zookeeper实现的CP,即在分区容错的前提下,保证了强一致性。zk采用的是ZooKeeper Atomic Broadcast(ZAB Zookeeper的原子广播协议)作为数据一致性的核心算法。

Zookeeper集群架构采用的是主备模式,当Leader节点因为网络故障等原因与其他节点失去联系时,剩余节点将进行leader选举。问题在于,选举leader时间太长,30-120s,且在选举期间zk集群都是不可用的。这就导致选举期间注册服务瘫痪。

3. Feign

  1. Feign、Ribbon、Eureka之间的关系
  • feign:动态代理的方式,组装出Ribbon需要的参数;
  • Ribbon:去eureka中拉取ip列表,完成软负载均衡,完成远程调用;
  • Eureka:服务的注册和发现,即提供ip列表;
  1. Feign、Ribbon、okhttp之间的超时关系

feign的配置优先级高于ribbon配置。

Fegin超时时间设置的优先级

4. 其他

  1. rpc和http的区别
  • RPC:Remote Produce Call远程过程调用。自定义数据格式,基于原生TCP通信,速度快,效率高,缺点是要求服务提供这和服务消费者都要使用相同的技术。
  • Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。缺点是消息封装臃肿。

相同点:底层通讯都是基于socket,都可以实现远程调用,都可以实现服务调用服务

RPC与Http的区别

  1. @RestController和@Controller区别

@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

@RestController 和 @Controller 的区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容