根据预测,2020年全球物联网(IoT)连接设备数预计将达到260亿台;而到2025年,该数字将接近700亿。而根据更为详细分析统计,数量庞大的物联网连接中建有60%属于广域低功耗(LPWA)连接需求。NB-IoT技术是3GPP为LPWA领域专门定制发布的无线接入标准,具备大连接、广覆盖、低功耗等诸多优点。国内NBIoT产业链目前已进入快速发展时期,应用触角也日渐延伸到智慧家庭、公共服务、生产制造、可穿戴智能设备等众多领域。未来,预计将会有更为庞大数量的智能终端通过NB-IoT和云端应用服务器交互。
开发稳定优良的NB-IoT物联网应用,需要对NBIoT的芯片/模组/无线接入深入专研,云端应用系统的软件结构和功能上相应的调整和优化也比不可少。部分服务端系统直接套用移动互联网应用框架开发,虽然实现了简单的“云-端”物联对接,但是进入大规模实施和推广阶段后,会遇到各种各样的问题,例如终端耗电大,云端消息丢失严重,功能迭代升级困难等,NB-IoT的技术优势也没有发挥。
良好的NB-IoT应用系统,云端应用服务器应该考虑终端的行为模式和物联网应用场景的特点。较为典型的包括如下三个方面。
(1)云端应用匹配NB-IoT终端连接方式。
根据3GPP规范,NB-IoT终端使用COAP协议和应用服务器交互,COAP是专门针对资源限制型终端(供电/计算/存储/网络能力弱)的协议。如云端沿用现有的连接协议框架和NB-IoT终端对接,例如MQTT、TCP长连接、HTTP等,会导致终端程序变得更复杂、软硬件研制成本、耗电急剧上升。目前通信运营商一般已自建COAP服务器,应用服务器仅需要通过HTTP和COAP服务器对接即可;应用云端应遵循通信运营商的接入指引与自己的终端对接。
(2)考虑NB-IoT终端能力开放平台多个并存的实际情况。
大规模的NB-IoT应用中,终端有可能分布在全国广泛的地区,例如不同地市,不同省份等,需要考虑NBIoT终端可能通过不同途径接入的现实情况。例如应用大部分终端通过通信运营商A的网络接入,但特定地域由于信号覆盖或价格原因,当地终端需接入通信运营商B的网络。应用云端需要考虑兼容不同NB-IoT终端接入和能力开放方式,必要时需要具备对接不同通信运营商能力开放平台的能。同时在应用云端软件的设计上,降低终端接入方式差别对应用功能的影响。
(3)应对NB-IoT终端行为给服务器造成的冲击。
广域低功耗(LPWA)物联网应用中,数量众多的终端有可能加载同一版本程序,行为会存在有很高的同步性,会给应用服务器的业务处理带来浪涌冲击压力。例如水务公司下属数量众多的智能表终端,在程序预设的时间点(例如凌晨1:00)集中上报采集的用水情况数据。应用服务器需要短时间内处理大量的上报信息,如果没有合适手段应对这种浪涌压力,会造成应用侧丢失上报数据,终端指令错误,服务器关键进程出错等。同时,庞大数量终端采集上报的数据,随着应用运行时间增加也会在云端形成数据积累现象,如果缺乏良好的处理手段,同样会影响应用处理的性能。
目前,利用开源软件搭建企业级应用系统已经成为业界常态。随着开源软件种类、数量和质量的不断提升,应用系统的开源软件解决方案在成本、灵活定制、可靠性、快速上线等方面的优势也变得更有吸引力。
丰富的开源软件也为搭建性能优良/运行稳定/可扩展性好的NB-IoT应用云端服务器提供了良好的材料。
NB-IoT应用服务器承担用户交互、终端管理、业务处理、数据存储分析等多种功能,也需要和多个外部网元对接交互,需要有良好的整体框架设计,保证各个功能之间的独立、降低开发难度和易维护性。
(1)微服务架构(Microservice Architecture)通过将功能分解到各个离散的服务(应用服务组件)中以实现相互之间解耦。单个应用服务组件仅实现功能明确定义、处理逻辑清晰的服务,可独立开发/管理迭代。多个应用服务组件组合承接复杂的应用业务逻辑。
(2)起源于主机虚拟化的容器(Container)技术为服务器端的应用开发部署和维护管理提供了极大的灵活性,也为微服务的实现提供了良好的工具。容器为应用服务组件提供了一个类似于虚拟机、环境独立的运行环境,并具备快速启动和便捷移植部署的优点。
(3)NB-IoT应用云端服务器可划分为如下几个微服务,每个服务组件封装在独立的容器中。
●数据库:对其他组件提供数据保存、增删改的服务。
●终端连接:专职负责与NB-IoT能力开放平台对接,对上层应用屏蔽终端连接方式的差异。
●消息总线/队列:在各个服务功能组件之间提供消息传送服务。
●应用业务逻辑:容器内封装应用业务逻辑的实现代码。
●服务器门户(Portal):提供应用的界面功能。
●性能监控:收集主机、各个服务功能组件(容器)的运行情况以及业务日志。
上述不同类型的服务组件,封装的容器实际部署中还可以进一步拆分。例如不同数据库,连接不同运营商能力开放平台,不同的门户(Web/公众号/移动端)等,可以进一步单独容器封装。在实际部署中,低负荷的容器可以集中部署在一台主机中,关键/负荷高的功能组件可单独主机部署,甚至部署在多台主机实现负荷分担。
(4)目前已有丰富的开源软件资源帮助搭建“微服务+容器”的应用服务端系统,小型系统中可以仅利用Docker技术,在不同容器中封装上述各个功能组件,实现相互隔离。容器外部通过脚本配置各个服务组件容器的启动和连接。随着微服务组件数量的增加和分布式部署,可以利用开源的容器编排软件,如Kubernetes、Docker Swarm等,完成对微服务的集中管理。
NB-IoT应用服务器端功能组件封装到不同微服务容器后,可通过消息总线/队列服务组件在微服务容器之间建立消息传送管道,进一步解耦服务组件的同时,提升整体系统的处理性能,同时应对终端集中数据上报造成的浪涌压力。
(1)应用可以参照业界成熟的消息模型用于应用层之间的信息交互。通常消息模型均包含Message(消息体)、Producer(消息生产者)、Consumer(消息消费者)、Broker(消息服务端)等几个部分。在此模型中,消息由Producer发出后,又经过Broker路由送至Consumer。应用服务组件(如应用业务逻辑、终端连接等)以Producer或Consumer身份注册成为消息队列客户端,成为发送消息和接收消息的主体;消息的缓存、路由、分发等操作,由模型中的Broker完成。
(2)有多个开源软件实现了上述消息模型中的Broker功能,如ActiveMQ,Kafka,RabbitMQ等,提供灵活、高效的消息转发和路由。上述软件支持通过配置文件(.xml)调整Broker处理消息队列策略,提升转发消息的性能,例如消息队列个数/长度,调整Topics/Partitions数量(Kafka),优化对处理失败或者过期的消息处理策略(ActiveMQ)等;同时上述软件均提供了开发接口,不同语言开发的功能组件遵循接口即可与消息队列服务交互。
(3)以NB-IoT应用服务端系统中,终端上报信息的处理流程为例,可以通过开源软件Kafka提供的消息处理,处理终端集中上报数据行为造成的浪涌冲击。(如图1所示)
图1
在浪涌高峰时间点,负责与通信运营商能力开发平台对接的功能组件以消息Producer的身份接入Kafka,收到终端上报消息后不做复杂的处理直接放入消息队列,避免业务逻辑处理不及时造成上报消息丢失,缓解应用业务逻辑功能组件的处理压力;Consumer端运行与Partition数量相同应用业务逻辑功能组件,同时内部启动多条线程并发处理队列送来的消息。利用上述消息处理机制可有效提升云端应用的消息处理能力,在业务忙时可应对闲时运行几十倍的浪涌压力。
数据库是每个信息应用系统必不可少的部分,包括NB-IoT应用云端服务器。NB-IoT应用的特性决定了随着系统运行时间的增加,终端数量/采集数据/监控数据在云端的累积也会急剧增加,单一的关系型数据库在应对数据I/O、海量数据分析、NoSql数据存储、全文数据检索等方面会面临瓶颈。应用云端需要有完备的策略来应对这种压力,而细分数据的类型和用途区别处理是其中的关键。
开源软件中已有很多高质量数据库软件,包括关系型数据库MySql,PostgreSQL;非关系型数据库MongoDB、Redis;还有如建立在Apache Lucene™ 基础上的搜索引擎Elasticsearch,这些软件专注于不同的数据处理细分领域。应用云端可以根据数据类型和用途的差异,针对性的选用不同开源数据库,让NB-IoT应用系统具备更良好的运行性能,同时发掘数据中的更多价值。
(1)使用关系型数据库如Mysql、PostgreSQL等支撑云端应用基本功能的运行,例如业务逻辑、UI界面等。关系型数据库配套的开发资源十分丰富,从需求分析到系统设计,从开发语言接口到优良代码框架都有成熟的资源,可以有效提升开发效率和代码质量。
(2)系统中需要频繁读写、快速返回检索结果的业务数据,放入memcache、redis等支持内存缓存的数据库单独管理,避免加重RDBMS负担,致使服务器响应恶化,影响应用系统的整体功能。例如,NB-IoT应用到不同能力开放平台的连接token、服务功能组件之间消息路由策略数据、系统公共参数等。如redis支持内存保存数据,并对外提供远高于Mysql的高速查询服务。
(3)利用NoSql数据库存储随着应用系统运行累积产生的数据,包括终端历史上报累积的数据,进程产生的业务日志等。针对此类数据的查询和复杂分析需求,也均由NoSql数据库,降低RDBMS负荷。同时大量NoSql形式的原始信息存储更为直接方便,Nosql数据的分析和检索也有丰富的开源工具,如Mongdo和Elasticsearch均支持更为灵活的分析聚合,也能进行复杂的数据建模。
结合容器和消息队列的使用,组合不同开源数据库软件并不需要增加太多的开发工作,却能帮助NB-IoT应用系统能更有效应对业务量的增长。
目前,丰富的开源软件为开发者提供了大量的功能组件“素材”,而对NB-IoT技术特性和终端行为特点的充分了解和仔细分析,是帮助开发者选取合适“素材”搭建稳固、高效的NB-IoT应用云端服务器的基础。