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. ...
随机推荐
- 千呼万唤始出来——uFUN开发板2.0开箱评测
前言 今年3月,我参与了面包板社区组织的第一批uFUN开发板评测活动,并有幸能获得试用机会,那是我第一次了解到uFUN这个项目及背后的故事,4月份,uFUN 2.0版本来了,收到了张工送的一块样板,后 ...
- springIOC及设计模式
一.IOC的概念: 控制反转(inversion of control)和依赖注入(dependency injection)其实是同一个概念.当某个方法需要另外一个对象协助的时候,传统的方法就是有调 ...
- JS---最终版本--封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度
封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度 相较之前的,增加了2个判断,第一个判断是不是透明度,第二个判断是不是zindex, 都不是,就只是普通属 ...
- sessionstorage中存储JSON数据
在web开发时,可能经常会用到sessionstorage存储数据,存储单个字符串数据变量时并不困难 var str = 'This is a string'; sessionstorage.setI ...
- 深度学习优质学习项目大放送!-AI Studio精选开源项目合集推荐
近期 在AI Studio上发现了不少优质的开源深度学习项目,从深度学习入门到进阶,涵盖了CV.NLP.生成对抗网络.强化学习多个研究方向,还有最新的动态图,都以NoteBook的方式直接开源出来,并 ...
- 群晖NAS再再折腾
问题 最近电信把我的公网地址收回去了,之前做好的网络端口映射失效了,在公司已经不能愉快地访问家里的网络.原先网络结构示意图如下: (直接访问方案网络结构图) 只需要对电信光猫(也是个路由器)和家用 ...
- Python——面向对象(类)的基础疑难点
相信用Python写def函数大家都信手拈来了,但Python作为面向对象的编程语言,怎么能浪费呢? 那问题来了.什么是类呢?什么是实例?什么是对象?方法是什么??属性又是什么???继承?封装?多态? ...
- Node.js / Python 日志
一.Node.js 日志 1.原生 Node.js 原生方法其实很简单,就四个: // 输出到 stdout console.log() console.info() = console.log() ...
- Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
为什么需要 Rendertron? 传统的 Web 页面,通常是服务端渲染的,而随着 SPA(Single-Page Application) 尤其是 React.Vue.Angular 为代表的前端 ...
- netcore 2.2 使用 Autofac 实现自动注入
Autofac自动注入是通过名称约定来实现依赖注入 ps:本demo接口层都以“I”开头,以“Service”结尾.服务层实现都以“Service”结尾. 为什么要实现自动注入 大多时候,我们都是 以 ...