所以服务追踪是分布式系统中必不可少的功能,它能够帮助我们查询一次用户请求在系统中的具体执行路径,以及每一条路径的上下游的详细情况,对于追查问题十分有用 。
它的核心理念就是调用链:通过一个全局唯一的 ID 将分布在各个服务节点上的同一次请求串联起来,从而还原原有的调用关系,可以追踪系统问题、分析调用数据并统计各种系统指标 。
- traceId: 用于标识某一次具体的请求 ID 。当用户的请求进入系统后,会在 RPC 调用网络的第一层生成一个全局唯一的 traceId,并且会随着每一层的 RPC 调用,不断往后传递,这样的话通过 traceId 就可以把一次用户请求在系统中调用的路径串联起来 。
- spanId: 用于标识一次 RPC 调用在分布式请求中的位置 。当用户的请求进入系统后,处在 RPC 调用网络的第一层 A 时 spanId 初始值是 0,进入下一层 RPC 调用 B 的时候 spanId 是 0.1,继续进入下一层 RPC 调用 C 时 spanId 是 0.1.1,而与 B 处在同一层的 RPC 调用 E 的 spanId 是 0.2,这样的话通过 spanId 就可以定位某一次 RPC 请求在系统调用中所处的位置,以及它的上下游依赖分别是谁 。
- annotation: 用于业务自定义埋点数据,可以是业务感兴趣的想上传到后端的数据,比如一次请求的用户 UID 。
故障处理系统故障是避免不了的,虽然微服务架构做了服务拆分,不至于像单体架构那样整体崩溃,但由于其整体复杂度也大大提升,故障处理也更加困难 。
文章插图
限流顾名思义,限流就是限制流量 。通常情况下,系统能够承载的流量根据集群规模的大小是固定的,可以称之为系统的最大容量 。
当真实流量超过了系统的最大容量后,就会导致系统响应变慢,服务调用出现大量超时,反映给用户的感觉就是卡顿、无响应 。
所以,应该根据系统的最大容量,给系统设置一个阈值,超过这个阈值的请求会被自动抛弃,这样的话可以最大限度地保证系统提供的服务正常 。
熔断熔断和限流还不太一样,上面我们可以看到限流是控制请求速率,只要还能承受,那么都会处理,但熔断不是 。
在一条调用链上,如果发现某个服务异常,比如响应超时 。那么调用者为了避免过多请求导致资源消耗过大,最终引发系统雪崩,会直接返回错误,而不是疯狂调用这个服务 。
降级什么是降级呢?降级就是通过停止系统中的某些功能,来保证系统整体的可用性 。
降级可以说是一种被动防御的措施,为什么这么说呢?因为它一般是系统已经出现故障后所采取的一种止损措施 。
容器化单体应用拆分成多个微服务后,能够实现快速开发迭代,但随之带来的问题是测试和运维部署成本的提升 。
而容器技术正好可以很好的解决这些问题,目前最流行的当属 Docker 莫属 。
文章插图
微服务容器化运维主要涉及到以下几点:
- 镜像仓库
- 容器调度
- 服务编排
容器调度这个阶段主要是解决在哪些机器上启动容器的问题,特别是规模比较大的公司,一般有物理机集群,虚拟机集群,私有云和公有云 。对接这么多不同的平台,难度还是不小的 。
推荐阅读
- 使用 Python 构建 Web 应用程序从未如此简单——从 Pynecone 开始
- MongoDB数据库性能监控看这一篇就够了
- MySql主从复制配置,你了解吗?来看这篇,全懂了
- 教师|学生“理想职业调研”:从想当科学家,变成网红明星,值得深思
- 纵横永生从风云开始?永生 怎么在起点上搜不到了 搜 梦入神机 也没看到永生啊 怎么回事?
- 求职|生活一团乱麻时,如何从中理出头绪来?
- 车辆工程毕业后从事什么工作 车辆工程专业就业
- 娱乐圈|假发假臀假肌肉,“从头假到脚”,还有什么是真的?
- 看淡,心静,积极的句子 清心寡欲的文章
- 赵文瑄|假发假臀假肌肉,大半个娱乐圈“从头假到脚”,还有什么是真的?