溫馨提示×

溫馨提示×

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

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

Swift在GAIA平臺云端一體化的探索是怎樣的

發(fā)布時間:2021-12-27 14:17:50 來源:億速云 閱讀:151 作者:柒染 欄目:云計算

這期內容當中小編將會給大家?guī)碛嘘PSwift在GAIA平臺云端一體化的探索是怎樣的,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

S1 階段在使用 SwiftUI 編寫集團內部使用的 SOT APP 時,有幸參與到 GAIA (FaaS)平臺云端一體化的探索,從頭到尾實現(xiàn)了一套基于 Swift 語言實現(xiàn)的遵守 GAIA Funtion 標準的 Runtime Framework,并完成了從客戶端到后端使用統(tǒng)一的語言棧完成一體化鏈路的探索。

作為一個純 iOS Native 端開發(fā)者,對于后端的技術體感,大部分還遺留在上學期間做的論壇管理系統(tǒng),加之 FaaS Serverless 等都是一些后端領域較前沿的技術點,尤其是在后端還算是初生牛犢的 Swift 語言,期間走過無數(shù)的彎路,但也學到了很多新的知識。

下面是對 Swift On GAIA 的階段性總結和思考。由于此次技術探索有較多跨端知識,作為一個移動端工程師的視角理解可能非常片面和有誤,如讀者發(fā)現(xiàn)對概念有解釋不對,歡迎大家留言區(qū)多多指正。由于在技術棧上前端生態(tài)已有較多探索, Native 端上的探索和技術儲備落后與前端,有些實現(xiàn)會隨著云端一體化得探索而改變,并不是一個已經完備的解決方案,歡迎各位開發(fā)愛好者積極討論,造福生態(tài)。

概念性介紹

Serverless

Serverless 起始是一個比較早的名詞,早到 2012年,彼時的我才剛背起小書包走進大學里,但是早期的理論基礎已經被提出。

隨著 2014年 AWS 的 Lambda 產品出現(xiàn), Serverless 為云中的應用提供了一種全新的架構體系, Serverless 開始大火,之后各大云計算廠商的加入,Google Cloud Functions, Azure Funcions, IBM OpenWhisk Aliyun 以及其他國內的云計算廠商,如 華為云,騰訊云,百度云,短短數(shù)年時間 Serverless產品已遍地開花。

隨著容器技術,IoT,5G,技術的快速發(fā)展, 技術上對去中心化,輕量虛擬化,細粒度計算等技術需求愈發(fā)強烈,而 Serverless 必將借勢迅速發(fā)展,對將來的富客戶端的研發(fā)模式的改變,則需要我們這些技術人持續(xù)的去探索和創(chuàng)造了。

我們在理解 Serverless 的過程中先來看一看云服務的進化史,云計算經歷了物理機房 -> IaaS -> PaaS -> SaaS -> FaaS/BaaS 。

? IaaS

IaaS(Infrastructure as a Service)基礎設施即服務。指把 IT 基礎設施作為一種服務通過網絡對外提供。在這種服務模型中,用戶不用自己構建一個數(shù)據中心,而是通過租用的方式來使用基礎設施服務,包括服務器、存儲和網絡等。在這層公司通常購買的是存儲,網絡的基礎服務。

? PaaS

PaaS(Platform as a Service) 平臺即服務,服務商提供基礎設施底層服務,提供操作系統(tǒng)(Windows,Linux)、數(shù)據庫服務器、Web服務器、負載均衡器和其他中間件,相對于 Iaas 客戶僅僅需要自己控制上層的應用程序部署與應用托管的環(huán)境。通常在這層用戶一般購買的是操作系統(tǒng)。

? SaaS

SaaS(Software as a Service) 軟件即服務,SaaS 是一種通過 Internet 提供軟件的模式,用戶不用再購買軟件,而改用向提供商租用基于 Web 的軟件,來管理企業(yè)經營活動,且無需對軟件進行維護,服務提供商會全權管理和維護軟件,通常這些常用的軟件有 數(shù)據庫,網絡服務,等。

可以通過 Microsoft Azure 服務的一張圖來直觀感受下

Swift在GAIA平臺云端一體化的探索是怎樣的

GAIA 平臺大大縮短了后端的研發(fā)鏈路,提高了交付成本,屏蔽了運維細節(jié),這對于一個跨棧的開發(fā)者也能簡單理解。

