微服务架构 | 如何利用好日志链路追踪做性能分析?

微服务架构 | 如何利用好日志链路追踪做性能分析?

导读:做性能分析听到最多的歪理就是,服务做水平、垂直扩容、分表分库、读写分离、XX中间件、资源静态化等等但是归根到底这些方案都是为了尽可能减少对数据库的访问以及堆栈的释放,提高数据库IO的读写速度和程序的运行效率。

系统都是逐渐演进的,一个系统在运行中必须是根据场景逐渐地提高优化性能。高并发就是对资源的节约的考验,这种考验除了更换优秀和先进的技术,优化架构,还在于从小处出发,对尽可能节约的资源进行节约。

 而在一个系统的数据访问中,系统的瓶颈往往是来自于数据库,因此我们要尽可能减少对数据库的访问!

一、背景

最近一段时间粉丝可能留意到,技术号一直没有更新多少技术文章。因为近期都在做一直在做性能优化。

在业务模块在并发量起来以后,接口的性能瓶颈就愈发变得明显。

最近一段时间粉丝可能留意到,技术号一直没有更新多少技术文章。因为近期都在做一直在做性能优化。

在业务模块在并发量起来以后,接口的性能瓶颈就愈发变得明显。

配置解析和函数路由服务接口性能堆栈分析

本篇主要针对配置布局资源文件过大,导致接口耗时过长问题分析解决。

二、日志链路追踪

排查性能如果从代码层面出发少不了堆栈分析,但是目前大部分服务都为了便于服务扩容、升级都做了微服务处理,日志分析排查免不了通过链路 ID 追踪日志《微服务分布式架构中,如何实现日志链路跟踪?

▐ 链路追踪日志改造 - RPC 接口

通过 restTemplate、Openfeign 的形式访问其他服务的接口时,就会携带起始位置生成的 traceId、spanId 到下一个服务单元。但是没有详细实现,这里做下简单补充便于后面理解与使用。

阅读 Spring-Web 源码,对于远程接口的调用拦截可以实 ClientHttpRequestInterceptor

拦截客户端 HTTP 请求。这个接口的实现可以注册到 RestTemplate ,以修改传出的 ClientHttpRequest 和/或传入的 ClientHttpResponse 。拦截器的主要入口点是 intercept(HttpRequest, byte[], ClientHttpRequestExecution) 。

计算 RPC 接口耗时与日志记录,这样在做接口分析的时候可以针对性能较差、耗时高的接口有针对性性排查分析。

远程服务的接口性能暂时不做分析,目前很明确耗时:1528ms 应该存在很大的性能问题。

▐ 链路追踪日志改造- 传播线程变量

但是目前只统计出远程接口耗时是远远不够的,我们需要知道接口总耗时以及对堆栈分析才能精准定位到问题。

记录 HTTP 监控信息

这里需要补充下不是所有的接口我们都需要捕捉和统计分析,我们可以统一接口规范。如页面请求统一以/data/开头,RPC 接口统一以/api/开头这样可以分别区分两则的统计信息,避免记录错乱。

▐ 链路追踪日志改造- 统计 RPC 调用次数

上面👆🏻的两处的处理目前也只能精确度到当前 HTTP 请求有哪些 PRC 接口请求?每个 PRC 接口请求耗时多少?作为核心服务不太会去关系业务服务的接口细节,如果需要针对 PRC 接口的主服务做进步性能分析即可。

因此还需要进步统计出所有 RPC 接口的总耗时和次总次数

通过“线程变量”传递 RPC 接口的请求的次数。记得先前有类似出路过服务之间的认证问题也是通过请求头传递。《Spring Cloud中如何保证各个微服务之间调用的安全性?

累计完请求数量继续传递下去,以此类推来统计 RPC 接口的请求总数

这里做了简单阈值限制,背景不难想到:如果一个接口频繁调用另外一个服务超过 20、30 次此时,我们就应该考虑服务之间数据同步或者映射问题。

所以在计算 RPC 接口的请求总次数加了阈值限制,若 RPC 调用次数超出范围则输出警告日志

▐ 链路追踪日志改造 - 链路日志统计展示

至于链路追踪日志的展示,自己使用就不用太关注图形化样式问题,这里建议直接使用 Thymeleaf 模板引擎进行渲染展示,也就有了文章开头的图片

三、总结

对于问题分析我们首先能遇到的总是一个较大的问题,在算法中我们常会用分治算法。一言以蔽之:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破。

回顾整个处理思路

  • 微服务日志埋点处理,记录链路日志并统计

  • 监听 HTTP 请求后,记录微服务服务之间 RPC 接口耗时

  • 监听 HTTP 请求后,记录 RPC 接口深度(请求次数)

  • 记录 RPC 请求总总耗时与总占比

至此算是完成了我们做链路日志分析的第一步:统计分析 HTTP 请求所触发的外部服务的性能消耗。

