微服务笔记
SpringCloud是什么
微服务一站式解决方案
Nacos是什么
- 服务发现、配置管理、服务管理平台
- 注册中心 + 配置中心
- AP(高可用 + 分区容错)或CP(强一致性 + 分区容错)可以来回切换
- 存信息AP,经常访问CP
与ZK的区别
- ZK是CP(强一致性 + 分区容错)
- 没有控制台,社区没有nacos活跃
读写分离
将读与写分别放于不同的服务器上,主写从读。一主一从或一主多从,适合单机并发读比较多的场景
如何解决分离后带来的同步问题
解决了性能问题,如何保证数据一致性,主库同步从库需要时间,如何解决?
- 读主库,虽然增加压力,但也有效
- 延迟读取
如何实现
- 部署多台数据库
- 进行主从复制
- 主写从读
在请求之后加入代理层,用来分发请求。官方的中间件为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挂了,需要投票
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 柠檬大师的空间站!
评论