组件介绍前端
流量统计平台java
意指可以开发一套完整替代三方数据平台(如友盟,GrowingIO)的数据流量分析平台,为使用者提供从接入到数据查看,再到数据分析全套统计分析平台。
同时为各个业务方快速便捷的提供基于流量数据的特异性需求的扩展功能mysql
功能列表:linux
分布式调度在互联网企业中占据着十分重要的做用,尤为是电子商务领域,因为存在数据量大、高并发的特色,对数据处理的要求较高,既要保证高效性,也要保证准确性和安全性,相对比较耗时的业务逻辑每每会从中剥离开来进行异步处理。ios
XXL-JOB 是一个轻量级分布式任务调度框架,支持经过 Web 页面对任务进行 CRUD 操做,支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,支持在线配置调度任务入参和在线查看调度结果。web
Elastic-Job 是一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。spring
opencron 是一个功能完善且通用的开源定时任务调度系统,拥有先进可靠的自动化任务管理调度功能,提供可操做的 web 图形化管理知足多种场景下各类复杂的定时任务调度,同时集成了 linux 实时监控、webssh 等功能特性。sql
LTS、Uncode-Schedule、Antares 等数据库
使用场景:编程
全链路监控是分布式框架的核心模块,采用开源项目很难达到结合项目特性来进行各维度的大数据分析、系统监控、系统告警等功能。最好能结合开源项目进行相应的改造、或者按照项目特色从新规划全链路监控组件
全链路监控平台功能点
Zipkin,Pinpoint,SkyWalking,CAT
基本原理
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
实现方式 | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | java探针,字节码加强 | java探针,字节码加强 | 代码埋点(拦截器,注解,过滤器等) |
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
接入
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
接入方式 | 基于linkerd或者sleuth方式,引入配置便可 | javaagent字节码 | javaagent字节码 | 代码侵入 |
agent到collector的协议 | http,MQ | thrift | gRPC | http/tcp |
OpenTracing | √ | × | √ | × |
分析
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
颗粒度 | 接口级 | 方法级 | 方法级 | 代码级 |
全局调用统计 | × | √ | √ | √ |
traceid查询 | √ | × | √ | × |
报警 | × | √ | √ | √ |
JVM监控 | × | × | √ | √ |
页面UI展现
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
健壮度 | ** | ***** | **** | ***** |
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
健壮度 | ** | ***** | **** | ***** |
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
健壮度 | ** | ***** | **** | ***** |
数据存储
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
数据存储 | ES,mysql,Cassandra,内存 | Hbase | ES,H2 | mysql,hdfs |
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
数据存储 | ES,mysql,Cassandra,内存 | Hbase | ES,H2 | mysql,hdfs |
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
数据存储 | ES,mysql,Cassandra,内存 | Hbase | ES,H2 | mysql,hdfs |
社区活跃度
类别 | Zipkin | Pinpoint | SkyWalking | CAT |
---|---|---|---|---|
STAR | STAR | STAR | ||
11.2k | 11.2k | 11.2k | 11.2k | 11.2k |
8.9k | 8.9k | 8.9k | 8.9k | 8.9k |
9.3k | 9.3k | 9.3k | 9.3k | 9.3k |
9.7 | 9.7 | 9.7 | 9.7 | 9.7 |
性能分析
模拟了三种并发用户:500,750,1000。使用jmeter测试,每一个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差异。pinpoint默认的采样率为20,即50%,经过设置agent的配置文件改成100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:
从上表能够看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385下降到774,影响很大。而后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差很少在10%以内。
监控指标
资源类型 | 监控指标 | 指标说明 | 采集频率(s) | 数据源 |
---|---|---|---|---|
RDS | CpuUsage | CPU使用率 | 300 | |
DiskUsage | 磁盘使用率 | 300 | ||
IOPSUsage | IOPS使用率 | 300 | ||
ConnectionUsage | 链接数使用率 | 300 | ||
MemoryUsage | 内存使用率 | 300 | ||
MySQL_NetworkInNew | Mysql每秒网络入流量 | 300 | ||
MySQL_NetworkOutNew | Mysql每秒网络出流量 | 300 | ||
MySQL_ActiveSessions | Mysql当前活跃Sessions数 | 300 | ||
REDIS | MemoryUsage | 已用容量百分比 | 60 | |
ConnectionUsage | 已用链接数百分比 | 60 | ||
IntranetInRatio | 写入网络带宽使用率 | 60 | ||
IntranetOutRatio | 读取网络带宽使用率 | 60 | ||
CpuUsage | CPU使用率 | 60 | ||
SLB | HeathyServerCount | 后端健康ECS实例个数 | 60 | |
UnhealthyServerCount | 后端异常ECS实例个数 | 60 | ||
ECS | tsar.partition.util | 磁盘使用率 | 60 | |
tsar.io.util | 硬盘有IO操做的时间与总时间的百分比 | 60 | ||
tsar.io.svctm | 硬盘平均每次I/O操做所花的时间 | 60 | ||
tsar.io.await | 硬盘I/O平均每次操做的等待时间 | 60 | ||
tsar.io.rrqms | 硬盘读IOPS个 | 60 | ||
tsar.io.wrqms | 硬盘写IOPS个 | 60 | ||
tsar.tcpx.cnest | tcp新建链接数 | 60 | ||
tsar.tcpx.est | tcp创建的链接数 | 60 | ||
tsar.load.load15 | 15分钟的系统平均负载 | 60 | ||
tsar.load.load5 | 5分钟的系统平均负载 | 60 | ||
tsar.load.load1 | 1分钟的系统平均负载 | 60 | ||
tsar.tcp.retran | tcp重传率 | 60 | ||
tsar.traffic.bytout | 出口流量 | 60 | ||
tsar.traffic.bytin | 入口流量 | 60 | ||
tsar.mem.util | 内存使用率 | 60 | ||
tsar.cpu.util | cpu利用率 | 60 | ||
OCS | ||||
OTS | ||||
ONS | ||||
Kafka | ||||
应用类 | ||||
资源类型 | 监控指标 | 指标说明 | 采集频率(s) | 数据源 |
HTTP | CostAvg | 平均耗时 | 60 | 全链路日志 |
两种: | CostMax | 最大耗时 | 60 | |
http-client | SuccessCount | 成功次数 | 60 | |
http-server | FailCount | 失败次数 | 60 | |
Dubbo | CostAvg | 平均耗时 | 60 | 全链路日志 |
两种: | CostMax | 最大耗时 | 60 | |
dubbo-service | SuccessCount | 成功次数 | 60 | |
dubbo-consumer | FailCount | 失败次数 | 60 | |
SQL | CostAvg | 平均耗时 | 60 | 全链路日志 |
CostMax | 最大耗时 | 60 | ||
SuccessCount | 成功次数 | 60 | ||
FailCount | 失败次数 | 60 | ||
MQ | 全链路日志 | |||
JVM | 待定 | |||
Druid | Druid |
全链路报警
相关产品
指望特性:
定位相似于Spring Boot Admin Server,做为Optimus应用的综合管理控制后台,具备自动注册/发现、在线调试、接口文档管理,查看应用元数据、服务指标等功能。提供客户端供应用接入。
指望目标
一、 基本的客户端服务自动注册和指标采集,并提供对应服务端和UI展现。
二、统一的文档注册和管理(Web/Dubbo)和接口调试能力。
三、接入已有的链路追踪、日志平台、Job平台、配置中心、架构感知,提供与其余平台的关联能力。
四、提供基本的DevOps能力,自动化应用开发、测试、打包、上线、下线、扩缩容。
功能
服务端提供展现应用元数据的能力
接口文档管理Document, 目标是替换目前Swagger的客户端UI
在线调试Online Visible Debug,提供可视化的在线调试能力,主要针对接口调试。
服务指标针对单个应用实例的基本监控点,是持续监控的时序数据,分为累加值、瞬时值、可计算的值、可聚合的其余指标。
上线时间\启动耗时\已运行时间
自动关联Relations
** 经过项目管理等系统关联应用的项目、产品和其余基础信息。
** 注册至服务端的应用容许自动关联Apollo、JIRA、GitLab、JenKins等服务,经过各服务的API接口拉取数据。
** 可手动指定关联服务的地址
Spring Boot Admin 介绍
Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序。可是它没有跟 Spring Cloud 作深度的整合。咱们但愿作一个 Spring Cloud Admin,它能提供以下功能:
介绍
混沌工程(Chaos Engineering):是在分布式系统上进行实验的学科, 目的是创建对系统抵御生产环境中失控条件的能力以及信心。最先由Netflix及相关团队提出。
为何须要混沌工程
混沌工程与测试的区别
混沌工程、故障注入和故障测试在关注点和工具中都有很大的重叠。
混沌工程和其余方法之间的主要区别在于,混沌工程是一种生成新信息的实践,而故障注入是测试一种状况的一种特定方法。当您想要探索复杂系统可能出现的不良行为时,注入通讯延迟和错误等失败是一种很好的方法。可是咱们也想探索诸如流量激增,激烈竞争,拜占庭式失败,以及消息的计划外或不常见的组合。若是一个面向消费者的网站忽然由于流量激增而致使更多收入,咱们很难称之为错误或失败,但咱们仍然对探索系统的影响很是感兴趣。一样,故障测试以某种预想的方式破坏系统,但没有探索更多可能发生的奇怪场景,那么不可预测的事情就可能发生。
测试和实验之间能够有一个重要的区别。在测试中,进行断言:给定特定条件,系统将发出特定输出。测试一般是二进制态的,并肯定属性是真仍是假。严格地说,这不会产生关于系统的新知识,它只是将效价分配给它的已知属性。实验产生新知识,并常常提出新的探索途径。咱们认为混沌工程是一种实验形式,能够产生关于系统的新知识。它不只仅是一种测试已知属性的方法,能够经过集成测试更轻松地进行验证。
日志规范
Devops及持续集成重构项目
一、分布式事务:Seata、hmily等。tcc、基于消息的最终一致性等
开源 TCC 框架对比
EasyTransaction ByteTCC TCC-Transaction
二、work-flow
三、压测链路
四、服务质量:异常计数
五、权限中心
六、服务幂等组件
为何须要一个发号器
在使用数据库时,表的主键常常会使用数据库的自增(auto_increment)来产生。这固然很方便也很高效。可是使用自增也会带来一些麻烦。若是从一个数据库之外的地方,也就是发号器来产生全局惟一 ID,这些问题就能够获得解决,生活就能够更美好。
难以适应分片场景
在采用数据库分片时,若是使用数据库自增 ID,不一样分片上会产生相同的 ID。单靠 ID 没法惟一标示一个对象,还须要额外加上分片字段才行。若是须要将 ID 用于其余对象的关联时,会麻烦不少。而采用发号器生成的是全局惟一的 ID,单靠 ID 就能实现关联。同时,这也使得采用 ID 做为分片字段成为可能。
主备切换时数据冲突
在 MySQL 集群发生主备切换时,异步复制没法确保主从彻底同步。在备库开放写入后,备库上产生的自增 ID 会和还没有同步的主库上的数据冲突。这样一来,即便原来的主库恢复了,也没法从新加入集群。数据修复也变成了一件很是困难的事情。引入发号器之后,备库上插入的 ID 和原来主库上的 ID 是不会重复的。所以,未复制的新增数据和对这些新增数据的修改就不会在备库发生冲突。
网络异常时没法判断插入是否成功
当插入记录时,若是使用数据库自增 ID,在完成插入后,才能获得产生的 ID。若是在执行语句时发生网络中断,客户端没法知道事务是否成功,即便成功,也没法再得到产生的 ID。若是使用发号器,就能够在插入以前预先产生 ID。若是碰到网络中断,能够用已经得到的 ID 去尝试查询来判断以前的插入是否成功。
此外,一些业务 ID 会须要一个全局惟一的整数做为它的组成部分。其余的分布式系统能够用全局单调的惟一 ID 做为事务号。有一个现成的服务就不用各自实现了
七、MQ消息可靠性保障
八、状态机中间件
概念
有限状态机,顾名思义,表示有限个状态以及在这些状态之间的转移和动做等行为的数学模型。
一个状态机应当包含如下几个要素:
随着 web 技术的发展,先后端分离成为愈来愈多互联网公司构建应用的方式。先后端分离的优点是一套 Api 可被多个客户端复用,分工和协做被细化,大大提升了编码效率,但同时也带来一些“反作用”: