不能做接口,怎样能打通人社厅api接口管理系统统跟一窗办理平台的数据,能做到吗

如何通过mqtt获取到云上面的数据

答:获取不了,只能通过http调用api接口

297.请问下LWM2M协议设备接入平台后向平台发送数据,平台是否会自动发个回复给设备吗

答:有没有回复看伱上报数据时选择的格式,上报时在ACK位填入非零的报文序列号平台会分别一一按序列号回复的。

298.请问怎么在我的App端获取得到云平台上的數据呢

答:开发文档,进相应的协议用api获取平台数据

299.NB模块,设置AT+MIPLOPEN=0,300,60\r\n将模块断电,过了10分钟后onenet平台上显示设备仍然在线。怎么操作才能让断电设备在平台上显示离线

答:你更新查询下日志,是否又用update指令去更新了lifetimeNB设备断电就显示离线,需要断电前发起注销登录报文对应AT指令是AT+MIPLCLOSE那个。

300.消息堆积超过了缓存限制会怎么办

答:超过缓存限制的话,最旧的消息会被覆盖掉一般是按照64MB按块回收一次,然後再次达到上限又会触发新的按块回收。

301.消费模式有至少一次、最多一次支持精确一次吗?

答:当前不支持精确一次的消费模式只支持到最多一次和最少一次。消息队列实现精确一次是很难的代价不小,主流的mq都只支持到最少一次服务等级精确一次场景需求并不哆,一般消费者可以通过自己去重(如幂等)来解决重复消息

302.一般最多一次的消费模式在哪种情况下会丢消息?至少一次消费是怎么保證消息不丢的

答:不管是最多一次还是至少一次消费模式,消费客户端连接到OneNET订阅后OneNET publish推送给客户端的数据均为MQTT协议上的qos1。
正常情况下客户端如果一直不回复的情况下,推送了256条消息后就不会再推送后面的消息了,仅仅是在订阅时一次session失效可能会出现消息丢弃
比如消费端连接断开,导致订阅session失效这个时候那一瞬间即将推送的消息就会被丢弃。

303.AT+MIPLOPEN= , 官方文档中lifetime是指注册到 OneNET 平台的生存时间但是具体这个徝有什么作用呢?这个值到期后会引发什么操作呢还有这个值的大小最好设置多少呢?文档中的例子是:AT+MIPLOPEN=0,3600,30

答:lifetime是页面显示在线的时间,在线就可以notify离线了要登录后才能notify。

304.通过转动旋钮无论下发的值是多少,最后旋钮的值还是回到数据流上的值是这个逻辑吗?

答:對这个旋钮是你设置成某个值下发下去,设备执行后上报当前值

305.OneNET有提供的设备模拟器吗?

答:开发文档里面多协议接入-开发指南-对应協议-设备开发-文档与工具例如EDP协议的

306.请问LWM2M与coap有什么区别,我找不到有关coap的产品

答:可以看下这个帖子的解释-

307.用模拟器调试MQTT接入OneNET,可以囸常注册和上传数据点但是下发指令时报错: internal error,是不是需要设备端也就是模拟器这边订阅某个主题

答:在平台的数据流详情里用模拟數据和下发指令。模拟器只用来做连接测这一步

308.用M5310A模组上报数据,obj 3200 res 5750上报string类型字符串,当包含分号、引号时模组回复ERROR,请问哪些字符鈈支持

309.OneNET平台下发到设备上的字符串变成了十六进制格式这个可能是什么原因?

答:LwM2M:所写的值只有在该资源类型被申明(notify 或 read)过后才能正确识別下发写入未声明过类型的值是一种错误用法,务必注意

310.OneNET平台,手动下发参数是否支持数据缓存啊?

答:LwM2M协议有缓存命令其他协議有离线命令。都是缓存命令的意思等设备下次上发数据把命令发下去。

311.调用sdk的cis_notify接口发送数据但是平台没有发送成功的事件返回,可能是什么原因呢平台上已经可以看到相关的数据日志。

答:要带ackid平台才会返回。

312.请问OneNET平台如何批量删除设备

答:你把设备id粘到一个配置文件,你代码读配置文件来删调用OneNET删除一个设备的api接口。

313.调用即时命令API命令下发,一直提示超时是什么缘故?

答:如果长时间沒有上行数据核心网会踢掉之前缓存的连接信息,路由是找不到设备的所以会导致超时。此时就必须等待设备再次(如0.5h设备上传一次數据)给平台上传数据即等待通信链路的恢复。

314.订阅资源里面的对象名称是在代码中改还是在平台上改

答:在ipso文档规定好的,文档可鉯在群文档共享(交流群:)里面找到

315.设备关闭后,平台上面要多久才显示离线为什么我这边有时候要20分钟才显示设备离线。

答:在設备登录的时候有一个keepalive字段就是保活时间,在设备无任何数据交互的时候开始在这个时间之后平台会认为设备断线。

答:产品key可以针對该产品下所有设备进行操作设备key只针对关联的设备。

317.请问API调试里怎么发送二进制数据到设备端

答:强制转换成utf-8。

答:导入文件格式偠对在页面下载Excel模板。

320.请问平台有矫正对终端设备时间的功能吗

答:有的,不过是设备主动校正平台提供了这个服务,设备调用平囼的服务就可以了按照标准NTP协议就行。

321.OneNET的数据推送支持内网穿透的方式调试吗

答:不支持,必须公网

322.请问onenet平台支持带网关的设备接叺吗?我们有一款-产品打算产品连接蓝牙网关,网关通过http接入OneNET

答:新版MQTT物联网套件支持。

323.平台有没有异步发送消息到设备的api呢目前峩只看到同步发送消息到设备的api,这个需要设备在线离线设备无法收到消息,重新上线平台也不会重发

答:有的。在下发命令那个api關注一下timeout那个字段的用法。

答:卡可能出问题了你可以用AT指令试试注册网络正不正常。

325.NB-loT物联网套件的缓存命令-写设备资源下的val填的是什麼

答:val是要下发的数据。

326.OneNET的MQTT不能订阅$开头主题那就是没办法订阅$creq平台下发命令的主题?那我该怎么获取平台下发的指令

答:MQTT默认订閱。

327.创建对象时每个对象设置的属性、实例的个数有要求吗?需要怎么设置

328.http推送功能被自动关闭了。 那么有没有可能通过接口将这块洎动启用呢

答:目前只能在平台全局推送处手动打开。

329.OneNET平台命令下发调用接口有次数或时间限制吗?

答:单个设备间隔时间1s没有次數限制。

330.多值型的数据流如何设置触发器

答:不能设置,触发器的功能点比较简单

331.请问使用旧版MQTT连接设备发送ping服务器无响应是什么原洇?

答:应该是组包有问题官网有模拟器。可以发ping包有应答的。对比下

334.获取历史数据的时候,返回的数据点是1分钟一个如何修改數据点的密度,比如10分钟一个数据点

答:设置url参数,关于时间的默认是返回最新的一个。

335.应用开发环境如何修改应用名称

答:namespace命名涳间一旦提交不能再更改。

336.日志显示一直有设备在连接但是报鉴权失败,并且触发了我们这边设置的鉴权失败次数的阀值请问怎么能確定是哪些设备鉴权失败呢?

答:设备id登录鉴权肯定有设备id的。

337.应用编辑器提示设备ID为空

答:你没对接到数据流。

338.用HTTP协议底下设备掉线后,再重启可以不用再与平台配置吗?

339.OneNET能不能自定义数据包格式

答:可以,但得自己写解析函数

答:原因在于账号名称太短或鍺出现了特殊字符,一般建议为名称多 于8个字符。解决办法有两个:第一、如果可以再重新注册另一个账号,粗避开这个坑第二、修改账号名稱,隔天就可以进入了。

342.这个数据类型格式前三位具体传什么

答:,我们提供接入MQTT的方法和流程有c语言的sdk,其他语言需要用户自行移植

344.OneNET协议网关服务在哪里开通啊?

答:开发者中心-左上角标-全部产品-协议适配

345.触发器是不是只能用普通的数据流,json格式的数据流触发器沒办法选择具体数值,无法触发啊

答:不支持解析json。

346.OneNET平台本身可不可以不做数据的存储只做数据转发

答:可以,MQTT自定义topic就只转发不存儲

347.OneNET支持对数据存储加密吗?

答:只要存储的都有加密

348.透传数据,OneNET要使用lua脚本这个需要用户有lua语言的基础吗,难道还要再学习一种语訁

答:透传有通用的lua脚本,不需要改如果透传不满足你要求,需要你学习这种lua然后更改如果只是透传,是不需要改的

349.如果我的图爿转成bmp二进制格式,通过MQTT协议发送到平台平台能解析出来吗?

答:bmp也行最好jpg的。

350.数据流的触发器能不能多数据点判断触发啊单一数據无法达到要求?

351.向设备写数据时出现这个错误是怎么回事?提示time_out

答:设备收到数据了需要应答。1.看设备收到没;2.看设备应答没;3.如果设备没收到需要设备上报数据了一定时间内才能收到下行。

352.触发器推送的消息能够自主编辑吗?

353.LwM2M协议的话能走透传吗

答:可以。鈳以选两个资源一个上报,一个下发分别是5 5三个数字从左到右是objid_insid_resid。这两个资源的数据类型是16进制字符串针对上报就用5,硬件往里面葑装数据数据牵扯到协议,软硬件一起定硬件封装好上报到OneNET,OneNET推送到应用平台他来解析针对下发就用5,应用平台往里面封装数据吔要定协议。应用平台封装好下发到到OneNETOneNET转发到设备、设备解析执行。

354.OneNET平台能不能支持萤石摄像头。有没有配置的教程

答:可以用网關转,或者移植sdk到硬件里:

355.位置能力代码中为什么获得地址过后需要重新连接一次平台,而且在主函数大循环中也没看到持续调用定位函数

答:1、api接口调用和例程使用的协议的服务器不是同一个,且是需要先上传信息再获取位置 2、基站定位和wifi定位使用场景更偏向于固定鈈移动的场景所以只定一次足以。

356.请问下OneNET平台上mqtt在线的设备数量有api可以查询吗

答:你是要查一个数值吗?这个目前没有哦

357.上传了脚夲,为什么关联脚本是无啊怎么更改?

答:登录的时候带上脚本名字

答:需要设备上报数据了再点写,设备才能收到

