Kubernetes上的服务网格 Istio - 分布式追踪篇

摘要: 2017年5月,Google、IBM和Lyft发布了开源服务网格框架Istio,提供微服务的连接、管理、监控和安全保护。Istio提供了一个服务间通信的基础设施层,解耦了应用逻辑和服务访问中版本管理、安全防护、故障转移、监控遥测等切面的问题。

点此查看原文:http://click.aliyun.com/m/41483/

图片描述

微服务架构将复杂系统切分若干小服务,每个服务可以被独立地开发、部署和伸缩;微服务架构和容器(Docker/Kubernetes)是天作之合,可以进一步简化微服务交付,加强整体系统的弹性和健壮性。然而由大量的微服务构成的分布式应用架构也会增加运维、调试、和安全管理的复杂性。为了解决上述挑战,Spring Cloud和Dubbo/EDAS等微服务框架将服务治理能力内置在编程框架中。

2017年5月,Google、IBM和Lyft发布了开源服务网格框架Istio,提供微服务的连接、管理、监控和安全保护。Istio提供了一个服务间通信的基础设施层,解耦了应用逻辑和服务访问中版本管理、安全防护、故障转移、监控遥测等切面的问题。

Istio为希腊语,意思是“启航”,虽然是一个非常年轻的项目却得到了极大的关注,其生态发展非常迅猛。我们今天先关注一下在其分布式服务追踪(Distributed Tracing)相关的进展。

本文参考了 Istio 官方文档内容 https://istio.io/docs/tasks/telemetry/distributed-tracing.html

安装 Istio 
配置 Kubernetes 集群

我们可以使用Minikube或者阿里云容器服务Kubernetes集群进行验证。

Minikube的安装方式请参见Minikube - Kubernetes本地实验环境

由于我们将采用 Initializers 方式进行部署,需要运行如下命令开启相应的 Initializers 准入控制插件。

minikube start \--memory 4096 \
    --registry-mirror=https://registry.docker-cn.com \
    --extra-config=apiserver.Admission.PluginNames="Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota"

阿里云容器服务在1.8+版本以上的Kubernetes集群已经内置开启了 Initializers 插件,无需额外的配置工作。

注:由于部署Istio之后会为每个Pod注入sidecar,来接管服务通信,建议在独立的测试环境中进行验证。

需要根据集群管理页面信息,配置相应的连接信息

图片描述

下载 Istio 发行版

在 Istio releases页面 获取最新的安装包,解压到本地,或者执行如下命令

curl -L https://git.io/getLatestIstio | sh -

执行如下命令

# 切换工作目录到 Istio
cd istio-0.3.0
# 添加 istioctl client 到 PATH 环境变量
export PATH=$PWD/bin:$PATH

部署 Istio

# 部署 Istio 系统组件
kubectl apply -f install/kubernetes/istio.yaml
# 部署 Istio initializer 插件
kubectl apply -f install/kubernetes/istio-initializer.yaml

部署完毕后,可以用如下命令来验证 Istio 组件是否成功部署

$ kubectl get svc,pod  -n istio-system
NAME                TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)                                                            AGE
svc/istio-ingress   LoadBalancer   10.0.0.241   <pending>     80:31411/TCP,443:31972/TCP                                         22m
svc/istio-mixer     ClusterIP      10.0.0.146   <none>        9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP   22m
svc/istio-pilot     ClusterIP      10.0.0.253   <none>        15003/TCP,443/TCP                                                  22mNAME                                    READY     STATUS    RESTARTS   AGE
po/istio-ca-76dddbd695-jzgq4            1/1       Running   0          22m
po/istio-ingress-85fb769c4d-8jr4r       1/1       Running   0          22m
po/istio-initializer-7fcb8b7454-f68h8   1/1       Running   0          10s
po/istio-mixer-587fd4bbdb-wpbfr         3/3       Running   0          22m
po/istio-pilot-7db8db896c-wdmhp         2/2       Running   0          22m

