溫馨提示×

溫馨提示×

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

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

如何利用Serverless服務(wù)快速構(gòu)建5G時代的IoT應(yīng)用

發(fā)布時間:2021-12-16 11:41:41 來源:億速云 閱讀:207 作者:柒染 欄目:互聯(lián)網(wǎng)科技

本篇文章為大家展示了如何利用Serverless服務(wù)快速構(gòu)建5G時代的IoT應(yīng)用,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

10月31日,在2019年中國國際信息通信展覽會上,工信部宣布:5G商用正式啟動。5G商用時代來了!

5G的商用,使得數(shù)據(jù)傳輸速度、響應(yīng)速度、連接數(shù)據(jù)、數(shù)據(jù)傳輸量、傳輸可靠性等方面都有了顯著的提升,這一技術(shù)的突破才使得很多領(lǐng)域的應(yīng)用場景得以真正的落地實施,走進普通人的生活,而這其中就包括物聯(lián)網(wǎng)。

雖然物聯(lián)網(wǎng)的概念很簡明,就是把物品與互聯(lián)網(wǎng)相連接并進行信息交換和通訊,從而實現(xiàn)萬物智能化,但是由于各種原因,商業(yè)化的應(yīng)用并沒有大規(guī)模的落地,其中一方面是由于網(wǎng)絡(luò)傳輸?shù)仍虻南拗啤H缃瘢?G的到來使得物聯(lián)網(wǎng)應(yīng)用在網(wǎng)絡(luò)層面不再受限,更好地促進了物聯(lián)網(wǎng)的發(fā)展。對于企業(yè)來說,快速構(gòu)建一個商用的物聯(lián)網(wǎng)服務(wù),搶占先機就顯得尤為重要。

Serverless一系列產(chǎn)品生態(tài)可以讓用戶以業(yè)務(wù)為導(dǎo)向,無需關(guān)心底層服務(wù)器部署以及承載能力,實施周期短,無預(yù)付價格按使用量付費。這些特性是適應(yīng)互聯(lián)網(wǎng)5G快速時代、快速構(gòu)建的不二選擇,為企業(yè)節(jié)省成本的同時解決了技術(shù)上的難題。

以下面一個車聯(lián)網(wǎng)數(shù)據(jù)為例子,我們來看一下如何用隊列服務(wù)來構(gòu)建一個高可用高可靠的無服務(wù)應(yīng)用。在車聯(lián)網(wǎng)應(yīng)用中客戶端負載可能會在24小時內(nèi)擴展/縮減3、4個數(shù)量級,這些特性天然適合Serverless服務(wù)動態(tài)擴縮,按量付費。

案例場景:車聯(lián)網(wǎng)中搭載數(shù)據(jù)收集傳感器的汽車向云端傳輸行駛數(shù)據(jù),云端利用隊列服務(wù)削峰填谷、動態(tài)擴縮的能力接收數(shù)據(jù),然后轉(zhuǎn)存到Elasticsearch進行更好的數(shù)據(jù)檢索和應(yīng)用,為用戶提供更好的服務(wù)或者為公司提供更多的商業(yè)價值。
需求:隊列服務(wù)SDK,隊列服務(wù)接入點地址,Elasticsearch接入點地址(已經(jīng)創(chuàng)建好ES實例),京東云用戶AK/SK
代碼語言: Go

Step1

創(chuàng)建隊列服務(wù)客戶端以及資源創(chuàng)建

 1func CreateClient() *sqs.SQS {
 2    ses, _ := session.NewSession(&aws.Config{
 3        Region: aws.String("cn-north-1"),
 4        Credentials: credentials.NewStaticCredentials("your AccessKey",
 5            "your SecretKey", ""),
 6        Endpoint:   aws.String("http://jqs.cn-north-1.jdcloud.com"),
 7        DisableSSL: aws.Bool(true),
 8    })
 9    _, err := ses.Config.Credentials.Get()
10    if err != nil {
11        log.Fatal("憑據(jù)創(chuàng)建失敗", err)
12    }
13    client := sqs.New(ses)
14    return client
15}
16
17func CreateQueueTask(name string) string {
18    resp, err := sqsClient.CreateQueue(&sqs.CreateQueueInput{
19        QueueName: aws.String(name),
20    })
21    if err != nil {
22        log.Println("Create Queue Failed:", err)
23        return ""
24    }
25    return *resp.QueueUrl
26}

