作者:justmine

头条号:大数据与云原生

微信公众号:大数据与云原生

创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

为了方便阅读,微信公众号已按分类排版,后续的文章将在移动端首发,想学习云原生相关知识,请关注我

一、回顾

云原生 - 体验Istio的完美入门之旅(一)

云原生 - Why is istio(二)

[请持续关注...]

如前所述,业务微服务化后,每个单独的微服务可能会有很多副本,多个版本,这么多微服务之间的相互调用、管理和治理非常复杂,Istio统一封装了这块内容在代理层,最终形成一个分布式的微服务代理集群(服务网格)。管理员通过统一的控制平面来配置整个集群的应用流量、安全规则等,代理会自动从控制中心获取动态配置,根据用户的期望来改变行为。

话外音:借着微服务和容器化的东风,传统的代理摇身一变,成了如今炙手可热的服务网格。

Istio就是上面service mesh架构的一种实现,通过代理(默认是envoy)全面接管服务间通信,完全支持主流的通信协议HTTP/1.1,HTTP/2,gRPC ,TCP等;同时进一步细分控制中心,包括Pilot、Mixer、Citadel等。

话外音:后面系列会详细介绍控制中心的各个组件,请持续关注。

整体功能描述如下:

  • 连接(Connect)

    控制中心从集群中获取所有微服务的信息,并分发给代理,这样代理就能根据用户的期望来完成服务之间的通信(自动地服务发现、负载均衡、流量控制等)。

  • 保护(Secure)

    所有的流量都是通过代理,当代理接收到未加密流量时,可以自动做一次封装,把它升级成安全的加密流量。

  • 控制(Control)

    用户可以配置各种规则(比如 RBAC 授权、白名单、rate limit 、quota等),当代理发现服务之间的访问不符合这些规则,就直接拒绝掉。

  • 观察(Observe)

    所有的流量都经过代理,因此代理对整个集群的访问情况知道得一清二楚,它把这些数据上报到控制中心,那么管理员就能观察到整个集群的流量情况。

二、前言

作为服务网格的一个完整解决方案,为了向运维人员提供丰富而深入的控制,同时又不给服务开发人员带来负担,Istio被设计为高度模块化和可扩展的平台,涉及到众多的组件,它们分工协作,共同组成了完整的控制平面。为了更好地学习如何运用Istio的连接、安全、控制、可观察性全面地治理分布式微服务应用,先从战略上鸟瞰Istio,进一步从战术上学习Istio将更加容易,故作者决定从可观察性开始Istio的布道,先体验,再实践,最后落地,一步步爱上Istio,爱上云原生,充分利用云资源的优势,解放应用开发工程师的双手,使他们仅仅关注业务实现,让专业的人做专业的事,为企业创造更大的价值。

三、Istio的可观察性

1. 日志

当流量流入服务网格中的微服务时,Istio可以为每个请求生成完整的记录,包括源和目标的元数据等。使运维人员能够将服务行为的审查控制到单个微服务的级别。

2. 监控

Istio基于监控的4 个黄金信号(延迟、流量、错误、饱和)来生成一系列的服务指标,同时还提供了一组默认的服务网格监控大盘。

话外音:Istio还为服务网格控制平面提供了更为详细的监控指标。

3. 分布式跟踪

Istio根据采样率为每个请求生成完整的分布式追踪轨迹,以便运维人员可以理解服务网格内微服务的依赖关系和调用流程。

四、Why - 为什么需要分布式跟踪?

当业务微服务化后,一次业务请求,可能会涉及到多个微服务,分布式跟踪可以对跨多个分布式服务网格的1个请求进行追踪分析,并通过可视化的方式深入地了解请求的延迟,序列化和并发,充分地了解服务流量实况,从而快速地排查和定位问题。

五、What - Istio的分布式跟踪?

概述