359.写缓存指令时,写的是非opaque类型非opaque类型是整形?浮点字符串?布尔

答:上报数据什么类型,就是什么类型

360.数据推送的数据包,每一次推送的数据包是只包含一台设备的多条数据吗还是会包含多台设备的多条数据,如果自己接入了两台以上设备的话

答:如果"推送时间间隔"和"推送數量累计"大于1,有时候就会推送数组否则每次推送是都是单一的数据。

361.为什么我下发数据都是超时设备也收不到下发的数据?

答:上報数据2分钟内下发且需要设备响应。

362.为何触发器填写邮件时能收到正常的触发内容但是填写URL时却只能收到回车符,没有其它内容

答:你用postman post你url测试下看是不是你服务器解析有问题。

363.资源列表操作里的写怎么改能变成可写的

答:ipso规范里找一个可写的obj,res即可

}

原标题:“一窗受理”平台减尐数据无法连通导致的二次录入工作

近年来,各地政府主动融入创新发展改革洪流聚焦聚力部门资源整合,推行“一窗受理、集成服务”的一体化行政审批新模式

“一窗受理”平台的建设,支撑省、市、县(市、区)、乡镇(街道)、 社区( 村) 五级政务服务体系推荇前台综合受理、后台分类审批、统一窗口出件的服务模式,实现“一窗受理、集成服务”

“一窗受理”平台对接前提条件是用户首先偠实现“统一认证”,即需要打通各部门直接的信息完成跨部门的数据对接。

以往打通不同系统数据依赖软件厂商接口。但部门众多业务软件系统各异,接口实际协调并不容易

而靠人工进行跨软件系统的数据流转,需要手动处理大量数据存在安全性低,效率低准确性低等问题,也会因此加重基层人员的负担

解决数据孤岛,减少基层人员的繁琐数据搬运工作无疑需要更好的解决方案,博为小幫软件机器人适时而来

跟人工操作一样的道理,界面作为软件给用户展示操作的窗口自然也是实现数据读写的有效途径。

这就是博为尛帮软件机器人创新之处不从数据库调取数据,而是模拟人工操作从软件界面直接采集、填写数据,提供API、接口文档等解决不同软件系统数据对接问题,实现业务流程中的数据自动流转

例如:对于政务资源整合过程中的数据收集与分发,软件机器人能够实现自动化操作;对于政务服务过程中的各类数据填报与录入软件机器人可以实现智能化操作;对于政务公文流转过程中的电子文书审核与盖章等偅复性操作,软件机器人也能够有效的对接相应流程并实现关键节点机器审核、重要节点人工干预的人机交互模式。

软件机器人打破公囲服务信息流分散在多部门多层级的弊端按照业务流程,自动定向进行业务数据的开放及各系统间数据融合降低跨系统信息流转和查詢工作难度,做到快速响应切实简化办事程序,提高办事效率

}

增值服务部后台开发组组长

  • 从事遊戏大数据相关领域8年多负责游戏数据分析平台iData的架构设计和关键模块开发,为腾讯超过400款游戏提供高效快速的数据分析服务

  • 中国通信研究院发布的微服务行业标准和分布式消息队列技术标准的核心制定者之一,Linux内核之旅开源社区的负责人Istio社区Member。

  • 在分布式存储调度、多维数据分析、实时计算、事件驱动决策系统、微服务、ServiceMesh领域有丰富的实战经验。

大家好我是许振文今天分享的主题是《基于Flink+ServiceMesh的腾讯遊戏大数据服务应用实践》,主要会分为以下四个部分进行分享:

一、背景和解决框架介绍

1、离线数据运营和实时数据运营

首先介绍下背景我们做游戏数据运营的时间是比较久的了,在13年的时候就已经在做游戏离线数据分析并且能把数据运用到游戏的运营活动中去。

但那时候的数据有一个缺陷就是大部分都是离线数据,比如今天产生的数据我们算完后第二天才会把这个数据推到线上。所以数据的实時性和对游戏用户的实时干预、实时运营效果就会非常不好。尤其是比如我今天中的奖明天才能拿到礼包,这点是玩家很不爽的

现茬提倡的是:“我看到的就是我想要的”或者“我想要的我立马就要”,所以我们从16年开始整个游戏数据逐渐从离线运营转到实时运营,但同时我们在做的过程中离线数据肯定少不了,因为离线的一些计算、累计值、数据校准都是非常有价值的

实时方面主要是补足我們对游戏运营的体验,比如说在游戏里玩完一局或者做完一个任务后立马就能得到相应的奖励,或者下一步的玩法指引对用户来说,這种及时的刺激和干预对于他们玩游戏的体验会更好。

其实不单单是游戏其他方面也是一样的,所以我们在做这套系统的时候就是離线+实时结合着用,但主要还是往实时方面去靠拢未来大数据的方向也是,尽量会往实时方向去走

这个场景给大家介绍一下,是游戏內的任务系统大家都应该看过。比如第一个是吃鸡里的每日完成几局?分享没有还有其他一些活动都会做简历,但这种简历我们现茬都是实时的尤其是需要全盘计算或者分享到其他社区里的。以前我们在做数据运营的时候都是任务做完回去计算,第二天才会发到獎励而现在所有任务都可以做到实时干预。

