C/S模式充电桩管理软件向微服务架构演进

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务架构在最近两年炒比较火热,最近有个朋友在做充电桩管理软件,该软件是两年前采用C/S模式开发的 ,主要Client(UI)和 Server端两个层次,中间采用数据库共享方式进行通信,如下图所示为充电桩管理软件的客户端界面: 这类应用是传统的C/S模式,适合于30个场站以下的管理和应用,在当前充电桩整体规模不大的情况下,还是勉强可以支撑试用的,最近我这位朋友遇到一个新需求,要接入到第三方的管理平台(B/S模式)中,要求提供标准的REST接口。

微服务架构在最近两年炒比较火热,最近有个朋友在做充电桩管理软件,该软件是两年前采用C/S模式开发的 ,主要Client(UI)和 Server端两个层次,中间采用数据库共享方式进行通信,如下图所示为充电桩管理软件的客户端界面:
客户端界面

这类应用是传统的C/S模式,适合于30个场站以下的管理和应用,在当前充电桩整体规模不大的情况下,还是勉强可以支撑试用的,最近我这位朋友遇到一个新需求,要接入到第三方的管理平台(B/S模式)中,要求提供标准的REST接口。由于传统的应用开发者(尤其是以嵌入式为主的开发工程师),对REST 等类型的互联网接口存在一定的陌生,在向我咨询后,我们仔细分析了该项目的需求,我给他推荐了向微服务框架演进的方法,最后他们顺利的接入到第三方的管理平台中,或者集成资质。本文将主要阐述我们将传统的充电桩管理软件向微服务框架演进的经验,以下分几个层面进行拆分和演进:

1\业务闭环、颗粒度细分、RPC交互
原来的充电桩管理软件主要划分为两个模块(UI和后台服务器),UI主要用于客户信息维护、充值、充电桩状态监视等功能,后台服务器主要负责充电桩接入、鉴权、执行任务、数据采集等功能。通过对这两个模块进行分析,我们将 UI和后台服务器都进行了拆分。
UI拆分成三个模块(本地大屏监控、本地运营客户端 、中心监控客户端,通过权限进行区分),本地大屏监控直接从本地服务程序中获取数据,部署在场站,用于实时反馈充电桩状态(忙、闲状态),便于客户快速的定位到空闲的充电桩进行充电。本地运营客户端主要用于本地充值、场站经营状况管理等功能。中心监控客户端是一个功能全集,用于监控所有的充电桩状态、经营情况等。
后台服务器拆分成接入管理、鉴权、计划、事件四个模块。接入管理负责充电桩的接入和心跳维护,采用Boost ASIO实现,支持30000+充电桩接入,心跳周期为15秒一次。鉴权:对设备进行认证管理,剔除非法的设备、并对设备进行分域管理。计划:负责根据客户定制的计划,定期执行任务或者采集数据。事件: 负责收集和存储充电桩的各类事件,并上报。
拆分的各个模块都支持按域动态扩容,在传输层支持主备IP备份策略,各个模块之间采用Google Protobuf RPC进行交付通信。
2\业务服务下沉、本地自治、多级缓冲
为了防止因为WLAN网络异常影响,我们做了多级防护,多级缓冲,保障数据不丢失,业务不中断。
a,所有模块均支持下沉部署,模块间通过标识和类型进行识别。
b,本地采用SQLite数据库进行本地业务最小化自治,SQLITE保持设备和用户最小信息,支持后付费同步功能,当WLAN侧出现异常,本地可保障业务基本运行,不中断,WLAN恢复后可自动同步信息到数据中心。
c,对于关键数据采用确认机制和多重缓冲,例如WLAN网络异常,在本地保存60+天以上的业务数据缓冲LOGS, WLAN恢复后,自动同步到数据中心。
d,数据进行层层过滤,每层过滤后将最小量级数据上报给上一层,避免数据中心数据库爆裂式增长,满足核心基础数据要求为准要。
3\Go语言尝试、统一应用层接口
除了在自身架构上的调整,为了提供接口给第三方应用,按照要求,我们采用REST接口,并将服务层和应用层进行彻底隔离,统一接口,按域区分不同的应用和权限,支持多应用接入。因此我们新拆分的中心监控客户端进行调整,也通过统一的接口模块接入到后台服务中,不过我们对域进行保留,0x00~0x80的域认为是自己系统的设备。其他域开放给第三方应用。在这个过程中第一次推荐采用Go语言实现,引用了BeeGo开源代码作为基础框架,同时支持WebSocket接口方式发布即时状态、告警和事件。在后续朋友的开发过程中,足以证明,Go语言天生就是做互联网的开发语言,极高的开发速率。为了防止统一接口管理模块存在性能瓶颈,我们采用Zookeeper + Nginx 作为集群基础框架,提高稳定性,便于后续轻松扩容。

