SpringCloud是什么

微服务一站式解决方案

Nacos是什么

  • 服务发现、配置管理、服务管理平台
  • 注册中心 + 配置中心
  • AP(高可用 + 分区容错)或CP(强一致性 + 分区容错)可以来回切换
  • 存信息AP,经常访问CP

与ZK的区别

  • ZK是CP(强一致性 + 分区容错)
  • 没有控制台,社区没有nacos活跃

读写分离

将读与写分别放于不同的服务器上,主写从读。一主一从或一主多从,适合单机并发读比较多的场景

如何解决分离后带来的同步问题

解决了性能问题,如何保证数据一致性,主库同步从库需要时间,如何解决?

  • 读主库,虽然增加压力,但也有效
  • 延迟读取

如何实现

  1. 部署多台数据库
  2. 进行主从复制
  3. 主写从读

在请求之后加入代理层,用来分发请求。官方的中间件为MySQL Router

或者使用sharding-jdbc,引入jar包使用,空降点我

什么是主从复制?

MySQL 主从复制是依赖于 binlog 。另外,常见的一些同步 MySQL 数据到其他数据源的工具(比如 canal)的底层一般也是依赖 binlog 。

分库分表

用来解决数据量大造成的性能问题

sharding-jdbc是常见的工具

分表的切分方式

垂直切分:竖着切,将字段分开

水平切分:将数据进行切分,比如去年和今年的数据分开

什么情况下需要分库分表

  • 数据达千万,读写缓慢(分表)
  • 数据库占用过大,备份时间长(分库)
  • 并发太大(分库)

带来的问题

  • 无法join,分到俩库里了。只能进行一个中转操作
  • 事务问题
  • 需要分布式id

ZK

服务于分布式系统,用来做统一配置管理,命名服务,分布式锁,集群管理

zk的数据结构叫znode,可以监听数据变化与节点增减

统一配置管理:一个公用的common.yml可以挂载znode节点上,如果配置文件变了可及时响应

统一命名服务:通过域名访问具体ip

分布式锁:在一个lock节点下获得锁,取判断是否为最小节点,如果是则获得锁,不是就监听比自己小1的节点

集群:感知节点增减,master进行动态选举

选举

至少有3个节点,如果一个挂了,还有另外一个提供服务

不是越多越好,通讯成本增高,容易脑裂(多个leader,如何避免,leader最后启动)

为啥为奇数:过半机制,解决成本

选举机制:过半原则:如果添加一个节点,leader会测试是否可用,给follwer发信息,如果得到一半反馈,则认为当前集群是可靠的

如果leader挂了,需要投票