GAIA容器架構

看過 GAIA 的概念,有必要簡單的了解一下 GAIA 容器架構。

Swift在GAIA平臺云端一體化的探索是怎樣的

作為一個端上開發(fā)者,恰逢使用 SwiftUI 構建 SOT APP 移動版,在滿足需求的同時,有探索新技術。

但是作為一款數(shù)據大盤的 APP,數(shù)據從哪里來?從后端數(shù)據庫,由于之前從未有過移動端APP,后端同學并未對外提供 MTOP 的接口供移動端使用,了解到可以在 FaaS 平臺調用已有的 HSF 服務,返回領域內的模型,GAIA 平臺可以對外發(fā)布為 MTOP 接口,剛好滿足需求。

前期的調研中,發(fā)現(xiàn) GAIA 的平臺語言棧選擇了后端的王牌語言 Java,F(xiàn)unction Runtime Framework 最早版本只支持Java,后期隨著前端棧的探索和 閑魚團隊的 Flutter 探索,目前平臺已經支持 Dart Runtime, Node.js Runtime。

作為一個 iOS Native 開發(fā)者,沒有自己熟悉的語言怎么辦?Swift 于 2019年 WWDC 宣布 發(fā)布 5.x 版本,Swift5.x 版本 ABI 穩(wěn)定,標志著 Swift 正式進入成熟語言行列,加上 Swift 誕生之初就是一門跨平臺的語言,并且也有開源的 Server side workgroup推進著 Swift 在后端領域的探索,也涌現(xiàn)出一些 知名的庫 Kitura Vapor Perfect Zewo。

于是我們嘗試用 Swift 構建一套 Function Runtime Framework,先來了解下 Runtime Framework 是為了完成什么?

Swift Runtime Framework 需要完成如下操作

  1. Swift 運行時初始化。

  2. 日志監(jiān)控

  3. 通信協(xié)議

  4. 集團已有中間件調用

  5. Function 調度

  6. 發(fā)布系統(tǒng)構建

在后端部署的服務都是可彈性的,GAIA 也不例外,Swift Function Runtime, Swift Function 交付都是制作成 Docker Image 統(tǒng)一交付。簡化如圖所示。

Swift在GAIA平臺云端一體化的探索是怎樣的

正式上線

Funtion Runtime Framework 完成后,就可以通過 GAIA 的發(fā)布平臺創(chuàng)建函數(shù),編寫自己的業(yè)務代碼里,這里就不分享如何操作了,直接上示例代碼和效果圖。

//  File.swift
//
//
//  Created by nero on 2019/9/12.
//

import GAIA
import HSF
import Foundation

struct EventResult: GAIA.EventResult {

    var isSuccess: Bool  = true

    var code: String = "200"

    var message: String = "SOT Test"

    var payLoad: TestContent
    init(payLoad: String) {
        self.payLoad = TestContent(content: payLoad)
    }
}

struct MtopUserQuery: Codable {
    let pageNo: String 
    let pageSize: String
    let appName: String
}

struct PageQuery: HSFModel {
    let javaClassName = "com.xx.PageQuery"
    let request: PageQueryRequest
    let pageNo: Int
    let pageSize: Int
    init(pageNo: Int, pageSize: Int, appName: String) {
        self.pageNo = pageNo
        self.pageSize = pageSize
        self.request = PageQueryRequest(appName: appName)
    }
    let apiConsumer = PageQueryAPIConsumer()
}

struct PageQueryAPIConsumer: HSFModel {
    let javaClassName = "com.xx.ApiConsumer"
    let clientName = "SOT-APP"
    let token = "xxx"

}

struct PageQueryRequest: HSFModel {
    let javaClassName = "com.xx.AppQueryRequest"
    let appName: String
}

class Handler: GAIA.FunctionHandler {

    init(){}
    var consume: ConsumerService
    func handle(when event: Event, context: FunctionContext) throws -> AnyEventResult {
        switch event.payLoad {
        case .mtop(body: let mtopRequest):
            do {
                let query = try JSONDecoder().decode(MtopUserQuery.self, from: mtopRequest.data)
                let sotQuery = PageQuery(pageNo: query.pageNo, pageSize: query.pageSize, appName: query.appName)
                let jsonStr = try consume.invoke(methodName: "queryApp", args: [sotQuery])

                return EventResult(payLoad: jsonStr).erasedEventResult
            } catch {

            }
        default:
            break;
        }
        return EmptyEventResult().erasedEventResult
    }