Istio利用Envoy 的分布式追踪功能提供了开箱即用的追踪集成。确切地说,Istio 提供了安装各种各种追踪后端服务的选项,并且通过配置代理来自动发送追踪span到追踪后端服务。

话外音:Istio目前支持的追踪后端服务包括Zipkin、Jaeger、LightStep。

话外音:Istio分布式追踪的整体功能,请参考文末链接。

采样率

默认情况下,使用demo配置文件安装时,Istio会捕获所有请求的追踪信息,即每次访问 /productpage 接口时,都可以在dashboard中看到一条相应的追踪信息。此采样频率适用于测试或低流量网格。对于高流量网格(如:生产环境),请通过下面的两种方法之一来降低追踪采样频率:

  • 在安装时,使用可选项 values.pilot.traceSampling 来设置采样百分比。

  • 在运行时,通过编辑 istio-pilot deployment并通过以下步骤来改变环境变量:

    root@just:~# kubectl -n istio-system get deploy istio-pilot -o yaml
    apiVersion: extensions/v1beta1
    kind: Deployment
    [...]
    name: istio-pilot
    namespace: istio-system
    [...]
    env:
    - name: PILOT_TRACE_SAMPLING
    value: "1"
    [...]

Istio默认的追踪采样率为1%,即100个请求生成一次追踪报告,有效值的范围从 0.0 到100.0,精度为 0.01。

六、How - Istio如何配置分布式跟踪?

本篇以zipkin为例,体验Istio的分布式追踪功能。

准备工作

请先部署Istio系统和在线书店例子,详情请参考:云原生 - 体验Istio的完美入门之旅(一)

部署

istioctl manifest apply --set values.tracing.enabled=true \
--set values.tracing.provider=zipkin

模拟请求

要查看追踪数据,必须向服务发送请求。请求的数量取决于Istio的追踪采样率,默认为1%,即在第一个追踪报告可见之前,需要发送至少100个请求。

使用如下命令向productpage服务发送200个请求:

for i in `seq 1 200`; do curl -s -o /dev/null http://$GATEWAY_URL/productpage; done

查看追踪报告

概览

从上可以看出,产生了两份追踪报告,完全符合追踪采集率。

请求完整链路

Span详情

关于追踪报告的分析,这里就不赘述了。

七、总结

本篇先回顾了微服务架构的痛点,以及服务网格的本质,然后大致概述了Istio的整体功能,最后从why、what、how的角度体验了Istio的分布式跟踪特性。除了分布式跟踪,Istio的可观察性还包括:日志、监控,敬请期待,未完待续。

八、最后

如果有什么疑问和见解,欢迎评论区交流。

如果觉得本篇有帮助的话,欢迎推荐转发

如果觉得本篇非常不错的话,可以请作者吃个鸡腿,创作的源泉将如滔滔江水连绵不断,嘿嘿。

九、参考

https://istio.io/docs/tasks/observability/distributed-tracing/overview

https://istio.io/docs/tasks/observability/distributed-tracing/zipkin

https://www.envoyproxy.io/docs/envoy/v1.12.0/intro/arch_overview/observability/tracing