Step2

每個車輛設(shè)備發(fā)送消息

 1func SendTask(url string, message interface{}) {
 2    body, _ := json.Marshal(message)
 3    _, err := sqsClient.SendMessage(&sqs.SendMessageInput{
 4        MessageBody: aws.String(string(body)),
 5        QueueUrl:    aws.String(url),
 6    })
 7    if err != nil {
 8        log.Println("Send Message Failed:", err)
 9        return
10    }
11    return
12}

測試數(shù)據(jù):

如何利用Serverless服務(wù)快速構(gòu)建5G時代的IoT應(yīng)用

測試機器的配置:CPU64、內(nèi)存256G、帶寬100Mbps(京東云云主機

場景:公網(wǎng);send-單條(JQS)

Step3

從隊列服務(wù)中拉取消息轉(zhuǎn)存到Elasticsearch中

 1func ReceiveMessageTask(url string) interface{} {
 2    result, err := sqsClient.ReceiveMessage(&sqs.ReceiveMessageInput{
 3        AttributeNames:        aws.StringSlice([]string{"All"}),
 4        MaxNumberOfMessages:   aws.Int64(1),
 5        MessageAttributeNames: aws.StringSlice([]string{"All"}),
 6        QueueUrl:              aws.String(url),
 7        VisibilityTimeout:     aws.Int64(30),
 8        WaitTimeSeconds:       aws.Int64(0),
 9    })
10    log.Println(*result.Messages[0].Body)
11    if err != nil {
12        log.Println("Receive Message Failed:", err)
13        return ""
14    }
15
16    if len(result.Messages) > 0 {
17        _, delErr := sqsClient.DeleteMessage(&sqs.DeleteMessageInput{
18            QueueUrl:      aws.String(url),
19            ReceiptHandle: result.Messages[0].ReceiptHandle,
20        })
21        if err != nil {
22            log.Println("Delete Message Failed:", delErr)
23        }
24
25        message := new(gpsMessage)
26        Err := json.Unmarshal([]byte(*result.Messages[0].Body), message)
27        if Err != nil {
28            log.Println("Receive Message Unmarshal Failed", Err)
29            return ""
30        }
31        return message
32    }
33    return ""
34}
35
36func Build(url string, method string, body interface{}) []byte {
37    client := &http.Client{}
38    //向服務(wù)端發(fā)送get請求
39    bodyData, _ := json.Marshal(body)
40    request, _ := http.NewRequest(method, url, bytes.NewReader(bodyData))
41
42    request.Header.Set("Accept", "application/json")
43    request.Header.Set("Content-Type", "application/json")
44    //接收服務(wù)端返回給客戶端的信息
45    response, _ := client.Do(request)
46    r, _ := ioutil.ReadAll(response.Body)
47    return r
48}
49
50func PostMessageToES(p string, body interface{}) string {
51    postReturn := new(postRes)
52    postResponse := Build(p, "POST", body)
53    err := json.Unmarshal(postResponse, postReturn)
54    if err != nil {
55        log.Println("Unmarshal Failed", err)
56    }
57    jsonS, _ := json.Marshal(postReturn)
58    log.Println("postResult:", string(jsonS))
59    return postReturn.Id
60}

Step4

從Elasticsearch按照需求索引搜索信息

 1func GetMessageFromES(p string) {
 2    message := new(esMessage)
 3    getResponse := Build(p, "GET", nil)
 4    log.Println("getPath:", p)
 5    Err := json.Unmarshal(getResponse, message)
 6    if Err != nil {
 7        log.Println("Unmarshal Failed", Err)
 8    }
 9    jsonM, _ := json.Marshal(message)
10    log.Println("getResult:", string(jsonM))
11}

結(jié)果示例:

如何利用Serverless服務(wù)快速構(gòu)建5G時代的IoT應(yīng)用

可以按照車輛信息進行數(shù)據(jù)的檢索,繪制出汽車動態(tài)地圖,利用這些數(shù)據(jù)來幫助自動駕駛、動態(tài)導(dǎo)航、車輛健康度分析等多種場景進行實現(xiàn)。

上述內(nèi)容就是如何利用Serverless服務(wù)快速構(gòu)建5G時代的IoT應(yīng)用,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

AI