201. mycat 分片规则
分片规则(rule)
前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。
mycat 大概支持十几种分片规则,我们使用的分片规则主要是 2 个:
1、自动分片:
一共三个分片节点,会自动根据主键 ID 进行分片,0-500W,501-1000W,1000-1500W 会自动对数据进行分片存储;
但是这个分片规则有个缺点,就是超过 1500W 的数据无法处理;
2、一致性哈希
计算主键 ID 的哈希值,根据哈希值进行平均的分片(理论上的平均,不保证绝对平均)。
(1) 在 schema.xml 中配置 table 的分片规则
(2) 在 rule 定义分片规则<xxx-murmur>,并设置主键 ID
(3) 根据 rule.xml 中对分片规则的配置选项进行设置
(4) 重启 mycat 后,table 按照一致性哈希分片规则进行分片
7.4.Spring Boot
7.4.1. 什么是 spring boot
springboot 就是 spring 推出的脚手架工程,目的在于提高开发效率。
特性的话我理解就三个吧,
1、依赖管理:其实就是通过启动器将项目的依赖和版本进行管理,通过 maven 的依赖进行自动的依赖集成和版本管理;
2、约定大于配置:同样通过自动配置,引入依赖后,加载默认配置文件,如果要自定义的话可以通过 java 类实现, 也可以在全局配置文件(application.properties,application.yml)中定义;
3、springboot 自带 tomcat 容器,项目打包为 jar,发布项目直接 java -jar 命令即可发布,生产环境一般使用 k8s+docker 进行项目的部署,通过容器能够很好地实现服务的资源利用,通过 k8s 实现容器集群管理。
7.4.2. springboot 的@SpringBootApplicaiton 注解作用
@SpringBootApplication
根据查看源码,在@SpringBootApplicaiton 的元注解中,实际上是继承了三个注解
@Configuration:表示将该类作用 springboot 配置文件类。
@EnableAutoConfiguration:表示程序启动时,自动加载 springboot 默认的配置。
@ComponentScan:表示程序启动是,自动扫描当前包及子包下所有类。
7.4.3. springboot 项目启动发生了什么
1、执行启动类中的 main 方法;
2、扫描所有的配置类,进行 spirng Ioc 容器的装载;
3、加载依赖树,根据 spring-stater-autoconfigure 进行自动配置,加载默认配置参数;
4、打包成 jar 包,通过内部 tomcat 容器,发布项目
7.5.Spring Cloud
7.5.1. 什么是微服务架构
微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越 来越复杂的业务需求。
微服务,更加强调的是独立、自治、灵活。一般都会采用基于 Http 的 Rest 风格服务。
7.5.2. 什么是 spring cloud
SpringCloud 是 Spring 旗下的项目之一,Spring 最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。
SpringCloud 也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能.为微服务架构的实现提供技术支持。
7.5.3. spring cloud 常用组件
- Eureka:注册中心
- Zuul:服务网关
- Ribbon:负载均衡
- Feign:服务调用(服务伪装,向 controller 一样功过 service-name 调用服务)
- Hystix:熔断器
7.5.4. spring cloud 与 zookeeper 有什么区别
zookeeper 强调的是 CAP 原则的 CP 原则,更加注重一致性,如果注册中心无法保证一致性,则服务提供者服务消费者,可能无法实现服务器的调用及通信,但是 spring cloud 更加强调的是 AP 原则,注重的是服务的可用性,所以针对服务的发布及调用来说,体验更好,服务更加稳定。
7.5.5. SOA 架构和微服务架构的区别
SOA,英文翻译过来是面向服务。微服务,似乎也是服务,都是对系统进行拆分。因此两者非常容易混淆,但其实缺有一些差别:
1、SOA 架构是面向服务和接口开发,框架进行水平分割,服务层与 web 层需要通过 RPC 框架进行通讯;
2、微服务架构,则是根据业务进行纵向分割,每个微服务通过 Http 协议对外暴露 Rest 接口,更加的灵活和自治;
微服务框架SpringCloud
- 请说一下你们项目中使用到的springcloud中所用的组件?
Eureka 注册中心
Ribbon 本地负载均衡
Fegin 服务调用
RestTemplent 服务调用
Hystrix 熔断降级
Zuul 网关
链路追踪
配置中心
什么是SpringCloud
SpringCloud是微服务的一种解决方案,依赖SpringBoot实现。包含注册中心(eureka)、客户端负载均衡(Ribbon)、网关(zull)、分布式锁、分布式会话等。
为什么要使用SpringCloud
SpringCloud是一套非常完整的微服务解决方案,俗称“微服务全家桶”,几乎内置了微服务所使用的各种技术,可以不必集成第三方依赖。
SpringCloud服务注册发现原理
每个SpringCloud服务器启动后向注册中心注册本服务器信息,如服务别名、服务器IP、端口号等,其他服务进行请求时先根据服务别名从注册中心获取到目标服务器IP和端口号,并将获取到的信息缓存到本地,然后通过本地使用HttpClient等技术进行远程调用。
SpringCloud 支持那些注册中心
Eureka、Consul、Zookeeper
Eureka如何实现高可用
启动多台Eureka服务器,然后作为SpringCloud服务互相注册,客户端从Eureka集群获取信息时,按照注册的Eureka顺序对第一个Eureka进行访问。
@LoadBalanced注解的作用
开启客户端负载均衡。
Nginx与Ribbon的区别
Nginx是反向代理同时可以实现负载均衡,nginx拦截客户端请求采用负载均衡策略根据upstream配置进行转发,相当于请求通过nginx服务器进行转发。Ribbon是客户端负载均衡,从注册中心读取目标服务器信息,然后客户端采用轮询策略对服务直接访问,全程在客户端操作。
Ribbon底层实现原理
Ribbon使用discoveryClient从注册中心读取目标服务信息,对同一接口请求进行计数,使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。
SpringCloud有几种调用接口方式
使用Feign和RestTemplate
这是最后一篇,剩下面试题,将会具体细分为各个功能模块
更多面试题,请打开主页分栏 java面试 进行查看,谢谢