云原生 - Istio可观察性之分布式跟踪(三)的更多相关文章

  1. 云原生 - Istio可观察性之监控(四)

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  2. DTCC 2020 | 阿里云李飞飞:云原生分布式数据库与数据仓库系统点亮数据上云之路

    简介: 数据库将面临怎样的变革?云原生数据库与数据仓库有哪些独特优势?在日前的 DTCC 2020大会上,阿里巴巴集团副总裁.阿里云数据库产品事业部总裁.ACM杰出科学家李飞飞就<云原生分布式数 ...

  3. 云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析

    POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL.PostgreSQL.Oracle.POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB ...

  4. 规模化落地云原生,阿里云即将重磅亮相 KubeCon China

    2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...

  5. 产品对话 | 愿云原生不再只有Kubernete

    从2013年,云原生(Cloud Native)的概念由 Pivotal 的 MattStine 首次提出,到现在,其技术细节不断得到社区的完善.云原生逐渐演变出包括 DevOps.持续交付.微服务. ...

  6. AI云原生浅谈:好未来AI中台实践

    AI时代的到来,给企业的底层IT资源的丰富与敏捷提出了更大的挑战,利用阿里云稳定.弹性的GPU云服务器,领先的GPU容器化共享和隔离技术,以及K8S集群管理平台,好未来通过云原生架构实现了对资源的灵活 ...

  7. 云原生 - 体验Istio的完美入门之旅(一)

    作者:justmine 头条号:大数据达摩院 微信公众号:大数据处理系统 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便大家阅读,可以关注头条号或微信公众号,后 ...

  8. 云原生 - Why is istio(二)

    出处:https://cizixs.com/2018/08/26/what-is-istio 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 前言 随着微服务架构的流行, ...

  9. 云原生ASP.NET Core程序的可监测性和可观察性

    分布式应用程序很复杂,给开发人员调试和修复生产问题带来了一系列挑战.尽管微服务架构可帮助维持一支规模较小,可以自主工作并专注于独立业务团队,但由于其分布式性质,它带来了新的挑战.例如,在业务交易过程中 ...

随机推荐

  1. HMaster/HRegion Server 工作原理

      1.HBase系统架构       2. HRegion Sever架构图 0.94之前的版本 0.96+的版本 WAL: 即Write Ahead Log, 是HDFS上一个文件,早期版本中称为 ...

  2. 微信小程序获取多个input和textarea的值(es6加微信小程序APi)

    wxml js 俩行即可解决,money1,money2,money3

  3. lua字符串分割函数[适配中文特殊符号混合]

    lua的官方函数里无字符串分割,起初写了个简单的,随之发现如果是中文.字符串.特殊符号就会出现分割错误的情况,所以就有了这个zsplit. function zsplit(strn, chars) f ...

  4. 【学习笔鸡】整体二分(P2617 Dynamic Rankings)

    [学习笔鸡]整体二分(P2617 Dynamic Rankings) 可以解决一些需要树套树才能解决的问题,但要求询问可以离线. 首先要找到一个具有可二分性的东西,比如区间\(k\)大,就很具有二分性 ...

  5. $CH5104\ I-country$ 线性$DP$

    CH Sol ”凸联通块“是什么意思呢? 其实就是图形的左端点先减小再增大,右端点先增大再减小 阶段 考虑到第k行,已经选了i个格子 状态 1.第i行的左端点与右端点 2.这一行的左端点相对于上一行的 ...

  6. 大数据框架开发基础之Zookeeper入门

    Zookeeper是Hadoop分布式调度服务,用来构建分布式应用系统.构建一个分布式应用是一个很复杂的事情,主要的原因是我们需要合理有效的处理分布式集群中的部分失败的问题.例如,集群中的节点在相互通 ...

  7. 物理ceph集群+K8s

    前提条件 在Ceph为k8s创建一个pool ceph osd pool create k8s 128 创建admin用户 ceph auth get-or-create client.admin m ...

  8. 日志冲突解决方案(基于gradle)

    日志冲突解决方案 前提:我使用gradle管理项目 最近在项目中需要用curator客户端操作zookeeper,在maven仓库拉取的jar包导致日志冲突,会报以下的错误: 经常会有如上图2处红色框 ...

  9. (二)Angular+spring-security-cas前后端分离(基于ticket代码实现

    一.前端实现 1.1.路由守卫(用于拦截路由认证) import { Injectable, Inject } from "@angular/core"; import { Can ...

  10. 输入n个字符串,找出最长最短字符串(若有个数相同的,都打印出来)

    首先,要求找到最长最短字符串,我们应该用数组将其存起来,输入的个数是不固定的,我们就可以用Scanner获取要输入的个数,最终找到的个数也不固定,我们可以封装两个方法,并且返回值类型为数组. 我遇到的 ...