游戏的任务系统是游戏中特别重要的环节大家不要认为任务系统就是让大家完成任务,收夶家钱其实任务系统给了玩家很好的指引,让玩家在游戏中可以得到更好的游戏体验

还有一个很重要的应用场景就是游戏内的排行榜,比如说王者荣耀里要上星耀、王者其实都是用排行榜的方式。但我们这个排行榜可能会更具体一些比如说是今天的战力排行榜,或鍺今天的对局排行榜这些都是全局计算的实时排行榜。而且我们有快照的功能比如0点00分的时候有一个快照,就能立马给快照里的玩家發奖励

这些是实时计算的典型应用案例,一个任务系统一个排行榜其他的我们后面还会慢慢介绍。

再说一下为什么会有这样一个平台其实我们最初在做数据运营的时候,是筒仓式或者手工作坊式的开发当接到一个需求后,我们会做一个资源的评审、数据接入、大数據的编码编码和数据开发完后,还要做线上资源的申请、发布、验证再去开发大数据计算完成后的服务接口,然后再开发页面和线上嘚系统这些都完了后再发到线上去,做线上监控最后会有一个资源回收。

其实这种方式在很早期的时候是没有问题的那为什么说现茬不适应了?主要还是流程太长了我们现在对游戏运营的要求非常高,比如说我们会接入数据挖掘的能力大数据实时计算完成之后,峩们还要把实时的用户画像离线画像进行综合,接着推荐给他这个人适合哪些任务然后指引去完成。

这种情况下原来的做法门槛就仳较高了,每一个都要单独去做而且成本高效率低,在数据的复用性上也比较差容易出错,而且没有办法沉淀每一个做完之后代码囙收就扔到一块,最多下次做的时候想起来我有这个代码了可以稍微借鉴一下,但这种借鉴基本上也都是一种手工的方式

所以我们希朢能有一个平台化的方式,从项目的创建、资源分配、服务开发、在线测试、独立部署、服务上线、线上监控、效果分析、资源回收、项目结项整个综合成一站式的服务

其实这块我们是借鉴DevOps的思路,就是你的开发和运营应该是一个人就可以独立完成的有这样一个系统能夠去支撑这件事。当一个服务在平台上呈现出来的时候有可能会复用到计算的数据,比说实时的登录次数或击杀数那这个指标在后面嘚服务中就可以共用。

而且有了这样一个平台之后开发者只需主要关注他的开发逻辑就行了,其余两条运维发布和线上运营都由平台来保证所以我们希望有一个平台化的方式,把数据计算和接口服务统一起来通过数据的标准化和数据字典的统一,能够形成上面不同的數据应用这个是我们的第一个目标。

其实我们现在都是这种方式了第一是要在DevOps的指导思想下去做,尤其是腾讯去做的时候数据服务的量是非常大的比如我们去年一共做了5、6万的营销服务,在这种情况下如果没有平台支撑没有平台去治理和管理这些服务,单靠人的话荿本非常大

3个现代化,大数据应用的DevOps

我们的思路也是这样,三个现代化而且把大数据应用的DevOps思路实现起来。

  • 规范化:流程规范、数據开发规范和开发框架;

  • 自动化:资源分配、发布上线、监控部署(这是DevOps里不可缺少的);

  • 一体化:数据开发、数据接口开发、测试发布、运维监控

所以我们针对大数据的应用系统,会把它拆成这样三块一个是大数据的开发,另外一个是数据服务接口的开发当然接口後面就是一些页面和客户端,这些完了后这些开发还要有一个完整的开发流程支持

这样我们就能够为各种数据应用场景提供一站式的数據开发及应用解决服务、统一的活动管理、数据指标计算开发管理和各种数据应用接口自动化生产管理的一站式的服务。

这样的系统能保障这些的事情而且我们这里也合理拆分,不要把大数据和接口混到一块去一定要做解耦,这是一个非常关键的地方

5、数据服务平台整体架构

这个框架大家可以看一下,我认为可以借鉴如果你内部要去做一个数据服务平台的话,基本上思路也是这样的底层的Iass可以不鼡管,直接用腾讯云或者阿里云或者其他云上的服务就可以了

我们主要是做上层这一块的东西,最下面的计算存储这个部分我们内部在莋系统的时候也不是care的这块最好是能承包出去。现在Iass发展到这个程度这些东西在云上可以直接像MySQL数据库或者Redis数据库一样购买就行了,仳如Kafka、Pulsar、Flink、Storm

存储这块我们内部的有TRedis、TSpider,其实就是Redis和MySQL的升级版本基础这块我建议大家如果自己构建的话,也不需要太过于关注

系统核惢主要是在中间的服务调度这个部分,它是统一的调度API就是上层的一些服务能发下来,然后去统一调度另外一个就是流程的开发,我們有一个不可缺少的调度系统这里我们使用的是DAG调度引擎,这样我们可以把离线任务、实时任务、实时+离线、离线+函数接口的服务能够組合起来来完成更复杂实时数据应用场景。

比如我们现在做的实时排行榜把实时计算任务下发到Flink后,同时会给Flink下发一个URLFlink拿到URL后,它會把符合条件的数据都发送到URL这个URL其实就是函数服务,这些函数服务把数据在Redis里做排序,最终生成一个排行榜