等待所有的 Pod 进入运行状态,Istio 就已经部署完成了。

分布式服务追踪

部署测试应用BookInfo 
参照 BookInfo指南,部署应用。该应用由若干个微服务组成,每个微服务都通过容器方式进行部署。

图片描述

执行 如下命令

kubectl apply -f samples/bookinfo/kube/bookinfo.yaml

MiniKube 环境下执行如下命令获取相应的访问地址

export GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}')

阿里云Kubernetes集群已经为每个集群配置了SLB和Ingress

$ kubectl get ingress -o wide
NAME      HOSTS     ADDRESS          PORTS     AGE
gateway   *         112.74.xxx.xxx   80        2m

我们可以通过如下的方法来获得相应的地址

export GATEWAY_URL=$(kubectl get ingress -o wide -o jsonpath={.items[0].status.loadBalancer.ingress[0].ip})

当如下命令

curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage

返回 200 时,就表示应用已经成功部署,可以通过浏览器打开 http://${GATEWAY_URL}/productpage 来访问应用了

图片描述

部署分布式服务追踪

分布式追踪系统可以帮助观察服务间调用链,是诊断性能问题、分析系统故障的利器。

Istio 生态实现了对不同的分布式追踪系统的支持,包括Zipkin和Jaeger

Istio v0.3 提供了对Jaeger良好支持,测试方法如下

kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/all-in-one/jaeger-all-in-one-template.yml

部署完成之后,我们可以通过端口映射来访问Jaeger 控制面板:

kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 &

通过浏览器打开 http://localhost:16686

多访问几次测试应用,我们可以清楚的看到服务的调用链,

图片描述

图片描述

图片描述

Istio分布式追踪实现

Istio服务网格的核心是Envoy,是一个高性能的开源L7代理和通信总线。在Istio中,每个微服务都被注入了Envoy Sidecar,该实例负责处理所有传入和传出的网络流量。因此,每个Envoy Sidecar都可以监控所有的服务间API调用,并记录每次服务调用所需的时间以及是否成功完成。

每当微服务发起外部调用时,客户端Envoy会创建一个新的span。一个span代表一组微服务之间的完整交互过程,从请求者(客户端)发出请求开始到接收到服务方的响应为止。

在服务交互过程中,客户端会记录请求的发起时间和响应的接收时间,服务器端Envoy会记录请求的接收时间和响应的返回时间。

每个Envoy都会将自己的span视图信息发布到分布式追踪系统。当一个微服务处理请求时,可能需要调用其他微服务,从而导致因果关联的span的创建,形成完整的trace。这就需要由应用来从请求消息中收集和转发下列 Header

x-request-id 
x-b3-traceid 
x-b3-spanid 
x-b3-parentspanid 
x-b3-sampled 
x-b3-flags 
x-ot-span-context 
在通信链路中的Envoy,可以截取、处理、转发相应的Header。

Client Tracer                                              Server Tracer

┌──────────────────┐ ┌──────────────────┐ 
│ │ │ │ 
│ TraceContext │ Http Request Headers │ TraceContext │ 
│ ┌──────────────┐ │ ┌───────────────────┐ │ ┌──────────────┐ │ 
│ │ TraceId │ │ │ X─B3─TraceId │ │ │ TraceId │ │ 
│ │ │ │ │ │ │ │ │ │ 
│ │ ParentSpanId │ │ Extract │ X─B3─ParentSpanId │ Inject │ │ ParentSpanId │ │ 
│ │ ├─┼─────────>│ ├────────┼>│ │ │ 
│ │ SpanId │ │ │ X─B3─SpanId │ │ │ SpanId │ │ 
│ │ │ │ │ │ │ │ │ │ 
│ │ Sampled │ │ │ X─B3─Sampled │ │ │ Sampled │ │ 
│ └──────────────┘ │ └───────────────────┘ │ └──────────────┘ │ 
│ │ │ │ 
└──────────────────┘ └──────────────────┘ 
具体代码请参见 Istio 文档 https://istio.io/docs/tasks/telemetry/distributed-tracing.html

