极光笔记 | 极光服务的信创改造实践

2023-09-14 17:13:49

什么是信创?

信创全称为“信息技术应用创新”,主要包含应用于通信、云计算、大数据、人工智能、工业互联网等诸多高新产业的基础技术。基础技术则包含基础硬件、基础软件、应用软件、信息安全四大板块。其中:

基础硬件主要包括:芯片、服务器/PC、存储等;

基础软件包括:数据库、操作系统、中间件等;

应用软件包括:办公软件、ERP和其它软件等;

信息安全包括:硬件安全、软件安全、安全服务等各类产品。

信创的核心是通过国产和自主创新实现信息技术产业的“自主可控、安全可信、高效可用”。

为什么要做信创?

长期以来,欧美国际IT巨头利用技术优势占据了大量的市场份额,垄断了全球的信息基础设施,也几乎完全控制了IT底层技术的制定标准,把控了整个信息技术产业的核心生态。

我国自改革开放以来,在信息技术领域发展迅速,但在底层基础核心技术领域依然一直处于模仿和追随者的被动地位。

近些年,随着外部环境的逐渐恶劣,一系列的事件倒逼着我国信创产业向自主可控的方向发展。诸如:

2008年微软的黑屏事件

2010年伊朗震网病毒事件

2013年美国棱镜门事件

2018年美国中兴芯片断供事件

2019年华为芯片断供事件

2020年微软windows7停服事件

于是,2020年在国家政策的大力支持下,信创产业开始全面爆发和布局,成为信创元年。

至今,2023年,信创经过三年的大力发展和推广,覆盖的领域越来越广,信创产品和应用从最初的党政领域,向医疗、教育、交通、金融等行业全面推进。因此,极光的消息产品在服务这些行业时,也面临着信创的改造和升级。

极光服务的信创改造之路

近些年,极光服务积极拓展了金融,党政机关等多个行业的私有云客户。为了配合客户的信创需求,极光服务于2022年也开启了信创改造之路。极光服务信创改造主要涉及使用到的诸多中间件。

以下是极光服务重点对接适配的几个信创中间件:

1RocketMQ 替换为东方通 TongHtp2.0

在获得相关文档后,极光开发对东方通提供的十来个资料进行了查阅调研。

一开始,我们选择基于异步接口进行系统改造,一般来说,异步接口在每次请求后都会收到一个对应的回调,是适用于UMS 业务需要的,但在实际调试时,我们发现只有第一条才会有回调返回,这样的逻辑让UMS系统无法判断消息是否已发送。而东方通表示该异步接口的设计现状就是如此,不得已,我们只好对同步接口进行封装后再集成到UMS 中使用,浪费了一些时间。

在对「文件上传功能」进行适配时,发现TongHtp2.0 出现字符流数据读取乱码的问题,分析发现是因为TongHtp2.0 不支持gzip格式。在这个情况下,我们需要对业务涉及字符流的地方进行特殊编码处理才能完成兼容适配,最后通过修改成十六进制的编码解决了这个问题。

由于 TongHtp2.0 依赖.so动态库,无法在本地的开发环境进行调试,必须在部署脚本中指定依赖的动态库,然后打包放到服务器上,通过打日志的方式来进行调试。因为调试方式复杂使得适配工期拉长。

经过反复的调试、沟通讨论,最终我们在8 月末顺利完成东方通TongHtp2.0 的开发、自测。

2Redis 替换为东方通 TongRDS2.2.1.2

9 月,我们在测试环境中安装了TongRDS ,编写了一个测试Client 与测试Server 测试其对Redis 协议的兼容性,其中Client 用于实现数据的写,Server用于实现数据的查询,我们测试验证了string、list、set、hash、zset等几种常见的数据类型,同时验证了ttl 以及数据持久化。

在 Redis兼容性验证之后,由于东方通TongRDS 有原生的Go sdk,因此我们用TongRDS 替换Redis,部署在我们的UMS 测试环境中,验证UMS 的业务功能是否正常。

3Nginx 替换为东方通 TongHttpServer

9 月,我们在测试环境中安装了TonghttpServer,替换UMS 系统使用的Nginx 后验证 UMS Portal 基本功能,可以正常运行。

在验证高级功能时,因为在频率限制、黑白名单等功能中用到了Nginx Lua,所以需要验证TonghttpServer 对Nginx lua 的支持和兼容性。我们编写了Nginx lua 脚本,将其放到TonghttpServer 的对应目录并更新配置文件,重启后验证api limit 以及路由转发功能是否正常。

4MySQL 替换为 TiDB

经过调研发现,TiDB基本可以兼容 MySQL,因此我们直接利用TiDB 的数据迁移工具,将MySQL数据库的存量数据迁移到TiDB,进行基本功能验证即可。

5、 宝兰德的适配

为了以最快的速度完成信创的兼容,确保上线时间,我们在宝兰德和东方通的调研、适配上安排了多个开发同步进行,当遇到阻碍时及时商讨方案,调整选型和人力配置,最后按时完成了开发提测。以下是我们在宝兰德适配上遇到的问题和经验分享:

从宝兰德厂商获得BESMQ、BCS(对应Redis)以及 Web服务器 bws3.1 的测试Licence,将UMS系统使用的 RocketMQ、Redis以及 Nginx等中间件替换为对应的宝蓝德组件,开始进行兼容适配工作。

在验证 BCS(对应Redis)时,因为宝兰德不支持原生的Go 客户端,所以极光必须自行开发一个中间服务做Redis 协议转发,通过把Go 的协议转发给Java 的 SDK来实现。我们先调用 Java SDK 客户端对 Redis的几种数据类型(string、set、hash、list、zset)做了兼容性验证,发现数据读写都是正常的。

