- Maven和SpringBoot构建项目的差异
配置:
maven配置文件比较繁琐(springmvc-config.xml, mybatis-config.xml, web.xml, applicationContext*.xml)配置项很多很难记住,xml对这些配置没有语法检查
Springboot去掉了xml配置,利用注解+约定大于两个方式结合实现
使用application.yml 或者是application.properties
启动:web程序需要外部tomcat+maven帮助,sprringboot直接用启动类的main方法就可以了
- 分析SpringBoot构建的pom.xml有什么特色?
springBoot 自己来管理公用的父项目 spring-boot-starter-parent
- SpringCloud全家桶都包括些什么?
Eureka,Ribbon,Feign,zuul,hystrix,sidecar等等
- 什么是注册中心?为什么需要注册中心?
注册中心(RA,registration authority)是网络中的一个机构,它的职责是核实用户数字认证请求然后告诉认证中心(CA)发放认证。
注册中心是公钥基础设施(PKI)的一部分,是一个网络化的系统,使公司和用户可以安全和安心地交换信息和金钱。数字认证包含一个用来加密解密消息和数字签名的公钥
- 分布式架构设计的CAP定理是什么?
理论首先把分布式系统中的三个特性进行了如下归纳:
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
- 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- 分区容错性(P):以实际效果而言, 分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。
- ZooKeeper和Eureka比较
产品 | 说明 |
ZooKeeper | Zookeeper是基于CP来设计的,即任何时刻对Zookeeper的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性,但是它不能保证每次服务请求的可用性。从实际情况来分析,在使用Zookeeper获取服务列表时,如果zookeeper正在选主,或者Zookeeper集群中半数以上机器不可用,那么将无法获得数据。所以说,Zookeeper不能保证服务可用性。 |
Eureka | 而Spring Cloud Netflix在设计Eureka时遵守的就是AP原则。Eureka Server也可以运行多个实例来构建集群,解决单点问题,但不同于ZooKeeper的选举leader的过程,Eureka Server采用的是Peer to Peer对等通信。这是一种去中心化的架构,无master/slave区分,每一个Peer都是对等的。在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的serviceUrl指向其他节点。每个节点都可被视为其他节点的副本 |
总结: | ZooKeeper基于CP,不保证高可用,如果zookeeper正在选主,或者Zookeeper集群中半数以上机器不可用,那么将无法获得数据。Eureka基于AP,能保证高可用,即使所有机器都挂了,也能拿到本地缓存的数据。作为注册中心,其实配置是不经常变动的,只有发版(发布新的版本)和机器出故障时会变。对于不经常变动的配置来说,CP是不合适的,而AP在遇到问题时可以用牺牲一致性来保证可用性,既返回旧数据,缓存数据。 |
- Ribbon负载均衡和Nginx负载均衡有什么区别?
和 nginx 不同,它是客户端侧负载均衡。
- Feign是干什么的
Feigh 是一个明式 web 服务客户端。它能让开发 web 服务变得容易。使用 Feign 需要创建一个接口并注解它。它拥有包括 Feign 注解和 JAX-RS 注解的可插拔支持。它还支持可插拔的编码器和解码器。Spring Cloud 拥有 Spring MVC 支持,并使用 Spring Web 中默认同样的 HttpMessageConverters。在使用 Feign 时,Spring Cloud 集成了 Ribbon 和
Eureka 来提供负载均衡的HTTP 客户端。
总结:Feign 简化 HttpClient 开发,封装了 JAX-RS 和 springmvc 的注解,学习成本很低。
- Springboot核心类
AutoConfigurationImportSelector 用来加载所有整合的配置文件也是入口类
入口类
MybatisAutoConfiguration 这个类主要是为了和Springboot做整合
如果想写一个类和Springboot整合的话 可写一个AutoConfiguration的类
也要再写一个properties类来放配置
- Springcloud小流程
先创建服务提供者若干—>消费者通过服务注册中心Eureka获取提供者—>eureka提供服务—>消费者调用提供者通过ribbon做到负载均衡--->feign来做动态代理