应用向国产架构体系化迁移的三大难点及解决方案

2023-11-11

‍‍

ae8590a01e9ecb8164ce5fccab6c13f6.png

转载本文需注明出处:微信公众号EAWorld,违者必究。

李航:国家信创战略背景下,信创产业从党政、金融等领域高速扩展到电信、制造、教育等更广阔的市场。

01

信创工作要解决应用向国产架构体系化迁移的三大难点,保障全面落地

伴随近年来信创实践的加速落地,以及信创需求的持续释放,信创产业正在逐渐形成“应用-反馈-迭代调优-再应用”的正向循环。从应用落地解析,可以发现,信创工作的重中之重,是从原有架构平滑地全面迁移到信创架构,并满足业务性能以及不断增长的需要,通过应用治理能力,无侵入式保障业务应用可靠运行。

在这个过程中,信创工作遇到的众多问题与挑战,可以归纳为应用向国产架构体系化迁移的三大难点。

难点一:应用是否能平滑迁移

比如,信创生态中存在多种多样的国产化环境,涉及不同架构的芯片,各个厂商的操作系统、数据库、中间件等。如何挑选最优的组合,以利于尽早确定信创技术栈,保证在原有原有架构上运行的众多业务应用,能够顺利迁移到信创架构,并在信创环境中平稳运行?

比如,怎样通过迁移工具降低迁移风险,保障按照替换时间表,在任务紧迫的压力下,快速有效地完成从硬件到软件层面的全栈替换,实现业务系统迁移后的良好运行,同时提升信创验收的顺畅度?

难点二:能否满足业务高并发性能的需要

比如,怎样进行支撑业务需求变化的各种逻辑处理,保障迁移到信创环境的应用能够满足高并发请求,以及后续业务连续增长对性能的要求,实现良好运行?

比如,大型企业的业务应用众多且存在交叉关联,那些原本支持几十万人同时在线处理的应用,迁移到信创环境后,是否还能支持到这种量级?

难点三:应用黑盒,是否能够进行有效治理

比如,业务系统治理需要用户全面掌控系统使用情况。那么,如何为治理需要而破解应用黑盒,利于企业直接对应用进行数据分析,细粒度的掌握系统运行情况,实现无侵入式的应用快速治理,确保业务应用可靠运行?

在护航不同客户信创落地的众多实践中,我们结合多项经验与客户行业实际,整理了体系化的应用迁移方案,帮助客户突破应用向国产架构体系化迁移的三大难点,助力企业快速完成信创实践。

74c1a3eec5fd47404bedd3a83a5939d6.png

实践中的具体内容,包括但不限于:

  • 怎么规划全栈体系与后续系统,制定迁移方案,实现数据梳理、硬件替换,达成平滑迁移;

  • 在系统改造上要做哪些设计,针对哪些方面进行重点测试,保障满足业务高并发性能的需要;

  • 哪些方面可能以前没考虑到,还要去联调、考察,突破应用黑盒实现应用治理,保证项目顺利实施;

  • 系统切换是直接由以前的体系切到信创体系,还是要保持双轨运行,通过灰度发布的方式从外围到核心慢慢地将流量切过来,护航平滑迁移与业务运行;

  • 通过应用迁移、自动化测试等系列保障工具,进行全生命周期管理、监控运维,帮助客户更好地从需求到设计、上线、运行,乃至更新迭代,结合客户实际情况解决三大难点,保障信创迁移,支持信创发展。

02

提供基于应用服务器PAS的体系化应用迁移方案,助力企业平滑迁移

普元应用服务器PAS是进入央采名单、金融行业等目录的重点产品,是覆盖信创关键领域提供的全栈式信创中间件产品之一。基于应用服务器PAS的体系化应用迁移方案,通过以下几大方面的价值实现,助力企业快速完成信创实践。

满足全生态与云原生适配,实现无缝迁移

政府和企业之前的应用服务器,上面已经有了用了十几二十年的众多业务应用,每年会花大价钱,以及大量的人力物力去操作、部署与使用。这决定了信创迁移时,需要考量良好兼容与快速迁移。

