1、数据库分库分表怎么实现
数据库分库分表分为两种,垂直分表和水平分表
垂直分表:指,列的拆分,将数据分割为多张表,通过外键关联,进行查询
垂直分库:指每个业务有自己单独的数据库
水平分表:指表结构相同,但是每张表规定存储数据不相同,确定数据不同可以使用雪花算法来确定ID从而保证存放在那张表里面。
水平分库:就是存放数据的表相同,库不同。
水平分库分表的实现方案,可以使用shardingJDBC实现
使用shardingJDBC需要配置数据源,分片规则。里面还可以指定雪花算法等。
数据库集群可能导致的问题
1、跨库跨表查询,使用feign,unoin进行结果返回。
2、分布式事务,seata 2PC
2、Redis集群方案
Redis集群方案有三种分别是主从复制,哨兵,cluster
主从复制:一主多从,主负责写,从负责读。但是不能解决故障转移,还有数据都存在主,数据不好扩容的问题。
哨兵:解决了故障转移的问题,他通过哨兵监听每个redis服务器,当一个哨兵判断主服务器挂了,就认为主服务器是一个主观下线的状态,同时发信息给所有哨兵,当有半数以上哨兵认为主服务器宕机,就会选择从服务器晋升为主服务器,将原来的主服务器变成新主服务器的从服务器。但是还是存在写压力在主服务器的问题。
cluster:多主多从的模式。采用去中心化的模式,共享16384个槽位。通过CRC16算法获取到存储的位置,而CRC16而二进制可以算出65536个槽位,为什么要%16384,是因为,redis的作者认为16384个槽位已经足够redis使用,假如是65536个,集群服务器之间相同通信,使用ping命令,发送的心跳包数据就是8个bit位。就会导致浪费带宽。
部署redis集群时会使用ruby进行集群配置。java使用时,需要把每个服务器的地址交给javacluseter进行管理。其他使用都一样。
3、ES集群方案
ES天然支持集群。我们需要注意的就是ES集群中的概念
ES集群可以分为分片,node节点,复制分片
分片就是指ES单台存储能力不足,就可以将数据分片到其他的主分片,进行存储。类似于Mysql的水平分表
并且每一个主分片都有自己的复制分片,来保证数据的安全性,提高容错。在主分片宕机后,复制分片可以晋升为主分片继续提供服务。假如有三个主分片,那么挂掉任何一个,节点都是黄色的状态。
节点可以分为主节点,数据节点,负载均衡节点。每一个节点都可以承担数据查询,数据写入,负载均衡的功能。但是在大数据量,高并发的情况会导致脑裂问题。就是指一个节点负责多个功能。所以一般ES是进行了节点的区分的。
4、数据库集群,分布式存储怎么解决
MySQL数据库分布式存储可以通过shardingjdbc来进行分片规则的设置。