物联播控系统

我要开发同款
216阅读

作品详情

一、系统架构

从 单体架构+瀑布模式 到 微服务架构+DevOps

1.播控系统独立部署

该项目为北京冬奥会鸟巢现场播控解决方案,期间负责技术研发、通讯架构以及项目运维。

★ 协议栈重构

引入MQTT协议,实现局域网组网播控,解决网络环境不可靠、终端设备系统资源有限等关键问题,使得设备通讯更加稳定、可靠、高效,在未来可持续发展的进程中将大大降低研发成本以及运营成本。

★ 服务架构重构

引入微服务Microservice架构,拓展异构服务的能力支持,解决业务耦合、服务资源占用等关键问题,使得应用程序的可持续演进(持续代码完善、持续版本升级、持续缩放部署、DevOps)变得更加便捷清晰,提升服务性能,缩小迭代以及维护成本。

(1)文件存储服务

文件存储服务具备初步的独立服务能力,为平台高可用异构方案实施提供标准原型。

(2)API接口服务

根据 RESTful 规范,对应用程序API接口聚合,为软件系统不同组成部分衔接提供标准化的接口能力,有效降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的可维护性和可扩展性。

★ 数据库设计

结合MySQL,引入Elasticsearch文档数据存储方案,为未来平台级物联系统海量数据搜索分析提供引擎动力。

★ 技术栈实施

(1)MQTT通讯服务设计实现

作为一种轻量级协议,MQTT 拥有简单紧凑的架构和较小的代码占用空间,适用于低成本、低功耗的IoT微控制设备。MQTT 可在 TCP/IP 协议上兼容运行,为延迟较高、质量不佳的网络环境提供可靠的解决方案。

(2)APISIX - 云原生、高性能、可扩展的微服务 API 网关服务部署

提供负载均衡、动态上游、灰度发布、精细化路由、限流限速、服务降级、服务熔断、身份认证、可观测性等功能,使得服务更加安全健壮。

(3)ELK - 企业级日志系统、分布式搜索分析能力、可视化日志监控、文档级数据存储应用

对数据进行收集、统计、分析、存储,故障发现,提高解决问题的效率,挖掘数据价值。

(4)跨平台、分布式缓存中间件Redis,服务级高级消息队列协议AMQP实现

缓存中间件以及消息列队的支持,业务解耦、异步处理、流量削峰,提高系统的响应时间以及吞吐量。

(5)高性能的HTTP和反向代理服务器Nginx,PM2守护进程管理器服务搭建

使用Nginx代理减少内存占用,提高并发能力和响应速度,为平台服务稳定构筑强健的基础支持;

跨平台PM2进程管理器使得任务管理变得灵活、快速、稳定、可控。

(6)Node中台服务架构

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,利用NodeJS的非阻塞式I/O模型、事件驱动机制,创建高性能服务器及可在该服务器中运行的各种应用程序的开发工具。

二、项目管理

**1.项目文档化**

项目文档是描述、记录和传递项目相关的各类信息的工具和载体,有助于项目规范管理提高效率。

摒弃了**第三方服务~~ShowDoc~~**,自云平台2.0开始在**私服搭建了强大的接口管理平台**,并进行了定制化二次开发。从项目管理到接口管理、支持团队协作,无人数限制,支持在线测试。通过建立文档使得团队间协作能有序进行,并对重要的信息内容存档,确保内部文档安全可控。

**2.管理规范化**

软件项目版本管理是整个软件生命周期的最重要的一个环节,版本控制最主要的功能就是追踪文件的变更。

摒弃了**集中式版本控制系统~~SVN~~**,自云平台2.0开始在**私服搭建了轻巧而健壮的Git分布式版本控制系统**,并进行了定制化配置,使得项目版本管理变得有效、高速,并落实到软件开发中。

三、运维实施

1.系统服务搭建及环境配置

★ 基于VMware Esxi 6.7虚拟化技术平台搭建Centos7 Linux系统

搭建稳定的Centos Linux环境,使得私有服务动态扩展成为可能。

★ 基于Centos7 Linux系统搭建研发环境及环境配置

建立开发环境、测试环境、公测环境、正式环境,为基于服务的应用创造环境条件,这些经过充分考虑和合理规划的平台所带来的好处和价值在未来将得到可靠的验证。

★ 虚拟化容器服务docker部署

服务治理,使得复杂的应用环境变得简单可靠。

★ 网络技术支持

网路连络,为远程访问和家庭办公提供无差别的环境支持。

2.工具定制及私有化部署