原创:微服务架构 | 如何利用好日志做性能分析?


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微服务架构是一种构建应用程序的方式,它将大型应用程序拆分为许多小型服务,每个服务运行在其自己的进程中,并通过网络进行通信。搭建微服务架构需要以下步骤: 1. 将应用程序拆分成多个服务,每个服务负责特定的功能 2. 使用服务网关来管理对服务的请求 3. 使用服务注册和发现来管理服务的位置和可用性 4. 使用消息队列或其他类型的异步通信来实现服务之间的通信 5. 实现负载均衡来提高系统的可用性和性能 6. 使用容器化技术来管理服务的部署和运行 7. 使用监控和日志记录来了解系统的运行情况 8. 使用数据隔离和微服务数据库来管理数据 ### 回答2: 微服务架构是一种将传统单体应用拆分为一组相互独立的小型服务的方式,每个服务都可以独立开发、部署和扩展,以提升系统的灵活性和可扩展性。 搭建微服务系统架构的步骤如下: 1. 业务拆分:首先,需要将原先的单体应用根据业务功能进行拆分,将每个功能模块独立为一个微服务,确保每个微服务的职责单一。 2. 服务通信:微服务之间需要进行通信,可以使用轻量级的协议和通信机制,如HTTP/REST、消息队列等。确定服务之间的接口和数据格式,确保服务之间的良好沟通。 3. 服务注册与发现:为了实现服务的动态发现和负载均衡,需要引入服务注册与发现的机制,如ZooKeeper、Consul等,服务启动时将自己注册到注册中心,并从注册中心获取其他服务的信息。 4. 数据管理:每个微服务都可以有自己的数据存储,可以选择传统的关系型数据库,也可以选择NoSQL数据库或分布式存储系统。确保数据的一致性和可靠性。 5. 容错与监控:引入容错机制,如断路器模式、降级策略等,确保系统的可用性和稳定性。同时,收集和监控微服务的运行指标和日志,及时发现和解决问题。 6. 部署与运维:对于每个微服务,可以独立进行部署、维护和扩展。使用容器化技术,如Docker,可以更加高效地进行部署和管理。 7. 安全性和权限管理:设计安全的身份认证和授权机制,保护系统的数据和功能。微服务之间的访问需要进行权限验证和控制。 8. 持续集成和交付:采用持续集成和交付的实践,确保微服务的快速迭代和发布。使用自动化工具和流程,减少人工干预,提高开发效率。 总之,搭建微服务系统架构需要充分考虑业务拆分、服务通信、数据管理、容错与监控、部署与运维、安全性和权限管理、持续集成和交付等方面,灵活使用不同的技术和工具,使得整个系统具备可扩展性、弹性和高可用性。 ### 回答3: 微服务系统架构的搭建可以分为以下几个步骤: 1. 定义业务边界:首先需要明确系统中各个微服务的业务边界和功能划分。通过对业务进行细致的分析和划分,将系统拆解为多个相对独立的微服务单元。 2. 设计接口和通信方式:每个微服务都需要定义清晰的接口和通信方式,以便实现各个微服务之间的交互和协同工作。可以使用轻量级的通信协议,例如RESTful API或消息队列。 3. 建立服务注册与发现机制:为了实现微服务的动态扩展和服务发现,需要建立服务注册与发现机制。可以使用开源工具如Zookeeper、Consul或者Etcd等来管理注册表,并提供服务查找和负载均衡的功能。 4. 实现独立部署和伸缩性:每个微服务都应该可以独立部署和伸缩,这样可以提高系统的可用性和可扩展性。可以使用容器技术如Docker来实现微服务的隔离和部署,同时结合自动化部署工具如Kubernetes或Docker Compose来简化管理。 5. 设计监控和治理机制:为了保障微服务系统的稳定和可靠性,需要建立完善的监控和治理机制。可以使用分布式追踪系统如Zipkin、ELK Stack等来监控服务间的调用链路,使用配置中心如Apollo或Nacos来统一管理配置信息,并使用日志和指标监控工具对各个微服务进行监控和报警。 6. 实现容错和容灾机制:微服务架构中,由于服务与服务之间的网络通信变得复杂,故障难以避免。因此,需要实现容错和容灾机制来保障系统的可靠性。例如使用熔断器模式(如Hystrix)来避免级联故障、使用服务降级和限流来保护核心服务等。 7. 防止数据一致性问题:由于微服务架构中数据的分布性,需要确保数据的一致性。可以使用分布式事务机制如TCC、Saga等来保证数据操作的一致性。 总之,微服务系统架构的搭建需要考虑多个方面,包括业务划分、接口设计、注册与发现、部署与伸缩、监控与治理、容错与容灾以及数据一致性等。一个良好的架构设计能够提高系统的可维护性、可伸缩性和可靠性,从而更好地满足不断变化的业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值