普元应用服务器PAS拥有全生态适配的能力,能够与芯片、服务器、操作系统、数据库等主流厂商的产品全栈兼容,同时PAS提供的云原生适配能力,支持基于容器云、各种私有云或公有云的云原生环境,进行无缝对接和适配支撑。而且在系统集成过程中,普元应用服务器中间件作为承上启下的中间层,能够提供全方位的监控能力,快速识别不同生态间的耗时,甄别最优生态。

依托全面的适配与替换能力,普元应用服务器PAS在政府、金融等多领域的实践中,帮助客户无缝替换不符合信创要求的应用服务器,选择生态中的最优组合,并在极少量代码变更的前提下快速完成迁移工作。例如,某地级市信创应用迁移,涉及市、区数十个委办局业务,以及政务外网的逻辑隔离、政务内网的物理隔离环境,我们在项目实施中,通过短时间的基础验证和数据迁移后,已将原环境运行的50多个应用系统全部迁移到普元应用服务器产品上并投入生产运行。

支持微服务架构应用迁移改造

各行业中,金融行业数字化水平较高,数字化转型与信创实践均起步较早,使用的是比较新的应用架构,比如微服务架构,需要通过分布式技术进行应用开发等。因此,金融信创迁移实践中,需要基础软件匹配新技术变革带来的架构冲击,来进行迁移改造。与时俱进的普元应用服务器PAS,支持标准JakartaEE应用架构,也支持SpringBoot微服务架构、云端容器架构使用,能够支撑不同架构开发的应用或业务运行。

以微服务框架下的SpringBoot体系为例,微服务应用需要容器来支撑对外提供服务,但是SpringBoot内置的默认容器并不符合信创要求,需要把它替换成国产化的容器,进行迁移改造,实现项目验收达标与体系自主可控等。

应对这种情况,我们会给客户提供两种解决方案。一种是使用普应用服务器嵌入式版本,替换微服务Jar包中不符合信创要求的容器,另一种是将SpringBoot微服务应用通过技术方式导出WAR包,部署到普元应用服务器企业版,支撑运行。使用普元应用服务器嵌入式版本,是更便捷的迁移改造方式,在行业信创中经常被推荐使用。

创建开发平台建设应用的最佳迁移路径

普元应用开发平台EOS和业务流程平台BPS等明星产品,在市场上占有率很高。多个行业的头部客户,都使用了普元EOS开发业务应用,使用普元BPS实现了定制化的业务流程。针对这些客户,采用普元应用服务器PAS是创建开发平台建设应用的最佳迁移路径。

主要的优势在于以下三点。

(1)产品深度优化:普元EOS/BPS信创版与普元应用服务器,做了深度的产品适配与优化;

(2)系统平稳运行:基于EOS/BPS开发的业务应用可平稳运行在普元应用服务器之上,且有大量成功案例;

(3)应用无缝迁移:在非信创环境上运行的应用,可以平滑迁移到普元应用服务器提供的信创环境上来运行。

提供多种迁移工具助力信创应用快速迁移

普元应用服务器PAS携带多种应用迁移工具,包括源码兼容检查工具,资源冲突查找工具,配置快速迁移工具等,通过对应用系统源码,以及配置、依赖资源进行检查,读取原先环境中间件配置,助力应用信创迁移。

源码兼容检查工具:提供基于业务系统源码及配置文件的兼容验证工具,查找非信创中间件特有实现、接口及配置,方便用户修改迁移。

资源冲突查找工具:针对应用依赖的资源进行冲突检测,生成多种格式报告,排查冲突问题,减少业务部署、运行错误。

配置快速迁移工具:读取原先环境的开源或商业应用中间件配置,将JVM、数据源、连接池等配置同步,加速应用迁移上线。

03

应用服务器PAS保障业务性能,助力企业满足业务高并发需求

普元应用服务器PAS,一方面深入挖掘中间件产品性能,进行了大量性能优化工作,包括线程池调用优化、改进的支持分布式 Session 持久化、使用非阻塞IO、jsp 编译器优化等;另一方面也在积极适配国产生态,和国产硬件、软件厂商一起深入挖掘,增强业务系统性能。

性能明显优于开源、商业应用服务器产品