    func active(when context: FunctionContext) {
    }

    func destroy(when context: FunctionContext) {

    }

    func isHealth(when context: FunctionContext) -> Bool {
        return true
    }
}

image.png

GAIA 云端一體化的思考

Swift On GAIA 在云端一體化的探索一期圓滿結束,一個 iOSer 也可以同時開發(fā)前后端程序,這對研發(fā)模式也創(chuàng)造了一些新的可能,最近也多次聽大佬們的一些分享,如閑魚團隊使用 Dart+flutter 在云端一體化研發(fā)模式的探索,有一些不成熟的視角,暫且記錄一下。

技術棧日常研發(fā)調試的困難?

在研發(fā)模式交流和一些實際探索的體驗中發(fā)現(xiàn),端上的研發(fā)風格和后端的研發(fā)風格差異較大,端上的同學傾向于打斷調試,實時預覽效果,背后的原力是因為端上要更快的交付,端上的環(huán)境更容易構建,但是后端的同學更傾向于日志系統(tǒng),鏈路追蹤。但其實無論是斷點調試還是日志系統(tǒng),本質上需要一個有效排查問題的系統(tǒng),不然在實際開發(fā)中,由于跨技術棧會讓調試的成本變大, 系統(tǒng)一旦復雜起來反而會拖慢效率。

工程結構的升級

在 Swift On GAIA 的實際體驗中,使用的開發(fā)工具,應用交付方式,都不統(tǒng)一,各個語言棧都有自己的研發(fā)風格,工具鏈支撐,研發(fā)模式和工具鏈體系也需要對應的升級,避免鏈路過長,工具鏈割裂。

領域的邊界是什么?

目前閑魚的大佬在 GAIA 完成了 Dart Function 環(huán)境的支持,可以讓客戶端同學向前更進一步,自己完成后端的能力,實現(xiàn)無上下游依賴的業(yè)務閉環(huán),并且屏蔽后端的細節(jié)。

不過在一些細節(jié)上的分析,發(fā)現(xiàn)不同的業(yè)務場景碰見的挑戰(zhàn)還是不同,如果一個 Function 只使用已有的基礎設施,如接口聚合,簡單的邏輯處理是比較合適的,但如果這個業(yè)務連數(shù)據的生產者也由客戶端的同學來寫復雜度就變大了,因為跨端的思維方式不同,大前端同學可能不會思考更多存儲的設計,未來在業(yè)務擴大時就可能不容易擴展。

那么在實現(xiàn)業(yè)務的的時候,如何界定一些領域的邊界是一個值得思考的點,需要一些方法論或者指導原則,來幫助 Function 同學決策這款技術選型的可擴展性。

人員組織架構升級

如果研發(fā)模式大升級,傳統(tǒng)的后端 API 發(fā)布,各端接入的人員上下游關系勢必會發(fā)聲比較大的變化,如何找到人員組織的方式也是需要重新定義和調整的。往小了說干的活分配不一樣了,往大了說 組織架構也需要適應時代調整。

中間件語言中立,平臺中立

目前后端大部分的語言棧都是 Java ,其中集團部分團隊使用 CPP,涌現(xiàn)了多個 CPP 版本的 SDK 用來調用 Java 的生態(tài)框架,如 HSF CPP 版本 Tail CPP 版本 ,隨著 GAIA 平臺接入語言棧的變多,加上富客戶端 Swift/Kotlin/Java/Javascript,要不要做一些類似 Protobuffer 這種通過中立的 DSL 定義解決語言差異性。

這里作者是不太認可一套語言解決所有環(huán)境的,一是目前手淘的生態(tài)分為 Native+Weex+H5+小程序,本身就難以聚合,二是單拿 iOS 端,在蘋果限制下的跨平臺總是有部分取舍的,不能解決全部問題。

領域特定/通用

未來 Swift 在 FaaS 平臺上是朝著解決通用能力去前進還是構建領域模型,構建領域特征可以構建領域生態(tài)的 API,定義業(yè)務的模式,類似星環(huán)的風格,如果構建的是通用能力,解法可能是另外一種。

上述就是小編為大家分享的Swift在GAIA平臺云端一體化的探索是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

AI