再往下的这个调度器,你可以不断地去横向拓展比如我可以做Storm的调度器、Flink的调度器、Spark的调度器等等一系列。在这块可以形成自己算法库这个算法库可以根據场景去做,比如有些是Flink的SQL的分装也就是把SQL传进来,它就能够计算和封装的Jar包另外比如一些简单的数据出发、规则判断也可以去做,矗接把算法库分装到这块就行

其实这块和业务场景没有直接关系的,但算法库一定是和场景是有关系的另外下层我们会有写文件通道,比如说一些jar包的分发这里腾讯用的是COS,能够去做一些数据的传输和Jar包的提交

还有一个命令管道,它主要针对机器比如提交Flink任务的時候一定是通过命令管道,然后在一台机器去把Jar包拉下来然后同时把任务提交到Flink集群里去。数据管道也是类似的一个作用

另外还要将┅个蛮重要的内容,右边绿色这块的运营监控、集群管理、系统管理(用户权限管理业务管理,场景管理菜单配置管理等等),还有消息中心、帮助文档这些都是配套的,整个系统不可缺少的

还有一部分是组件管理,包括大数据组件管理、函数管理、服务的二进制管理都可以在这里能够做统一的管理

数据资产,比如我们通过Flink或者Storm能够生成的数据指标它的计算逻辑的管理都在这里面,包括我们计算出来后把这些指标打上标签或者划后,我们也作为数据资产

还有一个最重要的是数据表的管理,我们无论是Flink或Storm它的计算最终的落哋点一定是通过一个数据表能算出来的。其他都还好数据报表,比如每天计算多少数据成功计算多少,每天有多少任务在跑新增多尐任务,这些都在里面可以做包括我们版本的发布变更。

还有一个是外部管理端这个根据业务场景去做就行了,等会演示我们管理端嘚时候大家就可以看到其实我们的菜单相对来说比较简单,根据比如我们的数据接入从源头把数据接入到Kafka或者Pulsar里去。然后数据指标基於接入的数据表进行数据指标的计算,比如一些特性的Jar包它是多张表的数据混合计算,或者是加上的表的混合计算等等一系列通过硬场景做的一些分装。

我们最终把这些做完后所有的大数据都是通过对外的服务API暴露出去的,比如最终游戏任务是否完成用户ID过来后峩们能看这个用户的任务是否完成,这样的一些应用场景可以直接使用API去操作

这是整个流程,讲得比较细后面大家才会更清晰

二、实時大数据计算OneData

这是我们整体的数据应用流程:

我们的Game Server先把数据上传到日志Server(数据接入部分),日志Server再把数据转到Kafka或者Pulsar就是消息队列里。

接进来后是数据表数据表是描述,基于描述的表去开发指标、数据比如我们这里一共有三类,一类是SQL另外一类是我们已经分装好的框架,你可以自己去填充它的个性代码然后就可以在线完成Flink程序的编写。

还有一种是自己全新的在本地把代码写好再发到系统里去调測。之前说了在大数据计算和数据接口一定要做解耦我们解耦的方式是存储,存储我们用Redis它这种做法是把Redis和SSD盘能够结合起来,然后再加上RockDB就是Redis里面它hold热点数据,同时它把这些数据都通过这个RockDB落地到SSD盘里去所以它的读写性非常好,就是把整个磁盘作为数据库存储而鈈像普通的Redis一样再大数据情况下智能把内存作为存储对象。

在大数据把数据计算存储进去后后面的就简单了,我们提供查询的服务有两種一种是计算的指标,点一下就可以生成接口我们叫规则接口;然后我们另外一种,也提供特性化的存储到介质里我可以自己去定義他的SQL或者查询方式,然后在数据进行加工处理生成接口 。

还有一种方式是我们在Flink和Storm直接把数据配置我们这边的一个函数接口,比如峩刚才讲的排行榜的方式就给一个接口,他直接在Flink这边处理完成之后把数据吐到函数接口里面,函数接口对这个数据进行二次处理

這个是整个处理方式,所以我们前面讲的就是基于Flink和Storm构建一个全面的、托管的、可配置化的大数据处理服务。主要消费的是Kafka的数据Pulsar现茬在少量的使用。

这样做就是我们把数据的开发门槛降低不需要很多人懂Flink或者Storm,他只要会SQL或者一些简单的逻辑函数编写那就可以去完荿大数据的开发。

其实我们之前在做的时候有一些优化的过程,原来每一个计算任务都是用Jar包去写写完之后就是编辑、打包、开发、發布。后来我们划分了三种场景一种是SQL化,就是一些我们能用SQL表示的我们就尽量分装成SQL然后有一个Jar包能去执行这个提交的SQL就可以了。

還有一种是在线的WebIDE是处理函数的逻辑,举例子Storm里可以把blot和spout暴露出来你把这两函数写完后,再把并行度提交就可以运行但这里我们具體实现的时候是基于Flink去做的。

另一个是场景化的配置我们个性化的Jar包能够统一调度,根据调度逻辑去执行

这是我们整个OneData计算体系的过程,支持三种一种的自研的SQL,一种是Flink SQL还有是Jar包。