普元应用服务器PAS通过线程池调用优化、主机系统管理优化、jsp 编译器优化、提升资源查找效率等性能优化工作,实现了多个使用场景下,相比国外开源或商业应用产品性能提升10%~40%。

针对信创生态提供深入的性能优化与调优

我们技术平台与中间件产品专门针对国产信创环境进行了深度性能优化。在与华为鲲鹏实验室的深度合作中,普元应用服务器PAS性能针对鲲鹏体系进行的深度性能优化,实现了性能较主流方案提升25%以上。同时,我们全栈式信创中间件产品可以根据客户选择的其它信创环境,针对大并发的场景,进行有针对性的优化提升。

高效I/O确保复杂网络环境下性能和稳定性

普元应用服务器PAS通过非阻塞的使用IO(NIO),提供了与标准IO不同的IO工作方式,由以往阻塞读写(占用线程)变成了单线程轮询事件。通过线程的节约,普元应用服务器能够避免连接数大的时候因为线程切换带来的问题,进而提供了处理海量连接的能力,确保在复杂网络环境下,性能是可靠稳定的。

针对当下的多核处理器芯片,更是可以通过普元应用服务器提供的非阻塞NIO模式,充分利用多核心进行I/O运算,按照CPU数量✖核数处理,深度挖掘算力,确保海量链接情况下的性能达标。

高性能分布式架构满足业务高可靠要求

通过集群机制保持平台高可靠性的前提下,为了改善高并发请求环境中 Session 持久化造成的性能瓶颈,同时避免大集群情况下 Session 同步带来的网络风暴风险,普元应用服务器PAS引入了“分布式 Session 存储”的技术,使用Redis/Memcached持久化 Session 数据,大大提高了应用服务器在高并发、大集群情形下的性能表现。

04

信创应用治理解决方案助力企业破解应用黑盒,实现有效治理

基于应用服务器PAS的体系化应用迁移方案,还加强了应用治理解决方案的部分,通过以下几个方面助力企业破解应用黑盒,实现有效治理。

提供应用治理能力,破解应用黑盒问题

应用治理能够跟踪服务之间的调用流并提供清晰的视图来定位问题区域和潜在瓶颈,通过可视化的服务之间的相互联系来理解系统拓扑,提供整个中间件平台的应用行为监控,并且提供全景式的服务调用链路追溯能力,破解应用黑盒。

支持业务请求全链路分析,快速定位性能瓶颈点

在详细分析业务请求链路的基础上,实现全栈跟踪,从整体维度到局部维度跟踪各项指标,可度量应用系统整体和局部性能,并且可以快速定位故障产生的源头,生产上可极大缩短故障排除时间。同时针对信创环境中使用的国产数据库,也能进行监控,分析不同业务下数据库操作的成功率、效率、请求耗时等,支持应用全方位的有效治理。

完善便捷的监控工具,应用运行健康状况一目了然

我们针对传统应用治理难题,推出了自己的性能监控工具APM,能够无侵入性、细粒度对整个应用环境进行监控,从各个维度进行服务器监控、应用服务统计、性能刨析。比如,展示每个服务实例的吞吐量,每个服务实例的请求成功率等指标;展示当前实例的吞吐量、JVM各状态线程数、JVM内存占用大小等指标;展示当前应用端点的最慢请求时间、请求成功率、每分钟请求数等指标;展示当前端点每个时间段的请求数据、请求行响应时间、请求成功率等指标;单独端点进行采样分析,并可查看堆栈信息进行性能剖析等。

应用服务器快照能力,协助业务问题快速复原与定位

普元应用服务器提供快照能力,可以导出整个服务器数据、配置以及运行时的JVM信息,协助用户进行问题分析定位。

05

应用服务器PAS广泛应用于金融、政府、电信等各行业,树立典型案例

普元应用服务器PAS已广泛应用于金融、政府、电信、教育等各行业,基于不同客户的应用场景,帮助客户进行快速的应用部署与迁移,实现信创实践的平稳落地。

ce06337d6afa6001f463e4c1839fd32b.png

某省农信:

普元应用服务器支撑“移动办公系统” 的升级迁移

