Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践
Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践
Java生鲜电商平台微服务现状
- 某个服务挂了,导致上游大量报警,如何快速定位哪个服务出问题?
- 某个核心挂了,导致大量报错,如何快速定位哪里出了问题?
- 应用程序的性能瓶颈?
- 线上发布了服务,怎么知道一切正常?
- App响应延迟,怎么确定有哪些服务导致?
如何解决
- 业务端去解决,通过日志,grep,awk,sed等等定位。
- 分布式请求跟踪系统。(帮助开发人员快速理解系统行为,快速定位问题的工具,分布式请求跟踪系统应运而生)
产品
设计需求
基于日志的分布式请求跟踪系统
- 业务侵入小
- 将每个系统分散的日志聚合起来,并进行海量数据日志分析。
核心---调用链
- 每次请求生成一个全局唯一id,通过它将不同系统生成的日志串在一起,重组成调用链,使其价值达 1+1》2的效果。
- 开发人员通过分布式请求跟踪链排查问题
- 对多个请求进行统计和分析。
设计目标
- 低侵入性
- 作为非业务组件,尽量减少侵入或者无侵入其他业务系统,对于使用方透明,减少业务开发人员的负担。
- 灵活的应用策略
- 使使用方可以根据需求,自定义收集数据的使用范围和粒度。
- 时效性
- 从数据的产生和收集,到数据的分析与处理,再到最终的页面展现,尽可能快。
- 可视化
- 使用场景友好的用户视角,可读性高。
分布式请求跟踪系统使用的场景
场景一 调用链跟踪
一次请求调用过程的展示,以图形化方式梳理各个为服务端集群之间的调用关系,并记录整个调用过程的耗时,协助开发人员分析整个系统的瓶颈点与热点,从而优化系统。
一次调用的耗时
多次调用
访问量与耗时情况
场景二 调用链的路径分析
对多条调用链进行分析,整理出集群之间的调用关系,计算出整个调用链路的关键节点、直接依赖、间接依赖 强度等等
场景三 调用来源分析
针对某一特定集群,整理出其他集群对其调用情况,防止错误调用情况的发生。
场景四 调用量统计
实时统计各个计算的调用次数、QPS、平均耗时、最大耗时等信息,开发人员可以根据相关信息进行容量规划。
场景五 监控请求调用量
开发人员通过自定义正则表达式,对匹配该规则的URL进行实时监控,包括调用次数等等。。。。。。
整体架构设计
埋点和生成日志
java探针-javaagent技术,通过本地socket将收集到的数据实时发送给本机上的日志收集节点agent,将本机上的多个java探针的日志数据发送到日志收集服务器集群。
收集和存储日志
日志收集服务器集群对数据进行格式化处理之后,分成三个工作流进行后续处理
汇总和重组调用链
分析和统计调用链
- 原始数据直接存入到ES集群中,用于页面实时调用链的展示
- 原始数据存入到本地的日志中,通过Flume上传到HDFS急群众,利用Hadoop集群定时的进行离线分析,分析后的结果存入到ES集群中,用于页面数据分析的展示。
原始数据发送到Spark/Flink在线分析集群,进行QPS、平均耗时等实时数据统计,分别将计算结果保存到Redis集群和ES集群中,用于页面实时数据统计的展示。
整体架构
埋点和生成日志
- 请求唯一标识(TraceID)
- 时序标识(SequenceID)
- 深度标识(DepthID)
重点是ID的生成,怎么生成呢?
ID体系设计
请求唯一标识(TraceID)网关生成
分布式id时序标识(SequenceID)
每层从1开始递增,放在threadlocal里面。下一层继承上一层的深度,加一个点。深度标识(DepthID)
点的个数递增
开源产品选择
- Pinpoint
Apache SkyWalking
Java生鲜电商平台-SpringCloud分布式请求跟踪系统设计与实践的更多相关文章
- Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...
- Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...
- Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理
Java生鲜电商平台-SpringCloud微服务架构中核心要点和实现原理 说明:Java生鲜电商平台中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
- Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构
Java生鲜电商平台-深入理解微服务SpringCloud各个组件的关联与架构 概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留 ...
- Java生鲜电商平台-API请求性能调优与性能监控
Java生鲜电商平台-API请求性能调优与性能监控 背景 在做性能分析时,API的执行时间是一个显著的指标,这里使用SpringBoot AOP的方式,通过对接口添加简单注解的方式来打印API的执行时 ...
- Java生鲜电商平台-微服务入门与服务的拆分架构实战
Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在“强大”的JSP上面,那时候SOA已经算是新技术了 ...
- Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战
Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...
随机推荐
- Python解密网易云音乐缓存文件获取MP3
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:GeneralMonkey Python解密网易云音乐缓存文件获取MP3 ...
- 一起学MyBatis之入门篇(2)
概述 本文主要讲解MyBatis中类型转换的功能,其实在MyBatis中,提供了默认的数据类型之间的转换,但只是基本数据类型的转换,如果跨类型进行转换,则需要自定义转换类,如java中是boolean ...
- hadoop伪分布模式的配置和一些常用命令
大数据的发展历史 3V:volume.velocity.variety(结构化和非结构化数据).value(价值密度低) 大数据带来的技术挑战 存储容量不断增加 获取有价值的信息的难度:搜索.广告.推 ...
- SpringCloud -创建统一的依赖管理
场景 Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性 Token,全居琐,Leader 选举,分布式 Session,集群状态)中快速构 ...
- iOS核心动画高级技巧-5
9. 图层时间 图层时间 时间和空间最大的区别在于,时间不能被复用 -- 弗斯特梅里克 在上面两章中,我们探讨了可以用CAAnimation和它的子类实现的多种图层动画.动画的发生是需要持续一段时间的 ...
- TI的32位定点DSP库IQmath在H7和F4上的移植和使用
说明: 1.最近在制作第2版DSP教程,除了ARM家的,这次重点了解下载TI的DSP库,特此移植了一个TI的IQmath. 2.初次使用这个定点库,感觉在各种Q格式的互转,Q格式数值和浮点数的互转处理 ...
- Docker安全扫描工具之docker-bench-security
简介 Docker Bench for Security检查关于在生产环境中部署Docker容器的几十个常见最佳实践.这些测试都是自动化的,其灵感来自CIS Docker基准1.2.0版. 这种安全扫 ...
- Docker系列之原理简单介绍
目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...
- 精通awk系列(5):BEGIN和END语句块
回到: Linux系列文章 Shell系列文章 Awk系列文章 BEGIN和END语句块 awk的所有代码(目前这么认为)都是写在语句块中的. 例如: awk '{print $0}' a.txt a ...
- JS---DOM---元素创建的不同方式---三种方式,5个案例
元素创建-----为了提高用户的体验 元素创建的三种方式: 1. document.write("标签的代码及内容"); 2. 对象.innerHTML="标签及代码 ...