总结

Istio 借助良好的扩展机制和强大的生态正在加速 Service Mesh的应用和普及。除上文之外还有 Weave Scope, Istio Dashboard 和 Istio-Analytics 项目提供丰富的调用链路可视化和分析能力。

阿里云容器服务提供了托管的Kubernetes集群支持,了解更多阿里云容器服务内容, 请访问https://www.aliyun.com/product/containerservice


扫描二维码获取更多消息:

图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flowable实现流程回退功能

此版本为旧的版本&#xff0c;建议参看新的版本6.4.0 前期项目要求实现流程回退&#xff08;仅要求回退到上一节点&#xff09;&#xff0c;所使用的flowable版本是6.2.0-SANPSHOT。在网上收到的流程回退的例子都是activity的&#xff0c;然而activity的很多接口在flowable中都…

如何用ACM简化你的Spring Cloud微服务环境配置管理

摘要&#xff1a; 本文我们就如何使用阿里云ACM这样的配置管理产品在Spring Cloud中替代Spring Cloud Config帮助简化环境配置管理做一个简单的示例&#xff0c;帮助你理解基于ACM来简化微服务环境配置管理的方案&#xff0c;并会简单比较一下ACM与Spring Cloud Config方案的优…

flowable 新的驳回方式 ChangeActivityStateBuilder 多实例驳回 并行网关驳回 普通节点驳回

6.4.0 新增加了驳回的方式&#xff0c;真是对中国式流程的一种福音呀&#xff0c;感谢flowable创始人。 再也不为开发驳回流程发愁了&#xff0c;网上那些视频和修改源码真的是demo级别的&#xff0c;不能商业用。 只有心如流水的学习才是永远的发电机&#xff0c;不要幻想别…

解锁新姿势 |如何利用配置中心规范构建PaaS服务配置

摘要&#xff1a; 在上一篇文章中&#xff0c;我们以MQ和ACM为例&#xff0c;讨论了如何借助配置中心对消息进行限流管理的场景。在本文中&#xff0c;我们继续以该场景为例&#xff0c;讲述如何以规范的配置命名格式来进行限流设置。 点此查看原文&#xff1a;http://click.al…

flowable流程实例笔记(1)