基于普元流程BPS+应用服务器支撑整个省的移动办公流程的运行,实现高性能支撑;整体采用微服务框架、前后端分离模式开发,系统支持主机及容器云部署方式;从底层技术平台,到上层软件应用的全栈式解决方案,满足人民银行金融信创生态实验室验收要求,以及客户方的业务性能与安全性等需求。

某直辖市大数据中心:

支撑100+业务可靠运行

某直辖市大数据中心为当地市政府区委提供标准的信创环境,采用普元应用服务器将业务部署在云环境中,支撑全市区委OA业务、办公应用运行。全栈信创环境,由普元应用服务器、arm架构的CPU、麒麟操作系统、达梦数据库等实现。目前,普元应用服务器实现迁移上线后,已经支撑100多个业务的可靠运行。

f9158cb5d7ef76765873a0989b202dd5.png关于作者:李航,普元信创军团资深顾问,13年从业经验,一直从事普元中间件产品线的研发工作,曾担任DevOps产品、微服务产品、应用服务器中间件产品项目经理,目前主要负责信创中间件领域的产品实施,研发工作。

关于EAWorld

使能数字转型,共创数智未来!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用向国产架构体系化迁移的三大难点及解决方案 的相关文章

  • 如何编写 Maven 构建脚本来执行 Java

    如何在构建过程中或构建刚刚完成后执行 Java 程序 可以直接从 pom 中执行此操作吗 mvn exec java Dexec mainClass org sonatype mavenbook weather Main EDIT 假设我想
  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • 在java代码中创建postgresql表

    我有一个与 postgreSQL 数据库连接的 java 代码 现在 我希望当它连接到数据库时 我还将创建数据库表 但我的问题是 它不会创建数据库 我不知道问题是什么 这是我的代码 Statement st null ResultSet r
  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 是否可以使用 Apache Tika 提取表信息?

    我正在寻找 pdf 和 MS Office 文档格式的解析器 以从文件中提取表格信息 当我看到 Apache Tika 时 正在考虑编写单独的实现 我能够从任何这些文件格式中提取全文 但我的要求是提取表格数据 我希望有 2 列采用键值格式
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • 始终将双精度舍入

    我怎么总是能把一个double to an int 并且永远不要将其四舍五入 我知道Math round double 但我希望它始终向上舍入 所以如果是的话3 2 四舍五入为 4 您可以使用Math ceil method 请参阅Java
  • Spring Security 角色层次结构不适用于 Thymeleaf sec:authorize

    我正在使用 Spring Security 3 2 5 RELEASE 和 ThymeLeaf 2 1 4 RELEASE 我已经在安全上下文中定义了角色层次结构 在我的视图层中我正在使用sec authorize属性来定义菜单项 我希望看
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • 在 Spring MVC 中将请求写入文件

    我希望能够将整个请求写入 Spring MVC 控制器中的文件 我已尝试以下操作 但即使我使用大量参数发出 POST 请求 文件也始终为空 RequestMapping method RequestMethod POST value pay
  • ebean 映射到 BYTEA 的数据类型是什么?

    我有一个游戏 2 0 2 需要在数据库中存储一些文件的应用程序 我们使用 Ebean 作为 ORM 我相信我的数据库中需要一个 BYTEA 列来存储该文件 但我不确定在我的模型中使用什么数据类型 我应该使用某种Blob 或者只是一个byte
  • 假布尔值=真?

    我在一本书中找到了这段代码 并在 Netbeans 中执行了它 boolean b false if b true System out println true else System out println false 我只是不明白为什
  • Axis2 的 wsdl2java 在 RPC/Encoded 样式 Web 服务上失败

    Axis2 有替代方案吗 或者让它工作的方式 例如不同的数据绑定 Retrieving document at Exception in thread main org apache axis2 wsdl codegen CodeGener
  • FetchType.LAZY 不适用于休眠中的 @ManyToOne 映射

    简而言之 我的 Child 类与 Parent 类之间存在多对一的关系 我想加载所有的孩子 而不必加载他们的父母详细信息 我的孩子班级是 Entity public class Child implements Serializable I

随机推荐