首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏菩提树下的杨过

    spring cloud 学习(8) - sleuth & zipkin 调用跟踪

    业务复杂的微服务架构中,往往服务之间的调用关系比较难梳理,一次http请求中,可能涉及到多个服务的调用(eg: service A -> service B -> service C...) ,如果想分析各服务间的调用关系,以及各服务的响应耗时,找出有性能瓶颈的服务,这时zipkin就派上用场,它是Twitter公司开源的一个tracing系统,官网地址为: http://zipkin.io

    1.8K80发布于 2018-01-18
  • 来自专栏网络安全攻防

    ThinkPHP8 反序列化调用

    当时也是尝试着挖掘一条反序列化调用,相比ThinkPHP 6,不少类做了变动,外加上还做了declare (strict_types = 1);的限制,让利用变的有些许的难。 最近还是将这个任务重新捡了起来,最后也是成功找到了一条调用并成功利用,这里就分享成功利用的部分。 环境说明 官方手册:https://doc.thinkphp.cn/v8_0/preface.html 此外ThinkPHP提高了PHP版本要求,PHP版本需要使用PHP8以上。 根据官方文档下载好后添加一个反序列化入口就好 反序列化调用 source点选择 反序列化起点无非是destruct或wakeup方法,wakeup一般用于作对象初始化,多选择destruct方法作为起点 sink,当然应该也可以选别个 调用挖掘 选好了sink和source,这样就不会像无头苍蝇,在调用选择上尽量往我们的sink点靠就好啦,这里先做简单理论,先从source点开始跟 registered

    56710编辑于 2024-07-05
  • 来自专栏xiaoxi666的专栏

    java8 Stream sorted()的一次调用记录

    sort: b3; d2 sort: c; b3 sort: c; d2 a2 b1 b3 c d2 看到结果不淡定了,因此决定调试一下看看内部包装了哪种排序算法,这一调试不得了,发现stream的调用有点奇怪 : 以上这段代码利用了java8中的stream概念,在实际调试过程中,你会发现并不能从sorted()这里直接进入排序部分,由此引出本文。 调用记录为两大部分: 第一部分:sorted() /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/src.zip! == hi; ts.mergeForceCollapse(); assert ts.stackSize == 1; } 第3部分:compareTo() 这部分就不贴了,比较器 从以上调用可以看出 由于刚刚接触,就先把调用记录下来,以后再补充深层原理。

    2.4K10发布于 2018-10-29
  • 来自专栏宜信技术实践

    调用系列四:调用上下文传递

    在之前的调用系列文章中,我们已经对调用进行了详细介绍,相信大家已经对调用技术有了基本的了解。 拓展阅读: 调用系列(一):解读UAVStack中的贪吃蛇-调用 调用系列(二):解读UAVStack中的贪吃蛇-调用 调用系列三:解读UAVStack中的调用技术 其实,在调用的绘制过程中 ,调用上下文的传递非常值得关注。 前言 在调用的实现中,主要存在以下几种调用上下文的传递方式: 请求处理前到请求处理后的上下文传递; 各个客户端调用间的上下文传递; 各个服务间调用时的上下文传递。 数字表示所在点存在调用上下文信息的获取。在大多数的相邻点之间都会涉及到调用上下文的传递。

    1.6K30发布于 2019-06-28
  • 来自专栏宜信技术实践

    调用系列三:解读UAVStack中的调用技术

    通过阅读前几篇文章大家知道,调用模型和架构都是依托UAVStack的中间件增强框架技术实现的。在这篇文章中,我会向大家具体介绍如何从零开始捕获body和header。 [1551237169911062083.jpg] 当用户尝试调用getReader或getInputStream时,我们将之替换为自己的流,并且额外提供一个getContent()方法,将提前从StringBuilder 六、优化提取逻辑 上文的方法相当于是将包含body的inputStream提前进行一次读取,将其存储在中间byte[]或StringBuilder当中,当用户在调用getInputStream时,将byte 只要在用户调用read方法时,悄悄复制一份我们关心的内容,就能保证只有在用户使用body时才读取inputStream。 下一个问题就是如何保证在用户多次调用read时只读取一次inputStream。这里需要借助一个AtomicBoolean标志:当已经进行了一次完整读取后,将其置为true;否则为false。

    83430发布于 2019-06-28
  • 来自专栏Java工程师成长之路

    调用Cat介绍

    调用Cat 1.1. 调用演进 1.2. 开源产品比较 1.3. 监控场景 1.4. cat的增值作用 1.5. cat典型报表 1.5.1. 应用报错大盘 1.5.2. 参考部署架构 告警,报告,收集 支持本地模式调用存储,HDFS并不是必须的 1.8.2. 参考Collector配置 一台可以对接上千个服务 1.9. 生产治理 1.9.1.

    1.1K20发布于 2019-09-10
  • 来自专栏iOS逆向

    谈谈iOS获取调用

    iOS开发过程中难免会遇到卡顿等性能问题或者死锁之类的问题,此时如果有调用堆栈将对解决问题很有帮助。那么在应用中如何来实时获取函数的调用堆栈呢? 本文参考了网上的一些博文,讲述了使用mach thread的方式来获取调用栈的步骤,其中会同步讲述到栈帧的基本概念,并且通过对一个demo的汇编代码的讲解来方便理解获取调用的原理。 method _func 0000000100000f89 call _func 0000000100000f8e xor edi, edi _fp; #endif 4、递归遍历fp和lr,依次记录lr的地址 while(fp) { pc = *(fp + 1); fp = *fp; } 这一步我们其实就是使用上面的方法来依次迭代出调用上的函数地址 5、恢复线程thread_resume thread_resume(main_thread); 6、还原符号表 这一步主要是将已经获得的调用上的地址分别解析出对应的符号。

    3.8K31发布于 2018-12-24
  • 来自专栏服务端技术

    APM调用产品对比

    ,一次业务可能横跨多个模块/服务/容器,依赖的中间件也越来越多,其中任何一个节点出现异常,都可能导致业务出现波动或者异常,这就导致服务质量监控和异常诊断/定位变得异常复杂,于是催生了新的业务监控模式:调用跟踪 能够分布式的抓取多个节点的业务记录,并且通过统一的业务id(traceId,messageId,requestId等)将一次业务在各个节点的记录串联起来,方便排查业务的瓶颈或者异常点 产品对比 APM和调用跟踪均不是新诞生事务 Pinpoint Pinpoint是一个比较早并且成熟度也非常高的APM+调用监控的项目,在全世界范围内均有用户使用,支持Java和PHP的探针,数据容器为HBase,其界面参考: [image.png 长时间验证,稳定性和完成度高 探针收集的数据粒度比较细 HBase的数据密度较大,支持PB级别下的数据查询 代码设计考虑的扩展性较弱,二次开发难度较大(探针为插件式,开发比较简单) 拥有完整的APM和调用跟踪功能 Skywalking 优势: 数据容器为ES,查询支持的维度较多并且扩展潜力大 项目设计采用微内核+插件,易读性和扩展性都比较强 主要的研发人员为华人并且均比较活跃,能够进行更加直接的沟通 拥有完整的APM和调用跟踪功能

    2.5K00发布于 2020-07-02
  • 来自专栏Java技术详解

    异常和异常调用

    异常有异常调用,处理异常和对外抛出异常。编译时异常和运行异常又是有区分。项目组有的时候需要程序员自定义异常,注解也是需要手动开发。异常EXCEPTION和错误ERROR有差距。 异常调用在分为编译时调用处理方式和运行的异常调用处理方式。调用异常抛出可以把异常抛出到上一级程序的代码的调用方。程序抛出是throws, 还有一种异常的处理方式是把异常交付给虚拟机进行托管。 异常的调用不宜过长。变量对象的作用域限制在最小的作用域之内。最顶层的异常调用方是主线程,系统默认会自动处理。异常的调用过程是增加系统代码的复杂度。

    96320编辑于 2023-05-09
  • 来自专栏devops_k8s

    APM调用产品对比

    APM调用产品对比 随着企业经营规模的扩大,以及对内快速诊断效率和对外SLA(服务品质协议,service-level agreement)的追求,对于业务系统的掌控度的要求越来越高,主要体现在: ,一次业务可能横跨多个模块/服务/容器,依赖的中间件也越来越多,其中任何一个节点出现异常,都可能导致业务出现波动或者异常,这就导致服务质量监控和异常诊断/定位变得异常复杂,于是催生了新的业务监控模式:调用跟踪 Pinpoint Pinpoint是一个比较早并且成熟度也非常高的APM+调用监控的项目,在全世界范围内均有用户使用,支持Java和PHP的探针,数据容器为HBase,其界面参考: Skywalking 数据容器为ES,查询支持的维度较多并且扩展潜力大 项目设计采用微内核+插件,易读性和扩展性都比较强 主要的研发人员为华人并且均比较活跃,能够进行更加直接的沟通 拥有完整的APM和调用跟踪功能 代码设计考虑的扩展性较弱,并且数据结构复杂,二次开发难度较大 拥有完善的监控告警机制 劣势: 代码针对性强,扩展较难 需要手动接入埋点,代码侵入性强 APM功能完善,但是不支持调用跟踪

    1.5K20编辑于 2022-05-09
  • 来自专栏有文化的技术人

    可观测之调用Skywalking

    简介 分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。 github.com/SkyAPM/go2sky/blob/38c3b84741dd6c0609965e9df0fcc633915d3ea5/test/e2e/example-server/main.go 和所有的路监控工具一样 ,skywalking也遵循Open Tracing协议,首先需要创建一个Trace,表示一个调用,然后再调用上创建span和子span,每个span表示一次调用,因为span和子span是有关联关系的 ,所以通过span和子span可以了解链路的上下游调用情况。 在go-sky里,可以创建三种类型的span LocalSpan:可以用来表示本程序内的一次调用

    54520编辑于 2023-08-19
  • 来自专栏无量测试之道

    Python + Websocket + Shell 获取调用

    在后端服务比较多的情况下,一般都会拆分为不同的子服务来提供服务,不同的子服务之间如果有一个 traceid 来串起来调用链条的话,我们可以通过本工具来实现整体链条调用日志的收集与提取,今天的分享共分为四个部分

    72220编辑于 2022-07-04
  • 来自专栏JAVA乐园

    调用像链子,责任模式

    0x01:责任模式简介 在责任模式中,很多对象由每一个对象对其下家的引用而连接起来形成一条。请求在这个上进行传递,直到上的某一个对象决定处理此请求。 发出这个请求的客户端并不知道上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任模式的UML类图如下: ? 0x02:责任模式实现 在工作中,免不了需要进行报销。现在与报销这个业务流程来实现责任模式。 throws IOException, ServletException { //省略 } //省略 } 在使用Filter时,如果需要交给下一个Filter处理,都会调用如下一段代码 如果想深入了解 HandlerExecutionChain 类的调用关系,可以跟踪一下 DispatcherServlet 类的 doDispatch() 方法。

    49610发布于 2021-01-06
  • 来自专栏进阶之路

    【进阶之路】调用监控原理

    前段时间与大家分享了定时任务调用平台xxl-job,也简单地讲了讲平台的结构模式、调度方法。 【进阶之路】定时任务调用平台xxl-job 调用任务的过程中,如果xxl-job的代码能够顺利执行,但是本身需要执行的任务没有顺利执行成功,或者因为一些问题导致任务延迟执行甚至没有执行,xxl-job if (无需执行情况) return; } //4、如果状态不是正常执行,直接报警 if (条件1) { //调用邮箱通知 //调用短信通知 //5、如果状态是正常执行,则判断是否需要报警同时 } else if (条件2) { //根据不同的任务,执行不同的操作、具体由taskTempDto 在定时任务执行成功之后,开启一个线程来调用就能解决问题。当然,在设计之初我也考虑了这个问题,所以预留了接口有备无患。

    53930编辑于 2022-09-16
  • 来自专栏Kubernetes

    runC源码分析——主体调用

    本文将简单的对runC的源码调用主体逻辑进行梳理,为跟系统的阅读runC源码。 ##runC总体调用逻辑 下图中,runC源码逻辑跳转流程总体上分为三步: main入口 ——> runC处理 ——> libcontainer处理。 具体runC的各个Command的调用见如下: ##runC处理 ###checkpoint checkpointCommand(main.go) —> checkpointCommand(checkpoint.go

    1.9K91发布于 2018-04-13
  • 来自专栏后端技术

    spring aop (下)调用拦截

    调用这个拦截器,它会依次调用上面的每个拦截器(虽然有的拦截器是动态的,其执行与否要靠临时检查决定)。最后,它还会调用方法本体。 ReflectiveMethodInvocation.jpg 1.4.2 调用拦截 根据代码,我们创建好拦截后,第一次调用proceed方法(代码如下)。 一个拦截器数组就相当于一个拦截。换句话说,每个method都会缓存一个拦截。 每次调用一个方法时,首先要拿到缓存好的方法的拦截,依次调用上的拦截器,最后才调用方法本身。 动态的拦截器在调用拦截时,要临时判断是否符合调用条件。静态的拦截器在调用时,不用判断,直接调用。 拦截调用时通过proceed和MethodInterceptor.invoke轮流递归调用的,在最后一次proceed中会调用方法本体。

    1.1K20发布于 2019-06-03
  • 来自专栏ASTMatcher

    ASTMatcher分析函数调用(上)

    要得到函数之间的调用关系,我们必须分析抽象语法树,clang提供了两种方法:ASTMatchers和RecursiveASTVisitor,RecursiveASTVisitor有两种方式实现,一是clang 而clang的ASTMatcher,速度快,可以让我们高效的匹配到我们想要的节点;其内部可以嵌套多个ASTMatcher,通过调用构造函数创建,或者构建成一个ASTMatchers的树,使得匹配更加具体准确 ,也需要获取函数被调用的函数名和类名。 这里创建函数调用的ASTMatcher的策略如下: (1)寻找想匹配的节点最外层的类:函数调用 (2)在 AST Matcher Reference 中查看所需要的Matcher匹配到需要的节点:objcMessageExpr () (3)拿到函数调用后,还需要获取该函数调用的方法定义:objcMethodDecl(),以及类声明:objcImplementationDecl() (4)创建匹配表达式,通过clang-query

    7.9K81发布于 2019-10-18
  • 来自专栏技术专家成长之路

    SpringBoot集成CAT调用实例

    让我们虚拟一个买买买结算系统,为结算页面提供商品、促销、库存等结算信息,就此系统展开如何在SpringBoot项目中集成CAT调用。 xml version="1.0" encoding="utf-8"? 第一个类实现Cat.Context接口,用于存放调用上下文信息: public class CatContext implements Cat.Context { private Map<String static final String CAT_HTTP_HEADER_ROOT_MESSAGE_ID = "DD-CAT-ROOT-MESSAGE-ID"; } 开始埋点 使用CAT进行分布式调用监控 httpClient.close(); } t.complete(); } return content; } 结语 以上便是SpringBoot集成CAT调用的整个实例了

    83010编辑于 2022-04-22
  • 来自专栏Java项目实战

    Dubbo完整调用路介绍

    Dubbo完整调用路介绍引言在当今的互联网应用开发中,分布式架构已经成为一种常见的设计和实现方式。在分布式架构中,服务调用是一个关键的环节。 Dubbo作为一款成熟而强大的分布式服务框架,提供了完整的调用路,支持可靠的远程服务调用。本文将深入探讨Dubbo的完整调用路,帮助读者理解Dubbo的工作原理和实现机制。1. Dubbo的完整调用路Dubbo的完整调用路包括服务提供者、服务消费者和注册中心三个主要组件。下面将详细介绍Dubbo的完整调用路。 Dubbo调用路的关键技术3.1 序列化技术Dubbo在服务调用过程中需要进行参数的序列化和反序列化,将请求和响应的数据进行传输。 这些技术能够提高系统的稳定性和可用性,保证服务调用的可靠性。4. 总结Dubbo作为一款强大的分布式服务框架,提供了完整的调用路,支持可靠的远程服务调用

    56420编辑于 2023-07-22
  • 来自专栏ASTMatcher

    ASTMatcher分析函数调用(下)

    上一篇文章(ASTMatcher分析函数调用(上))讲到ASTMatcher的原理以及创建,本文将详细介绍ASTMatcher获取函数调用在iOS app中的应用。 一、ASTMatcher部分 1、无消息调用的函数定义获取 上篇中的ASTMatcher只能获取有消息调用的函数定义,那没有消息调用的函数定义就无法匹配到,所以无消息调用的函数定义也需要获取 DeclarationMatcher PRIVATE,见链接:https://stackoverflow.com/questions/47737558/build-llvm-clangtool 4、clang8.0生成的func-call获取调用不全 clang8.0生成的func-call可执行文件获取调用不全,具体原因没有去研究 解决:func-call使用clang6.0生成的可执行文件,func-call-category-only使用clang8.0 四、ASTMatcher无法分析的情况 1、系统方法 由于系统方法在我们调用中没有用处,所以这里就放弃了对系统方法的获取,包括系统类的category类以及方法。

    2.8K50发布于 2019-10-18
领券