利用京东云Serverless服务快速构建5G时代的IoT应用
10月31日,在2019年中国国际信息通信展览会上,工信部宣布:5G商用正式启动。5G商用时代来了!
5G的商用,使得数据传输速度、响应速度、连接数据、数据传输量、传输可靠性等方面都有了显著的提升,这一技术的突破才使得很多领域的应用场景得以真正的落地实施,走进普通人的生活,而这其中就包括物联网。
虽然物联网的概念很简明,就是把物品与互联网相连接并进行信息交换和通讯,从而实现万物智能化,但是由于各种原因,商业化的应用并没有大规模的落地,其中一方面是由于网络传输等原因的限制。如今,5G的到来使得物联网应用在网络层面不再受限,更好地促进了物联网的发展。对于企业来说,快速构建一个商用的物联网服务,抢占先机就显得尤为重要。
京东云Serverless服务正适应了如今企业的这种需求。Serverless一系列产品生态可以让用户以业务为导向,无需关心底层服务器部署以及承载能力,实施周期短,无预付价格按使用量付费。这些特性是适应互联网5G快速时代、快速构建的不二选择,为企业节省成本的同时解决了技术上的难题。
以下面一个车联网数据为例子,我们来看一下如何用队列服务来构建一个高可用高可靠的无服务应用。在车联网应用中客户端负载可能会在24小时内扩展/缩减3、4个数量级,这些特性天然适合Serverless服务动态扩缩,按量付费。
案例场景:车联网中搭载数据收集传感器的汽车向云端传输行驶数据,云端利用队列服务削峰填谷、动态扩缩的能力接收数据,然后转存到Elasticsearch进行更好的数据检索和应用,为用户提供更好的服务或者为公司提供更多的商业价值。
需求:队列服务SDK,队列服务接入点地址,Elasticsearch接入点地址(已经创建好ES实例),京东云用户AK/SK
代码语言: Go
Step1
创建队列服务客户端以及资源创建
func CreateClient() *sqs.SQS {
ses, _ := session.NewSession(&aws.Config{
Region: aws.String("cn-north-1"),
Credentials: credentials.NewStaticCredentials("your AccessKey",
"your SecretKey", ""),
Endpoint: aws.String("http://jqs.cn-north-1.jdcloud.com"),
DisableSSL: aws.Bool(true),
})
_, err := ses.Config.Credentials.Get()
if err != nil {
log.Fatal("凭据创建失败", err)
}
client := sqs.New(ses)
return client
}
func CreateQueueTask(name string) string {
resp, err := sqsClient.CreateQueue(&sqs.CreateQueueInput{
QueueName: aws.String(name),
})
if err != nil {
log.Println("Create Queue Failed:", err)
return ""
}
return *resp.QueueUrl
}
Step2
每个车辆设备发送消息
func SendTask(url string, message interface{}) {
body, _ := json.Marshal(message)
_, err := sqsClient.SendMessage(&sqs.SendMessageInput{
MessageBody: aws.String(string(body)),
QueueUrl: aws.String(url),
})
if err != nil {
log.Println("Send Message Failed:", err)
return
}
return
}
测试数据:
测试机器的配置:CPU64、内存256G、带宽100Mbps(京东云云主机)
场景:公网;send-单条(JQS)
Step3
从队列服务中拉取消息转存到Elasticsearch中
func ReceiveMessageTask(url string) interface{} {
result, err := sqsClient.ReceiveMessage(&sqs.ReceiveMessageInput{
AttributeNames: aws.StringSlice([]string{"All"}),
MaxNumberOfMessages: aws.Int64(1),
MessageAttributeNames: aws.StringSlice([]string{"All"}),
QueueUrl: aws.String(url),
VisibilityTimeout: aws.Int64(30),
WaitTimeSeconds: aws.Int64(0),
})
log.Println(*result.Messages[0].Body)
if err != nil {
log.Println("Receive Message Failed:", err)
return ""
}
if len(result.Messages) > 0 {
_, delErr := sqsClient.DeleteMessage(&sqs.DeleteMessageInput{
QueueUrl: aws.String(url),
ReceiptHandle: result.Messages[0].ReceiptHandle,
})
if err != nil {
log.Println("Delete Message Failed:", delErr)
}
message := new(gpsMessage)
Err := json.Unmarshal([]byte(*result.Messages[0].Body), message)
if Err != nil {
log.Println("Receive Message Unmarshal Failed", Err)
return ""
}
return message
}
return ""
}
func Build(url string, method string, body interface{}) []byte {
client := &http.Client{}
//向服务端发送get请求
bodyData, _ := json.Marshal(body)
request, _ := http.NewRequest(method, url, bytes.NewReader(bodyData))
request.Header.Set("Accept", "application/json")
request.Header.Set("Content-Type", "application/json")
//接收服务端返回给客户端的信息
response, _ := client.Do(request)
r, _ := ioutil.ReadAll(response.Body)
return r
}
func PostMessageToES(p string, body interface{}) string {
postReturn := new(postRes)
postResponse := Build(p, "POST", body)
err := json.Unmarshal(postResponse, postReturn)
if err != nil {
log.Println("Unmarshal Failed", err)
}
jsonS, _ := json.Marshal(postReturn)
log.Println("postResult:", string(jsonS))
return postReturn.Id
}
Step4
从Elasticsearch按照需求索引搜索信息
func GetMessageFromES(p string) {
message := new(esMessage)
getResponse := Build(p, "GET", nil)
log.Println("getPath:", p)
Err := json.Unmarshal(getResponse, message)
if Err != nil {
log.Println("Unmarshal Failed", Err)
}
jsonM, _ := json.Marshal(message)
log.Println("getResult:", string(jsonM))
}
结果示例:
可以按照车辆信息进行数据的检索,绘制出汽车动态地图,利用这些数据来帮助自动驾驶、动态导航、车辆健康度分析等多种场景进行实现。
京东云的队列服务作为Serverless开发中的BaaS服务,实现了中间件服务的无运维和毫秒级扩缩能力,支持京东云的合作伙伴零成本启动业务和按使用量付费的模式,帮助用户解决资源扩缩和阈值监控等复杂问题。结合函数服务FaaS使用,可以满足更丰富的场景,并且调用整个京东云Serverless生态,打造基于云原生21世纪的开放式的全新应用。点击“了解”,快来进行体验吧!
欢迎点击“京东云”了解更多精彩内容
利用京东云Serverless服务快速构建5G时代的IoT应用的更多相关文章
- 利用阿里云容器服务打通TensorFlow持续训练链路
本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案 第一篇:打造TensorFlow的实验环境 第二篇:轻松搭建TensorFlow Serving集群 第三篇:打 ...
- 体验京东云 Serverless+AI 人脸属性识别
云原生计算基金会CNCF(Cloud Native Computing Foundation, CNCF)Serverless Whitepaper v1.0对无服务器计算作了如下定义: Server ...
- 干货 | 利用京东云Web应用防火墙实现Web入侵防护
摘要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 准备环境 在京东云上准备Web ...
- 利用京东云Web应用防火墙实现Web入侵防护
摘 要 本指南描述如何利用京东云Web应用防火墙(简称WAF),对一个简单的网站(无论运行在京东云.其它公有云或者IDC)进行Web完全防护的全过程.该指南包括如下内容: 1 准备环境 1.1 在京东 ...
- 利用京东云擎架设免费Wordpress 博客(git方式)
京东云擎(JAE)是京东推出的一款公有云产品,是京东云平台生态圈的核心组成部分.与百度的BAE.新浪的SAE同样.可是JAE刚上线不久,可能非常多人都还没听说过或不太了解.我尝试在JAE安装WordP ...
- 如何利用京东云的对象存储(OSS)上传下载文件
作者:刘冀 在公有云厂商里都有对象存储,京东云也不例外,而且也兼容S3的标准因此可以利用相关的工具去上传下载文件,本文主要记录一下利用CloudBerry Explorer for Amazon S3 ...
- 阿里云王广芳:5G时代,我们需要怎样的边缘计算?
7月24日阿里云峰会开发者大会的IT基础设施云化专场中,阿里云边缘计算高级技术专家王广芳进行了边缘节点服务重大升级发布,同时与现场观众一同探讨了5G时代边缘计算的思考与技术实践. 5G时代,我们需要怎 ...
- 京东云入选2019年度TOP100全球软件案例 新一代服务治理框架加速行业落地
11月14日-17日, 2019TOP100全球软件案例研究峰会(TOP100summit)在北京国家会议中心举办.Top100summit是科技界一年一度的案例研究峰会,每年会秉承"从用户 ...
- 从单个系统到云翼一体化支撑,京东云DevOps推进中的一波三折
作者:王利莹 采访嘉宾:京东云DevOps团队负责人 郑永宽 今年,IDC 特别针对中国地区发布了<IDC MarketScape:中国 DevOps 云市场2019,厂商评估>研究报告, ...
随机推荐
- AssetBundle打包依赖(宽宽又欠我一顿烧烤)
using UnityEngine; using System.Collections; using UnityEditor; public class dabao : EditorWindow { ...
- java多线程知识回顾(笔记)
线程创建的方式 有两种 第一种是继承Thread类 重写run方法 (个人偏向这一种实际中这种用的较多) 例如 public class MyThead extends Thread { int j= ...
- 在ListView头和尾添加东西
直接上代码 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view ...
- springCloud 之 Eureka服务治理机制及代码运行
服务提供者 服务注册: 服务提供者在启动的时候通过发送Rest请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息.Eureka Server在收到这个请求后,将元数 ...
- 开源DDD设计模式框架YMNNetCoreFrameWork第一篇
DDD设计模式:仓储.领域模型.应用层.聚合根.事件总线,以业务模型驱动设计,从数据模型驱动脱离,不用关心数据库设计,开发效率更高 DDD领域驱动设计模型概念不再讲解,直接上技术 框架搭建: 如图所示 ...
- 019、Java中定义字符
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 安装mysql server5.5 到start service未响应解决方法
打开C盘,然后修改 "组织" => "查看"(如下图) 里面的 "隐藏受保护的操作系统文件" (系统这是会弹出警告,不 ...
- Django(二) 模板:基本使用、模板语法、模板继承
一.模板的使用实战 接:https://blog.csdn.net/u010132177/article/details/103788677 参考:https://docs.djangoproject ...
- LeetCode160 相交链表(双指针)
题目: click here!!题目传送门 思路: 1.笨方法 因为如果两个链表相交的话,从相交的地方往后是同一条链表,所以: 分别遍历两个链表,得出两个链表的长度,两个长度做差得到n,然后将长的链表 ...
- 154. 寻找旋转排序数组中的最小值 II
转跳点:--\(˙<>˙)/-- 原本打算大年三十十一起写完的,结果这篇拖到了年初一…… 这道题比刚刚那道,麻烦一点,因为有重复,所以我们需要考虑重复的情况,就是刚刚的两种情况变成了三种: ...