开发者社区> 冬岛> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Knative ServerlessService 介绍

简介: ServerlessService 简称: SKS, 全称:Serverless Kubernetes-style Service 社区文档: https://docs.google.com/document/d/1byHQL6kePDZq6Qt4MqB-g4BDfiaJsfDPGb5oJEK1Ldo/edit?ts=5c81373b# https://docs.
+关注继续查看

ServerlessService 简称: SKS, 全称:Serverless Kubernetes-style Service 社区文档:

简单的解释

Knative 中 Autoscaler 是负责 KPA 伸缩的,并且在没有流量的时候可以缩容到零,而具体请求的流量是通过 Route 来实现的。那么 Route 和 Autoscaler 这两个看似独立的功能其实是需要紧密的配合的。否则 Autoscaler 都把 Pod 缩容到零了 Route 还在往老的 Revision 上面转发流量就会导致服务异常。所以 SKS(Serverless Kubernetes-style Service) 就是解决这个问题的。

目前的路由切换机制以及问题

image

首先从上图可以看出来目前是通过 Route 切换后端的 service 名字实现当 revision 缩容到零的时候路由转发到 activator 上面,但是这个过程需要 istio 重新下发 virtualService 并且没有一个检查机制,不知道 istio 是否下发完成。

参见如下三个代码片段:

从上面的代码片段中可以发现,activator 想要把一个 revision 缩容到零需要先标记为 inactive 状态,然后强制等待至少 30s,这 30s 其实就是在等待 istio virtualService 生效。这里有两个问题:

istio virtualService 如果在 30s 内已经生效了那多余的等待就是浪费的
如果负载很高的时候 30s 也不一定能够生效,所以也可能会失败
根本原因是两边的信息没有确认机制,目前仅仅是通过 30s 大概同步一下。#2949 这个 issue 有人提出了这个问题。

SKS(Serverless Kubernetes-style Service) 解决思路

State #1: Steady State

image

State #2: Scaled-to-Zero

image

State #3 (Prospective): Overload / Underprovisioned

image

Scale to Zero 时序图 : 最关键的就是这张时序图

image

为了解决这个问题所以提出了 SKS 的想法。SKS 有两个核心点:

  1. 加上了强制确认机制,SKS controller 会主动向发起请求确保 activator 路由生效之后再进行缩容到零的操作
  2. 从始至终 Route 后端对应的 service 的名字是不会变化。所以 virtualService 本身不需要重新下发
    不过也有一个问题:因为 istio 路由转发的原理也是通过监听 endpoints 然后直接向EndPoint 转发,而不是向 ClusterIP,所以即便 SKS controller 探测到 activator 成功了也不代表 istio 能够探测成功。不过这个生效时间差就很小了。

把问题降维到这个程度基本上就解决了,目前社区认为这个时间还是可以接受的。因为在 Kubernetes 体系中 cloud-controller-manager 本身的实现机制和这个过程是一样的。Kubernetes 中当有 pod 需要删除时 controller-manager 会在 EndPoint 中摘除相关的 pod 信息但也不会等待 cloud-controller-manager 完成 slb 的摘除。这里面还有一个 pod 优雅下线的逻辑一起配合生效,关于 Kubernetes pod 流量摘除的策略后续再单独介绍。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于 Knative 打造生产级 Serverless 平台 | KubeCon NA2019
本文基于 Knative 构建一个优秀的 Serverless 计算平台,详细分析如何用独特的技术,解决性能、容量、成本三大问题。欢迎阅读~
986 0
4-AIII--Service跨进程通信:aidl
零、前言 [1]. aidl:Android Interface definition language(安卓接口定义语言),目的:提供进程间的通信接口 [2].
1000 0
GeoServer添加不自带的坐标系
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/80478838 原文:http://www.
1049 0
SQL Server 2005 Service Pack 4 下载地址
版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢。 https://blog.csdn.net/testcs_dn/article/details/79914857 下载地址:http://www.catalog.update.microsoft.com/search.aspx?q=kb2463332 对于 Express 版本 居然是 具有高级服务的~~ 版本可用。
1018 0
调用webservice
利用webservice查询手机号码归属地 实现方法: Android客户端可以通过在Http的基础上使用SOAP调用webservice服务器上的API 第一步:在src下新建一个xml文件.
703 0
+关注
冬岛
Kubernetes、Knative、云原生
文章
问答
来源圈子
更多
容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级 Kubernetes 容器化应用的全生命周期管理。容器服务 Kubernetes 版简化集群的搭建和扩容等工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的 Kubernetes 容器化应用运行环境。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
Play with Serverless Kubernetes
立即下载
Kubernetes在大规模场景下的service性能优化实战
立即下载
Kubernetes在阿里云上的最佳实践
立即下载