(1)数据库私有服务部署

| 数据库 | 描述 | 作用 |
| --- | --- | --- |
| MySQL | 最流行的关系型数据库管理系统 | 关系型数据存储 |
| Redis | 基于内存亦可持久化的日志型、Key-Value数据库 | 数据缓存,原子锁实现 |

(2)中间件私有服务部署

| 名称 | 描述 | 作用 |
| --- | --- | --- |
| RabbitMQ | 实现了高级消息队列协议(AMQP)的开源消息代理软件 | 业务解耦、异步处理、流量削峰,提高系统的响应时间以及吞吐量 |
| ELK Stack | 一套支持数据采集、存储、分析、展现的全流程数据分析工具 | 用于日志搜索、分析和文档数据存储 |

(3)反向代理应用搭建

| 名称 | 描述 | 作用 |
| --- | --- |--- |
| FRP | 高性能反向代理应用 | 实现内网穿透,为内网服务访问提供可能的解决方案 |
| Nginx | 高性能的HTTP和反向代理web服务器 | 实现服务代理,为大量访问提供并发支持 |

(4)网关及服务发现治理

| 名称 | 描述 | 作用 |
| --- | --- |--- |
| APISIX | 高性能、可扩展的微服务API网关 | API接口聚合,动态路由,负载均衡,身份验证,监视警报,服务治理等 |




3.CI/CD 持续集成与运维发布

引入DevOps思想,推进软件开发测试运维的一体化进程,节省人力成本,提高工作效率,避免发布的失败率。DevOps划分为代码、配置与部署环境三个组成。

DevOps摘要:

> 重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

四、团队协作

公司目前仍处于发展阶段,研发一人一个岗位,团队小但配合紧密,环环相扣又相互独立。

对前端和应用客户端:

(1)搭建框架,指导并协助前端使用业界领先的技术方案完成中台微服务架构,打通React前台到Node中台服务与后端、客户端应用通讯的全流程交互环节;

(2)通过引入新特性与通用技术,包括MQTT标准协议,高级消息队列协议AMQP,web通讯协议websocket,实现服务异构、端与端之间的实时通讯、高可用的异步消息队列;

(3)指导并协助客户端与前端实现应用证书加密协议和数据签名技术,增强通讯安全和保证数据可靠。

对测试与项目产品:

(1)搭建自动化平台、工单系统,引入DevOps思想,流程规范化,有效解决以往开发、测试、产品在项目提测发版验收环节存在的不可控的混乱局面,提升团队之间的沟通效率,严格把控产品上线迭代。

五、私有化部署

搭建服务器环境和软件私有部署,满足研发所需要的环境条件。这对研发技术要求提升的同时,大大降低了IT成本,在现在和以后都将持续发挥作用。

以下列举了部分主要研发所需要的软件服务,这些服务均在公司内网服务器进行了私有化部署搭建:

(1)服务器环境构建

基于VMware虚拟平台搭建的Linux服务器

| 环境搭建 | 服务器配置数量 |
| --- | --- |
| 开发 | 网关+前端服务器1台,数据仓专用服务器1台,文档+部署专用服务器1台,后端专用服务器1台 |
| 测试 | 网关+前端服务器1台,后端专用服务器1台 |
| 发布 | 网关+前端服务器1台,后端专用服务器1台 |

(2)数据库搭建

基于Centos7 Linux系统私服搭建MySQL

(3)KvStore数据库

基于Centos7 Linux系统私服安装Redis

(4)消息队列

基于Centos7 Linux系统私服搭建RabbitMQ

(5)MQTT协议

基于Centos7 Linux系统私服搭建MQTT客户端代理服务

(6)日志+数据搜索分析

基于Centos7 Linux系统私服搭建EKK服务

(7)CI/DI持续集成与持续部署

版本管理、持续集成与持续部署是软件生命周期最重要的一个环节,能实现高效率持续交付,通常小公司基于技术能力与成本考虑都没有实践,开发、测试、产品在软件发布中充当的角色通常处于是自由放任的模式。
然而导致的结果是显而易见的,软件版本不可控,随意发布出现问题难以追责,重复性工作,增加沟通成本等等,长期以往,将形成恶性循环,不利于监管与交付。
专门研发该类平台的公司都有提供商业化的解决方案,价格从数千元到数万元每年不等。自平台2.0开发开始,我对公司软件版本控制、持续集成与持续部署环境进行了全面搭建,开发、测试、产品都得到了规范化的实践,提高了项目交付效率和质量。

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论