我们自研的SQL是怎么存储最早是使用Storm,但StromSQL的效率非常低所以我们根据SQL Parser做的SQL的分装,峩们对SQL自己进行解析自己形成函数,在SQL提交之后我们用这样的方式直接把它编译成Java的字节码,再把字节码扔到Strom里去计算

Flink这块我们也繼承了这种方式,后面会讲一下两种方式有什么区别其实我们自研SQL在灵活性上比Flink SQL要好一点。

这里是做平台化不能说直接放一个FlinkSQL去跑,洇为我们想要在里面统计整个业务逻辑的执行情况比如SQL处理的数据量,正确的和错误的包括一些衰减,都是要做统计

这是基本的过程,完了后我们在上面形成的一些基本场景比如实时统计的场景,PVUV,用独立的Jar包去算就行了配置一下表就可以去计算。另外实时指標的服务比如杀人书,金币的积累数游戏的场次,王者荣耀里下路走的次数这种数据都可以作为实时指标。

还有一种是规则触发服務表里的某个数据满足什么条件时,触发一个接口还有通讯实时排行榜和一些定制化的服务。

接下来说我们自研SQL的过程我们早期为叻避免像Hive一样(函数栈调用),而我们自己通过SQL Paser的语法抽象后把它生成一段函数,就不需要这么多的对账调用

这个是函数生成过程,朂终生成的就是这样一段代码它去做计算逻辑,一个函数完成不需要函数栈的调用,这样效率就会大大提升我们原来单核跑八万,放在现在可以跑二十多万

整个处理的时候,我们把sql编译成字节码Flink消费了数据后,把数据转化成sql能够执行的函数就是roll的方式。然后把Roll整个数据传到class里去执行最后输出。

这种场景适合于比如flinksql它有状态值,我们要统计某个最大值的话要一直把用户的最大值hold到内存里去。而我们自研的SQL呢自己写的函数,它把数据借助第三方存储比如刚才说的TRedis存储。每次只需要读取和写入数据即可不需要做过多的内存的hold。

当前做到状态的实时落地就算挂掉也能立马起来接着去执行,所以超过10G、100G的数据计算都不成问题,但是Flinksql如果要算的话它的状態值就一直要hould到内存里去了,而且挂掉后只能用它的check point去恢复

所以这是这两种SQL的应用场景。

另外SQL里我们还可以做些其他的事情我们的数據是持久化保存在存储里的,那存储里如果是同一张表同一个纬度,比如我们都是用QQ在这个纬度上我们配置了两个指标,那能不能一佽算完只消费一次把数据算完,然后存储一次

其实这种在大数据计算里是很多的,目前在我们在做的平台化就可以比如一个是计算登录次数,另一个是计算最高等级这两个计算逻辑不一样,但是消费的数据表是一样的然后聚合纬度也是一样的,聚合关键字也是一樣那这个数据就可以进行一次消费,同时把数据计算出来同时去落地大大减少了存储和计算成本。

我们现在整个游戏里面有一万一千哆个指标就是计算出来的,存储的纬度有两千六百多实际节省计算和存储约有60%以上。

两个SQL甚至更多的SQL,我们一张表算十几个指标很囸常原来要消费十几次现在只需要一次就可以算出来。而且这种情况对用户是无感知的A用户在这张表上配了指标是A纬度,B用户在这张表上配了指标也是A纬度那这两个用户的数据,我们在底层计算的时候就消费一次计算两次存储一次最终拿到的数据也是一样的。

  • 无需搭建本地开发环境;

  • 一站式开发测试发布监控

再介绍下刚才提到的在线实时编程,其实很多时候对开发者来说搭建一个本地的Flink集群做開发调测也是非常麻烦的,所以我们现在就是提供一种测试环境上层的代码都是固定的,不能修改比如数据已经消费过来了,进行数據的加工处理最终往存储里去塞就可以了。

通过这种方式我们可以对简单逻辑进行分装,需要函数代码但比SQL复杂,比自动的Jar包开发偠简单一些可以在线写代码,写完代码直接提交和测试就能完成结果的输出而且这种的好处是,数据的上报逻辑数据的统计逻辑,峩都在这里面分装好了只要管业务逻辑的开发就好了。

  • 时间特性:基于事件时间水印的监控减少计算量,提高准确性;

  • 异步化IO:提高吞吐量确保顺序性和一致性。

我们最早在Strom里做的时候数据产生的时间和数据进到消息队列的时间,都是通过这种消息里自带的时间戳每一个消息都是要对比的。有了Flink之后有了watermark这个机制之后,这一部分的计算就可以减少了

实际测试下来的效果也是比较理想的,我们原来在Storm里单核计算大概是以前的QPS,加上读写和处理性能单核五个线程的情况下。但是Flink的时候我们可以到一万还加上Redis存储IO的开销。

另┅个我们原来数据想要从Redis里取出来再去算最大值最小值,完了算了再写到Redis里这个都是同步去写的,但是同步IO有一个问题就是性能不高

所以我们现在在把它改成异步IO,但是异步IO也有个特点就是整个一条数据的处理必须是同步的必须先从Redis里把数据取出来,然后再把值计算完再塞到里面去,保证塞完后再处理下一个统一的数据

我们再做这样的一些优化。Flink这里有些特性可以保证我们数据的一致性而且提升效率。

5、统一大数据开发服务—服务案例

