SkyWalking 是一个开源 APM 系统,包括针对 Cloud Native 体系结构中的分布式系统的监视,跟踪,诊断功能。核心功能如下:
- 服务、服务实例、端点指标分析
- 根本原因分析,在运行时分析代码
- 服务拓扑图分析
- 服务,服务实例和端点依赖性分析
- 检测到慢速服务和端点
- 性能优化
- 分布式跟踪和上下文传播
- 数据库访问指标。检测慢速数据库访问语句(包括 SQL 语句)
- 报警
SkyWalking 目前是 Apache 顶级项目,作为这么优秀的开源项目,它的架构设计理念肯定会有很多值得我们借鉴。
集群管理生态方法论
集群管理的方法论有很多,当今社会又是一个信息膨胀的时代,所以会有很多书籍或者文章会去剖析一些方法论,我相信很多都具备很强的收藏价值。
比如我现在需要做一个缓存系统,最开始我们肯定会考虑使用本地单机缓存,因为这样性能高,实现简单,我们只需要使用一个容器来承载这些数据,然后相办法如何保证数据的读写线程安全就行了,于是我们就会考虑单虚拟机下的性能优化,比如如何用多线程操作替代单线程,如何用事件驱动去替换同步,如何转换成异步,其实这些都会是在单机本地缓存上效果最明显,因为没有网络开销。
但是随着服务能力的提升以及运营给力,我们的应用程序单机的流量越来越大,线上单机根本不够用,我们需要主从部署,这样问题就来了,我们需要数据同步,slave 需要从 master 上同步数据,涉及到跨进程的数据同步,也就是这个时候就需要保证数据同步的高可用、高性能、高并发等特性,那么这个时候就需要集群管理了,需要我们去管理这些数据同步的操作。
那么我们首先会想到,我们原先是基于内存的,我们可以改成基于 openAPI 模式,如果一台机器上的内存数据变化了,我就通过 openAPI 实时的同步到其他集群节点上,然后更新对应机器节点的内存数据,这样数据就保证一致性了,只是说这个数据不会持久化,一旦有节点挂掉了,数据就全丢失了。
怎么办?程序员是很聪明的,我们可以持久化啊,把内存中的数据同步到磁盘文件,做备份,如果节点挂掉,再重新启动会去加载已经备份的文件。那么问题又来了,如果每次更新内存都会去持久化文件,如果有大量的请求,这样整个集群抗并发的能力会非常的差,所以又发明了异步刷盘机制以及机器硬盘的缓存机制。
其实上面所说的集群间数据的管理功能,在分布式领域里面属于 AP 模式,只会保证最终一致性。
那么如何保证 CP 的强一致性了,那么程序员的进阶之路,我们肯定需要刨根问底,这个时间基于 Raft 算法的分布式能力,就是 CP 算法,所以现在有很多框架的集群管理都会采用分布式算法 Raft,因为这个算法高效并且稳定。
使用 Raft 算法来保证集群管理能力的有很多优秀的框架,比如:
- Nacos
- Rocket MQ
- 蚂蚁金服的 JRaft
所以上升到集群管理,业界一般都会采用 CP 或者 AP 模式,很少有框架能够同时实现 CAP 模式的。
原创不易,欢迎下载 Gitchat应用,并搜索原创文章:
分布式链路追踪:集群管理设计
https://gitbook.cn/new/gitchat/activity/5f0b3d7c425b19297a0b8d0a
往期文章精选:
分布式链路追踪 SkyWalking:配置管理设计
SkyWalking 分布式链路追踪:最新 Kafka 通信模型设计
分布式链路追踪:Skywalking 的链路模型设计
分布式链路追踪:Skywalking 探针模型设计
分布式链路追踪 Skywalking:告警和度量架构设计
分布式链路追踪 Skywalking:插件化和模块化架构设计
分布式链路追踪Skywalking Skywalking 存储客户端设计
源码分析-分布式链路追踪:Skywalking存储插件能力-elasticsearch
本人花名游侠(因为曾经是阿里系的员工)-一名对技术、业务、管理和架构孜孜不倦的高级码农