另外,也写了一个简单的协议转发服务proxysrv,用于将umsserver 对 Redis的操作转发给 BCS的原生SDK,在对基本场景验证后确认方案可行,但是由于协议转发存在性能损耗,同时由于proxy 与 ums server 之间是一个长连接,涉及连接保活的机制,要完美实现可能会有点复杂,因此决定放弃适配宝兰德,选用东方通RDS。

在验证 BESMQ时,同样遇到了没有 Go SDK的问题,我们自研开发了一个代理服务用于协议转发,但在自测过程中遇到了连接无法保活的问题,如果要保活则需要实现心跳机制,心跳机制相对比较复杂,因此决定放弃适配,选用东方通TongHtp。

因上述组件选用了东方通,而东方通的 TonghttpServer 已验证通过,因此未继续验证bws3.1 替代 Nginx。

信创改造实践总结

在经过一段时间繁琐的适配开发后,极光私有云服务已改造成能适配绝大部分需求,但对接的过程中也遇到了不少问题,诸如:

  • 各行业信创标准不统一,尤其同类型不同信创组件,对接接口不一致,适配工作量重复且繁琐

  • 国产信创组件搭建稳定的测试验证环境困难,很多时候只能在客户集成测试环境才能完成最终验证

  • 国产信创组件三方交付配合,尤其在问题定位时,沟通成本较高

展望未来,信创改造是一项长期需要投入的工作,为了提高后续的接入开发和交付效率。信创改造依然有许多值得优化的地方,目前总结有以下几点:

  • 开发过程中,对中间件的使用接口应抽象成泛型,并以插件的形式快速接入不同类型的信创组件

  • 交付过程中,对已能支持的组件,使用配置化的方式支持定制化切换

  • 提高不同信创组件的使用经验和运维能力,包括开发定制化的工具支持系统组件的可视化,故障监控告警,完善标准化文档等等。


关于极光

极光(Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的客户互动和营销科技服务商。成立之初,极光专注于为企业提供稳定高效的消息推送服务,凭借先发优势,已经成长为市场份额遥遥领先的移动消息推送服务商。随着企业对客户触达和营销增长需求的不断加强,极光前瞻性地推出了消息云和营销云等解决方案,帮助企业实现多渠道的客户触达和互动需求,以及人工智能和大数据驱动的营销科技应用,助力企业数字化转型。


 

更多推荐

【Python】Python 模式匹配与正则表达式

Python模式匹配与正则表达式1.模式匹配与正则表达式你可能熟悉文本查找,即按下Ctrl-F,输入你要查找的词。“正则表达式”更进一步,它们让你指定要查找的“模式”。你也许不知道一家公司的准确电话号码,但如果你住在美国或加拿大,你就知道它有3位数字,然后是一个短横线,然后是4位数字(有时候以3位区号开始)。因此作为一

Android SurfaceFlinger导读(02)MessageQueue

该系列文章总纲链接:AndroidGUI系统之SurfaceFlinger系列文章目录说明:关于导读:导读部分主要是方便初学者理解SurfaceFlinger代码中的机制,为后面分析代码打下一个更好的基础,这样就可以把更多的精力放在surfaceFlinger的业务逻辑分析上。关于代码分支:以下代码分析均在androi

单元测试框架-pytest

单元测试框架-pytest官网常用插件pytest-html:生成html报告pytest-xdist:实现并发测试pytest-ordering:实现测试用例顺序设置pytest-rerunfailures:测试用例失败重试allure-pytest:生成测试报告引入依赖在项目根目录下创建:requirements.

RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132733901红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

Docker和debezium是什么关系,如何部署?

目录一、什么是Docker二、什么是debezium一、什么是DockerDocker是一种开源的容器化平台,用于构建、部署和运行应用程序。它通过将应用程序及其依赖项打包到一个称为容器的独立单元中,使应用程序能够在不同的环境中以一致的方式运行。以下是Docker的一些核心概念和特性:容器:Docker使用容器来封装应用

RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133021990红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

AI实战营第二期 第六节 《MMDetection代码课》——笔记7

文章目录什么是MMDetection?环境检测和安装1数据集准备和可视化2自定义配置文件3训练前可视化验证4模型训练5模型测试和推理6可视化分析MMYOLO环境和依赖安装特征图可视化1.可视化backbone输出的3个通道2.可视化neck输出的3个通道Grad-BasedCAM可视化检测新趋势总结什么是MMDetec

开始在 Windows 上将 Python 用于脚本和自动化

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录设置开发环境安装Python安装VisualStudioCode安装MicrosoftPython扩展在VSCode中打开集成PowerShell终端安装Git(可选)用于显示文件系统目录结构的示例脚本用于修改

rust数组

一、定义数组(一)一维数组1.指定所有元素语法格式letvariable_name:[dataType;size]=[value1,value2,value3];例如letarr:[i32;4]=[10,20,30,40];2.指定初始值和长度所有元素具有相同的值语法格式letvariable_name:[dataTy

二叉树的遍历

Ⅰ、二叉树基本介绍1.1、二叉树的定义二叉树(binarytree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。1.2、特殊的二叉树1、满二叉树:如果一

【算法训练-二叉树 三】【最大深度与直径】求二叉树的最大深度、求二叉树的直径

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【求二叉树的直径】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为:目标公司+最近一年+出现频率排序,由高到低的去牛客TOP101去找,只有两个地方都出现过才做这道题(CodeTop本身汇聚了Le

热文推荐