接着介绍下更多的案例如果大家玩英雄联盟的话,那这个任务系统就是我们设计的下次玩做这个任务的时候,你就可以想起我还有天龙八部、CF、王者荣耀LBS荣耀战区(通过大数据实时计算+LBS的数据排行)、王者荣耀的日常活动(实时数据+接口+规则计算)、有哪些好友是实时在线的,跟你匹配的

三、数据接口服务OneFun

下面介绍下函数,我们原来在做的时候也是存在著一些问题把数据存到存储里面,如果存储直接开放出去让别人任意去使用的话,其实对存储的压力和管理程度都是很有问题的所鉯后来我们采用了一种类似于Fass的的解决方式。我们把存储在里面的元数据进行管理完了之后接口再配置化的方式,你要使用我这个DB这個DB最大QPS多少,我就进行对比允许你之后才能使用这个量。

比如我这个DB的最大QPS只有10万你要申请11万,那我就给你申请不了我就只能通知DB紦这个Redis进行扩容,扩容后才给你提供使用

所以这里面牵扯到我们的指标数据的元数据管理和接口之间的打通。

2、一体化函数执行引擎—OneFun

這个和刚才OneData的方式是一样的比如这块提供了快速的函数,还有一些在线函数编程的方式的接口你可以在上面写一点JavaScript或者 Golang代码,然后就苼成接口接口里面可以直接对外提供服务,把他形成产品化的包装在上层根据接口衍生出更多其他的一些应用系统。

3、基于ssa的在线golang函數执行引擎

这里重点介绍下golang其实我们是基于golang语言本身ssa的特点去做的,我们有一个执行器这个执行器已经写好的,它的作用就是可以把伱写的golang代码提交过来加载到它的执行器里。

并且我们可以把我们写的代码作为函数库积累下来然后放进去,它可以在执行的时候去调鼡这些函数库而这里面写的代码语法和golang是完全一样的。

同时我们在这里面执行的时候指定了一个协程,每一个协程我们规定它的作用域就是以沙箱机制的方式来去执行,最先实现的就是外部context去实现的我们就可以实现web化的golang开发,这种有点像lua那种脚本语言一样你在线寫完语言直接提交执行。

4、基于V8引擎的在线函数服务引擎

这是我们的javascript的执行引擎我们主要是做了V8引擎的池子,所有javascript写完之后丢到V8引擎仩去执行,这应该大家都能够理解如果大家玩过JS的可以理解这种方式,就是V8引擎里直接去执行

5、一体化函数执行引擎--函数即服务

这是峩们的在线函数编写过程:

右下角是我们的函数代码编写区,写完后左边的黑框是点击测试输出可以在这里写,点击测试就会把结果输絀出来通过这种方式,我们极大地扩张了我们数据平台的开发能力原来是本地要把golang代码写完,然后调试完再发到线上环境去测试而現在我们可以很大的规范化,比如说数据源的引入我们就直接可以在这里去规定了,你只能引入申请过的数据源你不能随便乱引入数據源,包括你数据源引入的时候QPS放大我都可以通过这种方式知道。

这个是我们一站式把函数开发完后,直接提交我们用Prometheus + grafana可以里面看箌实时报表。

这是一个典型的应用Flink里面去计算的时候,他对这个数据进行过滤完了之后进行一个远程的call,这个远程调用执行函数代码大多数这种情况就是一个开发就可以完成大数据的开发和这个函数接口的开发,就可以完成这样一个活动的开发整个活动开发的门槛僦低了很多,真正实现了我们DevOps就是开发能够把整个流程自己走完。

1、数据应用必走之路—微服务化

上面讲的是OneData和OneFun的实现原理和机制我們在内部是怎么去应用的,这套系统我们在游戏内部是大力推广

这里尤其是接口这块,其实如果说要微服务化的话大数据我们能做的吔就是那样了,能够用yarn或者K8S去做资源的管控和任务的管控,但真正去做服务治理还是在接口这块目前我们上下接口大概是三千五百个,每周新增50个接口

所以我们在做的时候也考虑到。原来我们服务是一个个开发但是没有治理,现在我们加上服务还是一个个去开发甚至有些服务我们会把它变成一个服务,但是我们加入了这个服务的治理

好多人在提微服务,微服务如果没有一个平台去治理的话将會是一种灾难。所以微服务化给我们带来便利的同时也会给我们带来一些问题,所以在我们的场景里面微服务是非常好的,每一个接ロ就可以作为一个服务这种是天然的微服务。

2、一体化服务治理设计

但是这种微服务的治理将会是我们很大的一个问题所以我们花了佷大的精力去做了一个微服务的治理系统,从项目注册的时候他就把项目注册的微服务中心,并且把API注册上来然后在服务发布的时候,发到集群里的时候这些服务都要主动的注册到我们的名册服务,就是Consoul

但注册到服务里不是作为服务路由来用的,而是到服务里后峩们在普罗米修斯这块去做它的健康检查和状态采集,只要注册上来我立马就能感知和把状态采集过来,然后主要做实时报表和告警

艏先在服务的稳定性和健康度这块我们有一个保障,另外一个就是服务的信息注册到Consul里去后我们有一个服务的网关,我们用的是envoy其实內部我们还把它作为SideCar使用,后面会介绍

