图解kubernetes中的api多版本机制实现

栏目: IT技术 · 发布时间: 4年前

内容简介:在web开发中随着版本的更新迭代,通常要在系统中维护多个版本的api,多个版本的api在数据结构上往往也各不相同,今天就来一起学习下kubernetes中的Scheme机制是如何解决这个问题的,如何借助HTTP请求里面的数据进行反序列化操作通常首先是webServer先进行Http协议的处理,然后解析成基础的webServer内部的一个Http请求对象, 通常该对象持有对应请求的请求头和底层对应的字节序列(从socket流中读取)

在web开发中随着版本的更新迭代,通常要在系统中维护多个版本的api,多个版本的api在数据结构上往往也各不相同,今天就来一起学习下kubernetes中的Scheme机制是如何解决这个问题的,如何借助HTTP请求里面的数据进行反序列化操作

1. web请求的处理流程

1.1 HTTP请求处理流程

图解kubernetes中的api多版本机制实现

通常首先是webServer先进行Http协议的处理,然后解析成基础的webServer内部的一个Http请求对象, 通常该对象持有对应请求的请求头和底层对应的字节序列(从socket流中读取)

接着首先会通常根据对应的编码格式来进行反序列化,完成从字节序列到当前接口的业务模型的映射, 然后在交给业务逻辑处理,从而最终进行持久化存储, 本文的重点也就在 反序列化部分

2.模型映射的实现

2.1 描述资源版本信息

/api/{version}/{resource}/{action}

上面是一个基础的web url通常我们都会为每个版本注册一个对应的URL, 其中会包含很关键的两个信息即version与resource,通过这两个信息,通常我们就可以知道这可能是某个资源的那个版本, 如果我们把后面的action也包裹进来,我们通常就可以知道对应的资源的那个具体操作

2.2 Group组信息

图解kubernetes中的api多版本机制实现

在微服务流行的今天我们通常会为按照业务功能来进行微服务的切分,本质上一个微服务可能就是实现某个具体业务场景的功能集合,比如用户系统通常会包含用户的所有相关操作,在kubernetes中也有类似的概念就是所谓的Group

POST /apis/batch/v1beta1/namespaces/{namespace}/cronjobs
POST /apis/apps/v1/namespaces/{namespace}/daemonsets

我们来看一个实例这是一个创建daemonsets和cronjobs的url, 如果按照Group、resource、version来进行拆分可以拆成如下:batch、v1beta1、cronjobs和apps、v1、daemonsets,也就是大家尝试的GroupVersionKind,其中kind对应的就是resource

2.3 模型映射的实现

图解kubernetes中的api多版本机制实现

我们通过url里面获取到资源的GroupVersionKind信息,如何将其映射为一个具体的类型呢? 这貌似就很简单了结合反射和map来进行就可以了,我们通过url获取到对应想的GVK信息,然后在通过我们的映射表,就知道对应的模型是哪个,接下来就只需要进行转换就行了

gvkToType map[schema.GroupVersionKind]reflect.Type

3.反序列化实现

3.1 解码机制

那如何将对应的Http里面的数据流反序列化成内部的一个对象呢,别忘记了是Http协议, 肯定就是header头里面的信息了,我们通过header头里面的序列化就可以知道对应的编码格式,只需要调用对应格式的解码就可以完成了

Content-Type: "application/json"

3.2 默认对象

图解kubernetes中的api多版本机制实现

如果要将json格式的字节数组进行解码通常要进行如下操作,我们需要传入一个目标对象的指针,然后由json将对应的字节数据解析到目标对象中,我们也需要这样一个对象,用于存储反序列化的结果

func Unmarshal(data []byte, v interface{}) error {}

那只要我再提供一个当前版本对应的对象构造函数是不是就可以呢?答案是的

func() Object{ return 目标对象 },

4. 设计总结

图解kubernetes中的api多版本机制实现

首先在进行url注册的时候,我们构造出对应url映射的资源的版本信息即GroupVersionKind,后续的很多操作我们可以通过对应的版本映射获取对应的目标操作或者对象,然后再通过Header里面的字段获取对应的解码器,并将Body里面的字节序列进行解码到目标对象,就可以实现多版本资源的映射和反序列化操作了

kubernetes学习笔记地址: https://www.yuque.com/baxiaos...

微信号:baxiaoshi2020 图解kubernetes中的api多版本机制实现

关注公告号阅读更多源码分析文章 图解kubernetes中的api多版本机制实现

更多文章关注 www.sreguide.com

本文由博客一文多发平台 OpenWrite 发布!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python编程实践

Python编程实践

Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson / 唐学韬 / 机械工业出版社华章公司 / 2011-12-31 / 49.00元

Python是当今世界流行的编程语言之一。本书共15章,通过一些短小精悍的交互式Python脚本帮助学生进行练习,并在这个过程中掌握诸如数据结构、排序和搜索算法、面向对象编程、数据库访问、图形用户界面等基本概念以及良好的程序设计风格。本书既是一本注重科学的计算机科学专业教材,也是一本目标明确的Python参考书。 本书语言风格言简意赅,图表丰富,简单实用,是一本优秀的Python入门级读物,......一起来看看 《Python编程实践》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器