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中都…

java shareable_spring中@Resource和@Autowired理解详解_编程语言_IT虾米网

Resource在bean注入的时候使用&#xff0c;Resource所属包其实不是spring,而是javax.annotation.Resource&#xff0c;只不过spring支持该注解Resource里有name,lookup,type,authenticationType,shareable,mappedName,description这几个属性具体看源码结构截图0、可以直接在要注…

如何用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…

php email,两种PHP邮件发送的方式

有不少程序员在用PHP发送邮件的时候会遇到几个问题&#xff0c;那么遇到问题就要有解决问题的思路&#xff0c;本文就是根据php实现邮件发送的思路&#xff0c;整理下来的一篇文章&#xff0c;在遇到不同问题时给出的不同解决方法&#xff0c;感兴趣的小伙伴们可以参考一下。一…

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…

Flowable 6.4 多实例会签 审批人设置、结果判断、会签后走向

参考文章&#xff1a;http://huan1993.iteye.com/blog/2249764 第一部分是部署文件的大致说明&#xff0c;其他文章也有介绍&#xff0c;熟悉的可以跳过 首先部署文件中&#xff1a; <userTask id"_7" name"评估" flowable:assignee"${per}"…

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…

flowable 实现多实例-会签-动态配置人员 参考demo

会签 即多人执行当前任务 设置判断数 通过 例如&#xff1a;设置了是半数通过即可通过当前节点 如果当前是4人那就是2人即通过 如果是6人那就是三人即通过 如果是5人 即三人通过 看各位的判断值是如何书写 这个值是根据各位需求改变的 以下是xml <?xml version"1.0&q…

微博宕机复盘:什么样的技术架构,可支持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…

手机站的view.php,织梦网站文章内容页动态地址plus/view.php路径修改

织梦系统的漏洞很多来自plus目录&#xff0c;一般的文章站根本用不了那么多功能&#xff0c;因此可以考虑直接把整个plus文件夹删除掉。在发布文章时要预览文章&#xff0c;因此我把plus下除了view.php 和 img文件夹(存放样式图标)的其他文件都删除了。但是plus也容易暴露问题&…