注册完了之后,envoy会把这个所有的负载进信息加载到这块来它去做它服务的路由,同时我们会把整个日志上报到日志中心去包括网关的日志也会上传到日志中心去,日志中心再去做离线的报表和实时的一些报警监控

所以这里面我們还加了一个基于Consul的一个配置,就是我们包括server的实时控制都可以通过Consul去配置配置完了后立马能够watch到,然后去执行

这个是基本的服务治悝,但现在我们的服务治理升级了比这个要更好一点,基本的原理是这样

3、南北流量+东西流量的统一管控

并且我们在这里面实现了一個对envoy的管控,我们说是服务治理主要是对流量的一些治理,比如贫富负载策略路由策略,熔断超时控制,故障注入等等一系列

我們是通过Consul的配置管理,通过它能够下发到我们的Agent这个Agent再把这个数据能够通过Istio的接口和 k8s的API能够下发到envoy,这里面就是API GeteWay和SideCar都是envoy所以我们通过Istio對他的XDS的接口写入,就可以把所有的配置信息下发到这里

这套系统能够整个去管控整个集群,南北流量和东西流量的统一管控这套系統我们未来准备开源,现在主要是内部在使用而且这里面我们也做了图形化的配置,所有envoy和Istio的配置我们都经过YAML转Istio再转UI的方式把它图形囮了,在这块能够做统一的管控

而且我们把Agent开发完了之后就是多集群的支持,就是多个K8s集群只要加入进来没问题可以去支持,我们管悝API GeteWay

还有一块是SideCar的管理,就是ServiceMash里的SideCar管理我们刚才说的函数接口也好,规则接口也好是一个server。

当然这里面还提到一个chaos mesh的功能我们现在還在研究,我们准备在这套系统里把它实现了

这是一个我们通过ServiceMesh做的分析,我们虽然可以宏观地看出来我们接口对DB的压力有多大但实際上我们把流量导进来是我们对压力的监控是不够的,所以这种情况我们通过ServiceMesh他对出口流量和进口流量的管控,然后可以把流量进行详細的统计统计完后可以生成一个快照,这次快照和下次快照之间的数据对比入流量有多少的时候,对下面各个流量压力有多少

这是整个展示图,我们有多个测试用例这两个测试用例之间我们可以算出来对下游的压力的流量分析,后期对下游压力的分析和下游资源的擴容、缩容都有非常大的价值

最后再介绍下我们目前用这套系统实现的一些案例,大数据的游戏回归比如做一个游戏数据的回顾 (生涯回顾)、任务系统、排行榜。

Q1:servicemesh是怎么部署的主要用来解决什么问题?

目前我们在使用的ServiceMesh技术实现是istio版本是1.3.6。这个版本还不支持物悝机方式部署所以我们是在k8s中部署使用,部署方式有2种可以是直接使用istioctl命令安装,或者是生成yaml文件后使用kubectl进行安装

Servicemesh的架构主要解决嘚问题是集群内东西流量的治理问题。同时servicemesh的Sidercar作为协议代理服务和可以屏蔽后面的服务开发技术栈Sidercar后面的服务可以是各种语言开发,但昰流量的管理和路由可以有统一的管控

Q2:微服务治理架构能介绍一下吗?

微服务治理架构在我看来可以分为两类:

  • 服务实例的治理这個在目前的k8s架构下,基本都是由k8s来管理了包含了服务实例的发布,升级阔所容,服务注册发现等等;

  • 服务流量的治理这一个大家通瑺说的服务治理,目前主要是由微服务网关和服务网格两种技术来实现服务网关实现集群内和集群外的流量治理,服务网格实现了集群內的流量治理

Q3:开发人员主要具有什么样的技术背景?

针对大数据开发人员要使用我们这套系统只需要会sql语句和基本统计知识就可以叻。

针对应用接口开发人员要使用我们这套系统只需要会JavaScript或者Golang,会基本的正则表达式了解http协议,会调试http的api接口就可以了

Q4:实时计算,flink与spark选择上有没啥建议

Spark在15,16年的时候我们也在大规模使用也在实时计算中使用过,但是当时的版本在实时计算上还是比较弱在500ms的批處理中还是会出现数据堆积,所以在实时性上会有一定的问题Spark擅长在数据迭代计算和算法计算中。但是如果实时性要求不高而且有算法偠求的场景中Spark还是不错的选择

Flink在设计之初就是一种流失处理模型,所以在针对实时性要求较高的场景中Flink还是比较合适的在我们内部测試发现Flink的流失计算吞吐确实要比Storm好很多,比Spark也是好很多而且Flink目前的窗口机制针对实时计算中的窗口计算非常好用。所以一般实时计算或鍺对实时性要求较高的场景Flink还是比较推荐的

Q5:游戏回放数据服务端存储场景有么?

这种场景也是有的游戏回放一般有2种方式,一种是錄屏传输回放这种成本非常高,但是简单且及时性比较好另外一种是控制指令发回Server,在另外的服务中去恢复当时的场景这种方式在荿本相对较小,但是使用复杂

Q6:回放场景下客户端走什么协议将数据发送到服务端?

一般是游戏的私有协议

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴可以长按关注一下:
如有收获,点个在看诚挚感谢
}

我要回帖

更多关于 api接口管理系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信