RuntimeService 运行服务类 支持启动的方式 流程定义: 从这里获取资源文件. 执行实例: 流程实例中执行的每个环节.流程实例: 一个流程实例包括所有运行的节点,一个流程中流程实例只有一个.启动一个实例: public void startProcessInstanceByKey() {String processDefinitionK…

flowable6.4.2流程审批后涉及到的表

当流程全部走完后&#xff0c;act_ru_*表的数据清空了&#xff0c;全部移到了act_hi_*表

阿里云弹性高性能计算产品商业化正式发布

摘要&#xff1a; 来自全国500多家企业申请试用&#xff0c;结合客户的体验需求和反馈意见&#xff0c;不断地改善和打磨&#xff0c;弹性高性能计算商业版有了很大的优化&#xff0c;在产品性能和体验上都有全新的升级。 点此查看原文&#xff1a;http://click.aliyun.com/m/4…

php中 怎么去除,php如何去掉链接

php去掉链接的方法&#xff1a;1、删除内容中的超链接ereg_replace(]*)>([^,\\2,$content);ereg_replace("]*>|","",$content);2、消除包含特定词的超链接$find"this string is my find";$string替换掉了;//将超链接替换成的内容echo ereg…

RabbitMQ入门指南(八):MQ可靠性

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、MQ数据持久化 1.交换机持久化 2.队列持久化 3.消息持久化 4.生产者确认机制 二、LazyQueue 1.LazyQueue模式介绍 2.管理控制台配置Lazy模式 3.代码配置Lazy模式 4.更新已有队列为lazy模式 总…

MaxCompute常用语句汇总(更新ing)

摘要&#xff1a; 收集一些MaxCompute常用命令。 点此查看原文&#xff1a;http://click.aliyun.com/m/41645/ 大数据计算服务(MaxCompute&#xff0c;原名ODPS&#xff0c;产品地址&#xff1a;https://www.aliyun.com/product/odps)是一种快速、完全托管的TB/PB级数据仓库解决…

290种零食大统计,谁能唤起80、90后的童年回忆?|数据会说话

戳蓝字“CSDN云计算”关注我们哦&#xff01;数据分析&#xff1a;喜欢果脯的朱小五内容撰写&#xff1a;只爱辣条的王小九本文转自公众号『凹凸数读』1块钱能买到什么&#xff1f;对于80、90后的童年来讲&#xff0c;1块钱是4根冰棍&#xff0c;是10张辣片&#xff0c;是两包双…

php socket主动推送消息,PHP使用WebSocket主动推送【微信小程序接收】

WebSocket.jpegWebsocket是一种服务端和客户端可以持久连接的通信协议&#xff0c;我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架composer create-project topthink/think5.1.* tp5…

EDAS再升级!全面支持Spring Cloud应用

摘要&#xff1a; 近日&#xff0c;阿里中间件&#xff08;Aliware&#xff09;的企业级分布式应用服务EDAS宣布再次升级&#xff0c;全面支持Spring Cloud应用。 点此查看原文&#xff1a;http://click.aliyun.com/m/41644/ 近日&#xff0c;阿里中间件&#xff08;Aliware&am…

微博宕机复盘:什么样的技术架构,可支持80个明星并发出轨?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 张蓝予编辑 | 苏琦6月27日晚间&#xff0c;范冰冰李晨宣布分手&#xff0c;瞬间亿级的访问量&#xff0c;让微博再一次“崩溃”&#xff1a;范冰冰账号评论区无法加载&#xff0c;搜索“范冰冰李晨”显示失败。微博曾经夸下海…

flowable 动态多实例

<?xml version"1.0" encoding"UTF-8"?> <definitions xmlns"http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd"http://www.w3.org/2001/XMLSchema&quo…

为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

摘要&#xff1a; 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好&#xff0c;直接抄原文了)&#xff1a; Row-based storage stores atable in a sequence …

Hive精华问答 | Hive和传统数据库有什么不同?

Hive是一个数据仓库基础工具&#xff0c;它是建立在Hadoop之上的数据仓库&#xff0c;在某种程度上可以把它看做用户编程接口&#xff08;API&#xff09;&#xff0c;本身也并不存储和处理数据&#xff0c;依赖于HDFS存储数据&#xff0c;依赖MR处理数据。它提供了一系列对数据…

MaxCompute SQL原理解析及性能调优

摘要&#xff1a; 分享内容 介绍了ODPS SQL的基于mapreduce是如何实现的及一些使用小技巧&#xff0c;回顾了mapreduce各个阶段可能产生的问题及相应的处理方法&#xff0c;同时介绍了一些应对数据倾斜的处理方法&#xff0c;最后介绍了一些关于数据集构造、特征选择的技巧帮助…

flowable用户组的处理

背景 flowable有自己的用户账号信息&#xff0c;用户信息&#xff0c;用户组信息&#xff0c;其实这些用户信息都我们系统可能都存在&#xff0c;那么我们如何去使用一份数据呢&#xff1f; 1.我们可以建立视图直接取我们的组织信息&#xff0c;这个可以参考相关的文档 2.我们…

微软 SQL Server 2019 将免费支持 Java;Rancher Labs获2500万美元融资;腾讯云进军日本市场……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go “2019世界计算机大会”新闻…