91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用kubernetes中的Scheme機制進行反序列化的操作

發布時間:2020-05-26 15:33:45 來源:億速云 閱讀:1008 作者:鴿子 欄目:云計算

在web開發中隨著版本的更新迭代,通常要在系統中維護多個版本的api,多個版本的api在數據結構上往往也各不相同,今天就來一起學習下kubernetes中的Scheme機制是如何解決這個問題的,如何借助HTTP請求里面的數據進行反序列化操作

1. web請求的處理流程

1.1 HTTP請求處理流程

使用kubernetes中的Scheme機制進行反序列化的操作
通常首先是webServer先進行Http協議的處理,然后解析成基礎的webServer內部的一個Http請求對象, 通常該對象持有對應請求的請求頭和底層對應的字節序列(從socket流中讀取)
接著首先會通常根據對應的編碼格式來進行反序列化,完成從字節序列到當前接口的業務模型的映射, 然后在交給業務邏輯處理,從而最終進行持久化存儲, 本文的重點也就在反序列化部分

2.模型映射的實現

2.1 描述資源版本信息

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

上面是一個基礎的web url通常我們都會為每個版本注冊一個對應的URL, 其中會包含很關鍵的兩個信息即version與resource,通過這兩個信息,通常我們就可以知道這可能是某個資源的那個版本, 如果我們把后面的action也包裹進來,我們通常就可以知道對應的資源的那個具體操作

2.2 Group組信息

使用kubernetes中的Scheme機制進行反序列化的操作
在微服務流行的今天我們通常會為按照業務功能來進行微服務的切分,本質上一個微服務可能就是實現某個具體業務場景的功能集合,比如用戶系統通常會包含用戶的所有相關操作,在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中的Scheme機制進行反序列化的操作
我們通過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中的Scheme機制進行反序列化的操作
如果要將json格式的字節數組進行解碼通常要進行如下操作,我們需要傳入一個目標對象的指針,然后由json將對應的字節數據解析到目標對象中,我們也需要這樣一個對象,用于存儲反序列化的結果

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

那只要我再提供一個當前版本對應的對象構造函數是不是就可以呢?答案是的

func() Object{ return 目標對象 },

4. 設計總結

使用kubernetes中的Scheme機制進行反序列化的操作
首先在進行url注冊的時候,我們構造出對應url映射的資源的版本信息即GroupVersionKind,后續的很多操作我們可以通過對應的版本映射獲取對應的目標操作或者對象,然后再通過Header里面的字段獲取對應的解碼器,并將Body里面的字節序列進行解碼到目標對象,就可以實現多版本資源的映射和反序列化操作了

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梁河县| 子长县| 精河县| 确山县| 乐至县| 上林县| 郎溪县| 青龙| 武陟县| 利辛县| 靖远县| 鲜城| 炎陵县| 宝兴县| 应用必备| 吉安市| 佛坪县| 昌吉市| 依兰县| 九江市| 资溪县| 资源县| 永顺县| 会宁县| 巴彦县| 朝阳县| 阿荣旗| 乌审旗| 游戏| 台东市| 临夏县| 金昌市| 东乡族自治县| 鄂伦春自治旗| 怀集县| 治县。| 赤峰市| 特克斯县| 黄石市| 石林| 普陀区|