经过2个月的架构调整,整套系统按期交付,即兼容了老系统的基础模块,又完成了和第三方应用的业务对接,做到了业务上的平滑过渡,性能有原来的30个场站规模,演进成可以平滑扩容的架构,初步预估可以做到10万个充电桩的接入和业务运营。经过这个项目历练,朋友在微服务框架上有了全新的认识,也被Go语言的高校的开发效率和朴质的编程规范折服。

目录
相关文章
|
6天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
6天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。
|
1天前
|
监控 测试技术 持续交付
探索现代微服务架构的最佳实践
【4月更文挑战第25天】 随着软件开发领域不断演进,微服务架构已成为设计灵活、可扩展且高度可维护系统的首选方案。本文将深入探讨构建和部署微服务时的关键最佳实践,涵盖从服务划分原则到持续集成/持续部署(CI/CD)的流程,再到监控与日志记录的策略。我们的目标是为开发者提供一套实用的指南,帮助他们在构建未来的应用程序时做出明智的架构选择,并确保这些系统能够快速响应市场和技术的变化。
|
1天前
|
消息中间件 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【4月更文挑战第25天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。本文深入探讨了如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及实践中的挑战和应对策略。通过分析多个成功案例,我们总结了一系列最佳实践,并提出了一套可量化的性能优化方法。文章不仅为开发者提供了具体的技术指导,同时也强调了团队协作和持续学习在微服务转型过程中的重要性。
|
2天前
|
SQL 设计模式 算法
软件体系结构 - 架构风格(8)解释器架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(8)解释器架构风格
11 0
|
2天前
|
设计模式 安全 API
软件体系结构 - 架构风格(5)层次结构架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(5)层次结构架构风格
10 0
|
2天前
|
持续交付 API 开发者
构建高效微服务架构:后端开发的新范式
【4月更文挑战第24天】 随着现代软件系统的复杂性日益增加,传统的单体应用已难以满足快速迭代与灵活扩展的需求。微服务架构作为一种新兴的软件开发模式,以其服务的细粒度、独立部署和弹性伸缩等优势,正在逐渐成为后端开发的重要趋势。本文将深入探讨微服务架构的设计原则、关键技术以及在实际业务中的应用实践,旨在为后端开发者提供构建和维护高效微服务架构的参考指南。
|
2天前
|
存储 分布式计算 Java
软件体系结构 - 架构风格(1)批处理架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(1)批处理架构风格
8 0
|
2天前
|
人工智能 安全 大数据
SDN(软件定义网络)——重塑网络架构的新视角
SDN(软件定义网络)是网络架构革新的关键,通过分离控制与数据平面,实现网络的灵活、高效管理。未来,SDN将更广泛应用于各行业,与云计算、大数据、AI融合,推动数字化转型。开放与标准化的趋势将促进SDN生态发展,提供以业务需求为导向、智能化自动化管理及增强网络安全的新视角。SDN将在更多领域扮演重要角色,支持网络技术的创新与进步。
|
3天前
|
监控 API 持续交付
构建高效微服务架构:后端开发的新趋势
【4月更文挑战第23天】 随着现代软件开发实践的不断演进,微服务架构已经成为企业追求敏捷、可扩展和弹性解决方案的首选。本文深入探讨了如何构建一个高效的微服务架构,涵盖了关键的设计原则、技术选型以及实践建议。通过分析微服务的独立性、分布式特性和容错机制,我们将揭示如何利用容器化、服务网格和API网关等技术手段,来优化后端系统的可维护性和性能。文章旨在为后端开发人员提供一套全面的指南,以应对不断变化的业务需求和技术挑战。