Redhat 提供 Istio 在线交互式教学

Redhat 新近为用户提供了 Istio 的交互式学习工具,基于 Openshift 和最新的 Istio 0.6,试用了一下,主要有三个方面让我非常满意:

  1. 无需注册即可使用。
  2. 不受国内网络限制。
  3. 精心调校的示例应用和相关规则。

以上优点让这一工具的运行非常流畅,能够完整、直观并快速的为用户提供一个对于 Istio 的第一印象。下面用著名的老大难问题——断路器的课程,来看看这一教学工具的好处。

首先进入系列教程的首页。页面上排布了一系列的 Service Mesh 相关教程,分别是一个直通教程,外加八个 Workshop 环节,这里我们用第七个,也就是断路器的 Workshop 来看看这一教程的使用过程。

启动服务

进入首页之后,点击醒目的红色按钮,进入场景。会看到三栏式的页面:

  • 左侧为教程区域:注意这里深色背景的文字,点击后是会作为命令输出到 Shell 中进行执行的。
  • 右上角为文件浏览区:点击文件名称,会打开文件内容浏览区域。
  • 右下角是交互式 Shell

点击左侧教程区域的文字,./install-microservices.sh,或者在 Shell 中直接输入,两种方式的结果是一样的,会在当前集群中下载、构建并启动微服务。

服务启动之后,可以使用oc get pods -w查看 Pod 运行情况,所有 Pod 成功启动之后,就可以跟进教程的curl指令验证启动服务的输出了。

安装 Siege

这一步骤安装 Siege 工具,用于后续的负载省城工作。

根据最大连接以及排队请求情况进行熔断

第一步首先创建了一个路由规则,这一规则在服务recommandation的 v1 和 v2 版本间进行 1:1 的流量分配。

然后使用siege -r 2 -c 20 -v,也就是一共20并发,每并发两次请求的方式对服务进行测试。应该会得到这样的结果:

Transactions:                     40 hits
Availability:                 100.00 %
Elapsed time:                  15.45 secs
Data transferred:               0.00 MB
Response time:                  4.62 secs
Transaction rate:               2.59 trans/sec
Throughput:                     0.00 MB/sec
Concurrency:                   11.95
Successful transactions:          40

接下来会创建一个熔断规则,其中的文件链接点击会出现规则的文本,声明了针对v2服务的熔断规则,下面节选关键内容:

maxConnections: 1 # 最大连接数
httpMaxPendingRequests: 1 # 最大排队数
sleepWindow: 2m # 休眠窗口
httpDetectionInterval: 1s # 采样频率
httpMaxEjectionPercent: 100 # 最大熔断比例,此处为 100%
httpConsecutiveErrors: 1 # 最大错误数量
httpMaxRequestsPerConnection: 1 # 每连接最大请求

在规则中可以看到这一服务的要求变得非常脆弱,不能出错、不能并发,每秒钟都会进行检查。

使用 Siege 重复测试,会发现大量的 503 返回,也就是针对v2服务的熔断措施生效了。

Pod 的排除操作

第四节模拟了断路器从负载均衡池中剔除故障 Pod 的情景:

  1. v1v2两个版本的服务都加入同样的熔断设置。
  2. 模拟v2的故障情况。
  3. 会发现重新测试,v2出现一次故障之后,就被排除在响应列表之外了。

加入重试操作

在上一节的基础上,又加入一个重试操作:

httpReqRetries:
    simpleRetry:
      perTryTimeout: 1s # 一秒钟超时
      attempts: 3 # 重试三次

这样就很符合我们日常服务过程中的策略设置了:如果服务中部分实例发生故障,则停止向其发送请求,转而向同一服务的其他健康实例重发请求。

结语

根据这个例子可以看出,这一交互课程不仅涵盖了 Istio 官方文档中的 Task 内容,同时还加入了更加接近实战要求的丰富规则,应该会对 Istio/Service Mesh 普及产生非常有力推动。

链接: https://learn.openshift.com/servicemesh