内容简介:大翼航空成立于2015年,致力于无人机及其应用管理平台的研发、销售和服务,是DJI大疆创新系统集成商、senseFly授权经销商。公司主营自主研发的“风筝线”无人机管理系统,将无人机视作空中物联网平台。“风筝线”系统注重空中数据的精准采集、智能分析与实时呈现。在“一云一网一图”的框架和成熟飞行平台的基础上,着力于应用软件的研发,打造包含采集、分析与展示的“端到端”一体化解决方案,帮助客户进行高效的分析及决策,满足行业需求。目前,我公司的无人机云系统和服务已经为公安、消防、环保、农业等客户带来较大的效率提升,
大翼航空成立于2015年,致力于无人机及其应用管理平台的研发、销售和服务,是DJI大疆创新系统集成商、senseFly授权经销商。
公司主营自主研发的“风筝线”无人机管理系统,将无人机视作空中物联网平台。“风筝线”系统注重空中数据的精准采集、智能分析与实时呈现。在“一云一网一图”的框架和成熟飞行平台的基础上,着力于应用软件的研发,打造包含采集、分析与展示的“端到端”一体化解决方案,帮助客户进行高效的分析及决策,满足行业需求。
目前,我公司的无人机云系统和服务已经为公安、消防、环保、农业等客户带来较大的效率提升,也在 “智慧城市”中展现了极大价值。随着无人机技术的成熟,网络通信技术的发展,传感器等负载的多样化,未来将应用于更多行业。
原始架构
“风筝线”无人机云系统,包括“无人机”和“云系统”两大部分。其中:
- “无人机”部分,包括硬件(飞机+摄像头+传感器)、固件、软件。软件作为控制中枢,(通过固件)负责:(1)从云服务器接受指令;(2)向无人机发送指令;(3)从传感器手机数据;(4)将数据回传云服务器。
- “云系统”部分,主要是服务器,包括:(1)通讯服务器,负责与无人机软件交互;(2)数据库服务器,持久化数据;(3)web服务器,运行实时监控和管理系统;(4)视频服务器,接受无人机软件的推流并传递给实时监控。
整体架构图如下:
特殊性及方案
看似并不复杂的总体结构,实施时还是会遇到一些困难。这主要是由于无人机这一特殊载体决定的。
- 流量集中在白天,尤其是工作时间,晚上几乎没有任何流量。
- 流量的波动非常大,波峰时有数百上千架飞机同时传送数据,波谷时可能只有数架甚至没有。
- 数据传输主要通过4G网络,网络状况可能不稳定。
- 传输的位置、状态等数据频次高、体积小。
- 部分情况下,要求拍摄视频并同步传输到实时监控。
经过认真调研,采取的方案为:
- 手机软件与通讯服务器的协议为 MQTT ,而非常规的 TCP/UDP 。MQTT 适用于在网络不稳定的情况下,多频次传输少量数据。
- 通讯服务器使用消息队列,初级阶段使用 Redis 模拟消息队列。后续随着流量的增长,将使用 Kafka 等专业消息队列软件。
- 手机软件与通讯服务器使用 socket 建立长连接,并允许中断,中断后可续传。
- 视频拍摄后,直接保存到手机中,只在网络情况良好时,才上传到视频服务器。
考虑到以上的诸多特殊性,“风筝线”使用 Node.js 作为开发语言,主要原因是:
- Node.js 特别适用于高并发的情况
- 前后端统一,便于减少开发的复杂度。
在服务器的使用上,从一开始就没有决定自建服务器,主要是自建服务器需要大量的维护成本,这对于初创公司来说并不是一件轻松的事情。
因此,通用服务器、数据库、Redis 、CDN 等均直接购买了阿里云的服务。
阿里云除了商业服务外,还提供一些免费的工具,例如:CI工具 CodePipeline 。
阿里云CodePipeline是一款提供持续集成/持续交付能力,并完全兼容Jenkins的能力和使用习惯的SAAS化产品。通过使用阿里云CodePipeline,可以方便的在云端实现从代码到应用的持续集成和交付,方便快速的对产品进行功能迭代和演进。
尤其是,CodePipeline 支持的数种语言中恰好包含 Node.js 。只要开发人员将代码上传到 git 服务器的 master 分支,就会自动触发构建和测试过程,测试通过后,自动部署到CDN。
迁移过程
在2017年,考虑到国际化业务的可能性需要,购买了境外某Paas服务。实际运行了大半年后发现,访问境外服务器有比较严重的延迟,对于业务有比较严重的影响。因此,在考察了国内各家 Paas 之后,我们选择了阿里云。
选择阿里云是基于如下几个方面的考虑:
- 市场评价:阿里云属于云服务商的第一梯队。
- 服务的可靠性和稳定性:阿里云拥有为淘宝等超大型网站服务的经验。
- 基础组件的完备性:如核心的RDS数据库支持,Redis以及MQ等等这些服务。阿里云拥有这一系列非常丰富的产品,其基础组件的产品线也非常完善。
新架构
首先,我们采用了前后端完全分离的方式。
网站、系统的前端部分采用 OSS(对象存储)+ CDN(全站加速)完全静态化的托管到阿里云上。
后端服务,部分沿用原有的方式,用多台虚拟服务器 + SLB(负载均衡)进行访问控制;部分采用函数计算(Severless 架构)进行尝试。
自动化测试与持续集成
之前我们的自动化测试采用的是 Git 钩子方式,在 PreCommit 阶段进行,这样的话有一个问题,我们自己的开发电脑配置并不高,随着测试用例的增加,每次测试时间越来越长,严重影响了开发效率。所以我们决定将测试放到提交后执行。
CodePipeline 配置
npm test npm run build ssh -o StrictHostKeyChecking=no [忽略参数] "NODE_ENV=production node /PATH/ci"
热更新
由于负载均衡器后有多台服务器,所以当其中一台停止更新时,流量会比自动引到其他的服务器上。
热更新脚本会顺序执行以下操作:
- 记录 Commit Hash,方便回滚
- 更新代码
- 更新依赖包
- PM2 热重启当前服务器下的服务进程
在构建过程中,除了 CodePipeline 会通知构建的结果以外,阿里云监控系统会针对整个服务的健康状态进行监控,发生异常时通过短信进行报警。我们可以通过准备好的回滚方案进行一键回滚。
整个持续集成的过程中几乎不再需要任何人工的干预。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CASIO fx-5800P编程计算器公路与铁路施工测量程序
2011-8 / 40.00元
《CASIO fx-5800P 编程计算器公路与铁路施工测量程序(第2版)》内容简介:第2版是一本全新的图书。书中的QH2-7T与QH2-8T程序都具有三维中边桩坐标正、反算,路基超高及边桩设计高程计算,边坡坡口与坡脚计算,桥墩桩基坐标计算,隧道超欠挖计算等功能。QH2-7T为交点法程序,QH2-8T为线元法程序,两个程序均使用数据库子程序输入平竖曲线的全部设计数据。测试程序各项功能所用的案例均取......一起来看看 《CASIO fx-5800P编程计算器公路与铁路施工测量程序》 这本书的介绍吧!