CN115033290A - 一种基于指令集的微服务拆分方法、装置及终端设备 - Google Patents
一种基于指令集的微服务拆分方法、装置及终端设备 Download PDFInfo
- Publication number
- CN115033290A CN115033290A CN202210529011.3A CN202210529011A CN115033290A CN 115033290 A CN115033290 A CN 115033290A CN 202210529011 A CN202210529011 A CN 202210529011A CN 115033290 A CN115033290 A CN 115033290A
- Authority
- CN
- China
- Prior art keywords
- instruction set
- service
- micro
- operating system
- splitting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 60
- 230000010354 integration Effects 0.000 claims abstract description 19
- 239000000178 monomer Substances 0.000 claims abstract description 8
- 238000012360 testing method Methods 0.000 claims description 34
- 230000008569 process Effects 0.000 claims description 21
- 238000003860 storage Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004891 communication Methods 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 claims description 3
- 230000002085 persistent effect Effects 0.000 claims description 3
- 238000013508 migration Methods 0.000 abstract description 10
- 230000005012 migration Effects 0.000 abstract description 10
- 230000009466 transformation Effects 0.000 abstract description 2
- 238000007726 management method Methods 0.000 description 36
- 230000006870 function Effects 0.000 description 11
- 230000008859 change Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000010606 normalization Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 239000002253 acid Substances 0.000 description 2
- 208000007502 anemia Diseases 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45554—Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明适用于软件工程技术领域,提供了一种基于指令集的微服务拆分方法、装置及终端设备,方法包括搭建自主可控云平台基座,自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;将第二操作系统重构为标准单体java工程;根据DDD模型理论,以及混合指令集异构虚拟化资源池中指令集的特性,对重构后的第二操作系统进行微服务拆分。本发明对微服务的拆分提供拆分依据,解决了第二操作系统的体系业务至第一操作系统的快速改造或迁移中,技术路线的选择问题。
Description
技术领域
本发明涉及软件工程技术领域,尤其涉及一种基于指令集的微服务拆分方法、装置及终端设备。
背景技术
在之前的信息技术环境中,我国IT底层标准、架构、产品、生态等都非常依赖非国产的IT产品,如底层CPU(Central Processing Unit,中央处理器)芯片,到操作系统、中间件、数据库、服务器软件、桌面应用软件等。而现在,信息技术应用创新产业被加速推进,建立自主可控的信息技术底层架构和标准,可以实现在芯片、传感器、基础软件、应用软件等领域的国产替代。因此,大数据应用、智慧城市、政务信息化等关键领域逐渐优先推广使用国产的自主可控、可信计算存储产品,如国产芯片、操作系统、数据库、服务器、存储等。
但是,目前已经建设的许多自主可控云平台,主要特点是按需自助申请,弹性自动交付,这需要将原有大量基于国外X86+Windows/Linux体系业务快速改造或迁移至基于国产LoongArch、Alpha、ARM、x86等架构的CPU芯片和以国产统信或麒麟为代表的操作系统的自主可控平台上。而不管是国产硬件还是软件,更新换代都很快,整体迁移难度大。
发明内容
本发明的主要目的在于提出一种基于指令集的微服务拆分方法,以解决现有的自主可控云平台数据迁移难度大的问题。
为实现上述目的,本发明实施例第一方面提供一种基于指令集的微服务拆分方法,包括:
搭建自主可控云平台基座,所述自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;
基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;
将第二操作系统重构为标准单体java工程;
根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分。
结合本发明第一方面,本发明第一实施方式中,基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具,包括:
在一台管理节点服务器上集中部署,或在不同的虚拟机上分别部署基础软件,所述基础软件包括项目管理工具、代码管理工具、持续集成工具、微服务容器环境、微服务治理环境和访问端入口所述管理节点服务器中的CPU指令集,以及所述虚拟机中的虚拟CPU指令集,为所述混合指令集异构虚拟化资源池中的指令集。
结合本发明第一方面,本发明第二实施方式中,根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分,包括:
整理重构后的第二操作系统的业务逻辑;
根据按照DDD理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,将所述业务逻辑划分成不同领域,并生成对应的jar包;其中,每个领域包括完整的业务逻辑,且领域之间不交叉;
将划分后的领域进行归类,获得多个待注册微服务;
基于每一个待注册微服务,新建一个Java工程并新启动一个进程。
结合本发明第一方面、第一实施方式、第二实施方式,本发明第三实施方式中,所述混合指令集异构虚拟化资源池中的指令集,分为复杂指令子集和精简指令子集;
所述精简指令子集与所述复杂指令子集的代表架构不同。
结合本发明第一方面第三实施方式,本发明第四实施方式中,根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分之后,包括:
对所述待注册微服务进行六项规范性检验;
所述六项规范性检验通过后,将检验后的待注册微服务注册到注册中心,获得开始提供服务的已注册微服务。
结合本发明第一方面第四实施方式,本发明第五实施方式中,将检验后的待注册微服务注册到注册中心,包括:
同时将所述Java工程和所述进程注册到注册中心。
结合本发明第一方面第四实施方式,本发明第六实施方式中,将检验后的待注册微服务注册到注册中心之后,还包括:
根据业务需求和特征,对每个已注册微服务部署负载均衡和容错策略,配置微服务编排策略,并设置服务通信机制。
本发明实施例第二方面提供一种基于指令集的微服务拆分装置,包括:
资源池汇集模块,用于搭建自主可控云平台基座,所述自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;
容器环境及工具构建模块,用于基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;
重构模块,用于将第二操作系统重构为标准单体java工程;
微服务拆分模块,用于根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分。
本发明实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在上述存储器中并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时实现如上第一方面所提供的方法的步骤。
本发明实施例的第四方面提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现如上第一方面所提供的方法的步骤。
本发明实施例提出一种基于指令集的微服务拆分方法,通过混合指令集异构虚拟化资源池中的指令集的特性,对微服务的拆分提供拆分依据,有助于提升领域进行归类时,微服务的拆分效果。而微服务的合理拆分,完成了第二操作系统的体系业务至第一操作系统的快速改造或迁移,从而有效解决了将大量基于国外X86+Windows/Linux体系业务快速改造或迁移至基于国产LoongArch、Alpha、ARM、x86等架构的CPU芯片和以国产统信或麒麟为代表的操作系统等自主可控平台时所遇到的技术路线选择问题,并且,能够有效应对上述迁移过程中上软硬件更新换代快所造成的迁移阻碍。
附图说明
图1为本发明实施例提供的基于指令集的微服务拆分方法的实现流程示意图;
图2为本发明实施例提供的自主可控云平台基座的基础设施即服务层的结构示意图;
图3为本发明实施例提供的基于指令集的微服务拆分装置的组成结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
在本文中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,"模块"与"部件"可以混合地使用。
如图1所示,本发明实施例提供一种基于指令集的微服务拆分方法,包括:
S101、搭建自主可控云平台基座,所述自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;
在上述步骤S101中,自主可控云平台基座主要包括全国产化基础设施即服务层,其中,基础设施即服务(Infrastructure as a Service,IaaS)的主流发展趋势是向软件定义数据中心(Software Defined Data Center,SDDC)演进。而软件定义数据中心就是虚拟化、软件化数据中心的一切资源,其通过在各种底层硬件架构上,如本发明实施例中的第一操作系统的底层硬件架构上,提取所有硬件资源并将其汇集成资源池。
在上述步骤S101中,第一操作系统为国产操作系统,如LoongArch、Alpha、ARM、x86等架构的CPU芯片和以国产统信或麒麟为代表的操作系统。
如图2所示,本发明实施例还示例性的示出了自主可控云平台基座的基础设施即服务层的结构,其主要由基础设施层、资源池层、云服务层和管理层组成,各功能如下:
1)基础设施层
基础设施层主要包括服务器、存储和各种网络交换设备。基础设施层的软硬件设施不仅支持第二操作系统(即国外
X86+Windows/Linux等操作系统和基于Intel、AMD等架构的CPU芯片)的软硬件资源池,还建设基于第一操作系统(即国产LoongArch、Alpha、ARM、x86等架构的CPU芯片和以国产统信或麒麟为代表的操作系统)的混合指令集异构虚拟化资源池,其中,混合指令集异构虚拟化资源池中的服务器都支持最新的硬件虚拟化并具备完善的带内、带外管理功能,从而最大限度提升下述步骤S102中,构建微服务容器环境和持续集成工具时,所使用的虚拟机及管理节点服务器的性能,并且提供自动化管理功能。
2)资源池层
资源池层用于接入计算(如虚拟机池、裸金属物理机池)、存储(如光纤通道存储区域网络FC-SAN的存储资源池、分布式存储资源池)、网络资源池等。各种资源池可以根据项目实际需求进行构建或裁剪。
3)云服务层
云服务层为云服务的管理及运营平台,主要包括服务自动化层、服务接入层及服务门户层。服务自动化层通过对资源池层基础设施即服务、灾备、大数据资源的封装,实现云资源微服务的发现、路由、编排、计量、接入等功能,显现从资源到服务的转换。服务接入层是云管理平台的对外呈现,分为用户门户及管理员门户。
4)管理层
管理层分为运营管理和运维管理两部分。其中,运营管理提供运营管理门户,运营管理门户除提供云服务申请和自助服务控制台外,支持包括动态控制系统管理、租户管理、服务目录、服务控制台、计量等运营管理功能。运维管理提供运维管理门户,支持对多数据中心的统一运维管理,包括资源管理、告警管理、拓扑管理、性能管理以及统计报表等。管理及公共能力层是信创云平台整体运维管理及公共组件的管理平台。
S102、基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;
在具体应用中,微服务通常使用容器作为基础设施,以实现快速部署,快速迭代,因此,本发明实施例中,在进行微服务拆分之前,先构建微服务容器环境,以及用于管理多个主机上的容器化应用的持续集成工具。
基于此,上述步骤S102的一种实现方式可以为:
S1021、在一台管理节点服务器上集中部署,或在不同的虚拟机上分别部署基础软件,所述基础软件包括项目管理工具、代码管理工具、持续集成工具、微服务容器环境、微服务治理环境和访问端入口。
所述管理节点服务器中的CPU指令集,以及所述虚拟机中的虚拟CPU指令集,为所述混合指令集异构虚拟化资源池中的指令集。
其中,项目管理工具具体为Jira,代码管理工具具体为GitLab,持续集成工具具体为jenkins,微服务容器环境具体为Kubernetes,微服务治理环境具体为SpringCloud,访问端入口具体为Nginx。
S103、将所述第二操作系统重构为标准单体java工程。
在上述步骤S103中,第二操作系统为非国产操作系统,与第一操作系统对应,第二操作系统即国外X86+Windows/Linux等操作系统和基于Intel、AMD等架构的CPU芯片。
本发明实施例还示出了上述步骤S103中,标准单体java工程的结构,其包括API(ApplicationProgramming Interface,应用程序编程接口)接口包、访问外部服务包、外部服务、服务与业务逻辑、数据库映射逻辑、访问数据库包和测试文件夹,各组成的功能如下:
1、API接口包:包括所有的接口定义,实现内部的调用,以及接口,当微服务拆分后,对于本地的接口调用,可以变为远程的接口调用。
2、访问外部服务包:如果这个进程要访问其他进程,对于外部访问的封装都在这里,对于单元测试来讲,对于这部分要做到不依赖第三方就能进行功能测试。
3、外部服务:对外提供服务的逻辑在这里,对于接口的提供方,要实现在这里。
4、服务与业务逻辑:这里实现主要的业务逻辑,拆分也是从这里拆分出来。
5、数据库映射逻辑:如果要访问数据库,在这里定义原子的数据结构
6、访问数据库包:访问数据库的逻辑全部在这个包里面
7、测试文件夹:每个类都应该有单元测试,要审核单元测试覆盖率,模块内部通过EasyMock工具实现集成测试。
在具体应用中,标准单体java工程是基于贫血模型的,其事务脚本的核心是过程,可以认为大部分的业务处理都是一条条的SQL,事务脚本把若干个SQL语句组织成为一段业务逻辑,在业务逻辑执行的时候,使用事务来保证逻辑的ACID,其中,ACID为数据库事务正确执行的四个基本要素,原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。这样做的优点是系统的层次结构清楚,各层之间单向依赖,因此,标准单体java工程的系统层次结构可以表述为:
Client->(BusinessFacade)->BusinessLogic业务逻辑->DAO/DTO。
在实际应用中,当一个工程的结构非常标准化之后,对下述步骤S104的微服务拆分来说,可以在原有的操作系统的服务与业务逻辑中,先独立出功能模块,规范输入输出,形成服务内部的分离。而在分离出新的进程之前,可以先分离出新的jar,只要能够分离出新的jar,基本也就实现了松耦合。
S104、根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分。
在具体应用中,微服务拆分后,将应用于上述步骤S101的自主可控云平台基座,完成将第二操作系统的体系业务至第一操作系统的快速改造或迁移。
在上述步骤S104中,DDD(Domain-Driven Design,领域驱动模型)模型理论为:在开发前,先进行大量的业务知识梳理。而在业务知识梳理的过程中,必然会形成某个领域知识,根据领域知识来进行一步步的服务拆分,就是领域驱动设计的基本概念。领域驱动设计的核心就在于建立正确的领域驱动模型。
在本发明实施例中,上述步骤S104的微服务拆分的详细实现方式为:
S1041、整理重构后的第二操作系统的业务逻辑;
S1042、根据按照DDD理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,将所述业务逻辑划分成不同领域,并生成对应的jar包;其中,每个领域包括完整的业务逻辑,且领域之间不交叉;
S1043、将划分后的领域进行归类,获得多个待注册微服务;
S1044、基于每一个待注册微服务,新建一个Java工程并新启动一个进程。
在一个实施例中,所述混合指令集异构虚拟化资源池中的指令集,分为复杂指令子集和精简指令子集;
所述精简指令子集与所述复杂指令子集的代表架构不同。
则,混合指令集异构虚拟化资源池中的指令集,可以管理节点服务器中的CPU指令集,以及虚拟机中的虚拟CPU指令集,且其可以按特性,分为复杂指令子集和精简指令子集。
其中,国内RISC指令集的代表架构是LoongArch(龙芯)、Alpha(申威)、ARM(飞腾、鲲鹏),而RISC指令集的代表架构是x86(海光、兆芯),其主要技术特点和应用场景如下:
1、LoongArch(龙芯)是从MIPS指令集发展起来的纯国产架构,也是高效精简指令集计算机体系结构中的一种,其最大的意义在于它是完全的自主设计,包含了基础指令337条、虚拟机扩展10条、二进制翻译扩展176条、128位向量扩展1024条、256位向量扩展1018条,共计2565条原生指令。与其他CPU架构相比,LoongArch的优势更在于工控与嵌入式领域,并且能够兼容MIPS、x86、ARM、RISC-V这几种指令集的Linux程序。
2、Alpha(申威)原本属于Alpha阵营,指令集也是基于Alpha进行扩展。Alpha(申威)的技术来源是于DEC的Alpha 21164,拥有自主扩展指令和发展路线的自主权。
3、ARM(飞腾、鲲鹏)的指令集架构的主要特点:一是体积小、低功耗、低成本、高性能;二是大量使用寄存器且大多数数据操作都在寄存器中完成,指令执行速度更快;三是寻址方式灵活简单,执行效率高;四是指令长度固定,可通过多流水线方式提高处理效率。因此,ARM指令集的CPU适合承载大量数据库访问的应用。
4、x86(海光、兆芯)的指令集架构是一种CISC架构,国产厂商海光和兆芯分别推出了基于x86架构的服务器和桌面终端。X86体系主要包括两大特点:一是使用微代码,指令集可以直接在CPU中的微代码单元里执行;二是拥有庞大的指令集,包括复杂运算、图像处理、寄存器到内存以及内存到寄存器等多种指令类型,为实现复杂操作,CPU除向程序员提供类似各种寄存器和机器指令功能外,还通过存于只读存储器(ROM)中的微程序来实现极强的功能,微处理器在分析完每一条指令之后执行一系列初级指令运算来完成所需的功能。
基于上述内容,示例性的,对微服进行拆分之后形成的领域归类为:ARM微服务、x86微服务、LoongArch微服务、Alpha微服务及其他。
本发明实施例通过混合指令集异构虚拟化资源池中的指令集的特性,即指令代表架构的不同,应用场景的不同,帮助业务逻辑的划分,使得领域边界更加清晰,对微服务的拆分提供拆分依据,有助于提升领域进行归类时,微服务的拆分效果。而微服务的合理拆分,为其后续平滑迁移到自主可控平台提供了便利,有效解决了将大量基于国外X86+Windows/Linux体系业务快速改造或迁移至基于国产LoongArch、Alpha、ARM、x86等架构的CPU芯片和以国产统信或麒麟为代表的操作系统的自主可控平台时所遇到的技术路线选择问题,并能够有效应对上述迁移过程中上软硬件更新换代快所造成的迁移阻碍。
在上述步骤S103和步骤S104中,重构出来的标准单体java工程基于贫血模型,系统层次结构清楚,各层之间单向依赖。本发明实施例中,对重构后的第二操作系统进行微服务拆分时,根据DDD模型理论,建立领域驱动模型,将标准单体Java工程的系统层次结构转化,具体地,在标准单体Java工程的业务逻辑基础上,将大多数业务逻辑和持久化放在领域层里面,而业务逻辑只是简单封装部分业务逻辑以及控制事务、权限等,则转化后的系统层次结构可以表述为:Client->(BusinessFacade)->BusinessLogic->Domain Object->DataAccess Object。
在具体应用中,微服务拆分之后,由于DDD理论的充血模型的难点,Java工程会数量较多,容易混乱,难以维护。因此,本发明实施例中,还对拆分好的待注册微服务进行规范性检验,如果检验不通过,则返回步骤S104重新进行拆分。则上述步骤S104之后,还包括:
对所述待注册微服务进行六项规范性检验;
所述六项规范性检验通过后,将检验后的待注册微服务注册到注册中心,获得开始提供服务的已注册微服务。
在本发明实施例中,六项规范性检验包括:拆分规范性检验、依赖规范性检验、访问规范性检验、原子规范性检验、接口规范性检验和名称规范性检验,上述六项规范性检验的检验原理及检验目的如下:
1、拆分规范性检验:
检验待注册微服务纵向拆分是否分为三层,并两次调用。
由于本发明实施例的服务拆分是为了横向扩展,因而业务逻辑只能做横向拆分,而非纵向拆成一串的。
例如一个电商系统的拆分,应该将商品和订单拆分,而非下单的十个步骤拆分,然后一个调用一个。则纵向的拆分不能涉及业务逻辑,只能完全按照DDD理论的充血模型,分三层进行拆分,分别为:基础设施层、缓存层和组合服务层;其中,基础设施层的接口用于屏蔽基础设施层的各个细节,包括数据库。缓存层用于提供原子的对象查询接口等,有了这一层,如果数据层做一定改变的时候,例如分库分表,数据库扩容,缓存替换等,对于上层透明,上层仅仅调用这一层的接口,不直接访问数据库和缓存;组合服务层:这一层对若干的领域模型进行封装与组合,完成较为复杂的业务逻辑并实现分布式事务,领域模型调用基础设施层接口,并且不能直接相互调用。表示层为对外服务接口层,调用组合服务层对外提供服务。
2、依赖规范性检验:
检验上述拆分规范性检验的两次调用是否为单向调用,严禁循环调用。
微服务拆分后,服务之间的依赖关系复杂,如果循环调用,升级顺序混乱,难以维护。因而上述拆分规范性检验的两次调用需为单向调用,详细地说,层次之间的调用必须设置以下规定:基础设施层的接口主要做数据库的操作和一些简单的业务逻辑,不允许调用其他任何服务;组合服务可以通过各领域模型的组合调用基础设施层接口,完成复杂的业务逻辑,也可以调用其他组合服务,但不允许循环调用,不允许调用表示层的服务;表示层,可以调用组合业务层服务,不允许被其他服务调用。
在一个实施例中,若出现循环调用,例如A调用B,B也调用A,则拆分成表示层和组合服务层两层,A调用B的下层,B调用A的下层。也可以使用消息队列,将同步调用,改为异步调用。
3、访问规范性检验:
检验多个待注册微服务构成组合服务时,是否将串行调用改为并行调用,或者异步化。
在具体应用中,多个微服务构成组合服务时,其处理流程较长,需要调用多个外部服务,因此,需考虑如何通过消息队列,实现异步化和解耦。解决方案即为将串行调用改为并行调用,或者异步化。
例如下单之后,要刷新缓存,要通知仓库等,这些都不需要再下单成功的时候就要做完,而是可以发一个消息给消息队列,异步通知其他服务。而且使用消息队列的好处是,你只要发送一个消息,无论下游依赖方有一个,还是有十个,都是一条消息搞定,只不过多几个下游监听消息即可。对于下单必须同时做完的,例如扣减库存和优惠券等,可以进行并行调用,这样处理时间会大大缩短,不是多次调用的时间之和,而是处理流程最长的系统的调用时间。
4、原子规范性检验:
检验待注册微服务接口是否实现幂等。
微服务拆分之后,当出现待注册微服务之间调用错误的时候,会重试,但是为了不要下两次单,支付两次,因此,需要所有的接口实现幂等。
其中,幂等一般需要设计一个幂等表来实现,幂等表中的主键或者唯一键可以是transaction id,或者business id,可以通过这个id的唯一性标识一个唯一的操作。也有幂等操作使用状态机,当一个调用到来的时候,往往触发一个状态的变化,当下次调用到来的时候,发现已经不是这个状态,就说明上次已经调用过了。状态的变化需要是一个原子操作,也即并发调用的时候,只有一次可以执行。可以使用分布式锁,或者乐观锁CAS(Compareand swap,比较与交换)操作实现。
5、接口规范性检验:
检验待注册微服务接口的接口数据定义是否有内嵌、透传,并严禁。
在具体应用中,微服务接口之间传递数据,往往通过数据结构,如果数据结构透传,从底层一直到上层使用同一个数据结构,或者上层的数据结构内嵌底层的数据结构,当数据结构中添加或者删除一个字段的时候,波及的面会非常大。因而接口数据定义,在每两个接口之间约定,严禁内嵌和透传,即便差不多,也重新定义,从而使得接口数据定义的改变,仅影响调用方和被调用方,当接口需要更新的时候,比较可控,也容易升级。
6、名称规范性检验:
检验待注册微服务是否具有规范化工程名。
在具体应用中,微服务拆分后,工程名数量较多,若要让开发人员看到一个工程名,或者jar的名称,就知晓其功能作用,则需要一个规范化的约定。
例如,包括pay就是支付,包括order就是下单,包括account就是用户。再如包括compose就是组合层,controller就是接口层,basic就是基础服务层。出现api就是接口定义,impl就是实现。pay-compose-api就是支付组合层接口定义。account-basic-impl就是用户基础服务层的实现。
在本发明实施例中,将划分后的领域进行归类,获得多个待注册微服务的同时,基于每一个待注册微服务,新建一个Java工程并新启动一个进程,基于此,将检验后的待注册微服务注册到注册中心的详细实现方式,包括:
同时将所述Java工程和所述进程注册到注册中心。
本发明实施例所述的注册中心,由kubernetes提供微服务的运行环境,springcloud负责各微服务之间的调用和治理。在一个实施例中,注册中心选用基于SpringCloudNetflix微服务架构中的Eureka模块,负责各微服务的注册与发现。例如库存服务、仓储服务、积分服务,这些微服务中都有一个Eureka Client组件,Eureka Client组件专门负责将这个服务的信息注册到Eureka Server中。而Eureka Server是一个注册中心,存放着一张注册表,保存了各服务所在的服务器IP地址和端口号。
其中,当检验后的待注册微服务注册到注册中心,已注册微服务开始提供服务,而本发明实施例还对已注册微服务的调用和治理,进行优化,以确保自主可控云平台的运行状态,其包括:
根据业务需求和特征,对每个已注册微服务部署负载均衡和容错策略,配置微服务编排策略,并设置服务通信机制。
在具体应用中,本发明中微服务的负载均衡选用基于Spring CloudNetflix微服务架构中的Ribbon模块。例如某个微服务是由基于ARM指令集服务器集群上的5个容器承载,当上层调用该服务时,Ribbon会在每次请求时选择一个容器,从而均匀的把请求分发到各个机器上。Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法,也可以由管理员自行设置。
此外,Ribbon是和Feign以及Eureka模块紧密协作合作完成工作的:首先Ribbon会从Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些服务器上,在监听哪些端口号。然后Ribbon就可以使用默认的Round Robin算法,从中选择一台机器。Feign就会针对这台机器,构造并发起请求。
需要说明的是,本发明实施例所示的对已注册微服务的调用和治理,为通过编写单元测试用例以及持续集成工具,实现的智能化的工作进程,不需要开发人员手动进行docker、nginx配置。并且,编排的微服务经过单元测试之后具有比较高的质量。其详细实现方式为:
为每个已注册微服务编写单元测试用例,并向持续集成工具提交代码,完成构建后监控生产环境运行状态。持续集成工具对代码进行编译,并做单元测试。编译测试成功后,自动进行微服务编排,并发布应用,部署到对应的容器中。其中,在docker和kubernetes实现的DevOps平台(容器持续集成平台),构建好镜像后,部署时,kubernetes负责调控资源,根据所编制的微服务编排策略将docker容器分配到不同指令集的节点服务器上,同时将容器的ip相关信息更新到nginx。
如图3所示,本发明实施例还提供一种基于指令集的微服务拆分装置50,包括:
资源池汇集模块31,用于搭建自主可控云平台基座,所述自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;
容器环境及工具构建模块32,用于基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;
重构模块33,用于将第二操作系统重构为标准单体java工程;
微服务拆分模块34,用于根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分。
在具体应用中,微服务拆分后,将应用于上述资源池汇集模块51所搭建的自主可控云平台基座,完成将第二操作系统的体系业务至第一操作系统的快速改造或迁移。
本发明实施例还提供一种终端设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上述实施例中所述的基于指令集的微服务拆分方法中的各个步骤。
本发明实施例还提供一种存储介质,所述存储介质为计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述实施例中所述的基于指令集的微服务拆分方法中的各个步骤。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于指令集的微服务拆分方法,其特征在于,包括:
搭建自主可控云平台基座,所述自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;
基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;
将第二操作系统重构为标准单体java工程;
根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分。
2.如权利要求1所述的基于指令集的微服务拆分方法,其特征在于,基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具,包括:
在一台管理节点服务器上集中部署,或在不同的虚拟机上分别部署基础软件,所述基础软件包括项目管理工具、代码管理工具、持续集成工具、微服务容器环境、微服务治理环境和访问端入口;
所述管理节点服务器中的CPU指令集,以及所述虚拟机中的虚拟CPU指令集,为所述混合指令集异构虚拟化资源池中的指令集。
3.如权利要求1所述的基于指令集的微服务拆分方法,其特征在于,根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分,包括:
整理重构后的第二操作系统的业务逻辑;
根据按照DDD理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,将所述业务逻辑划分成不同领域,并生成对应的jar包;
其中,每个领域包括完整的业务逻辑,且领域之间不交叉;
将划分后的领域进行归类,获得多个待注册微服务;
基于每一个待注册微服务,新建一个Java工程并新启动一个进程。
4.如权利要求1至3任一项所述的基于指令集的微服务拆分方法,其特征在于,所述混合指令集异构虚拟化资源池中的指令集,分为复杂指令子集和精简指令子集;
所述精简指令子集与所述复杂指令子集的代表架构不同。
5.如权利要求3所述的基于指令集的微服务拆分方法,其特征在于,根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分之后,包括:
对所述待注册微服务进行六项规范性检验;
所述六项规范性检验通过后,将检验后的待注册微服务注册到注册中心,获得开始提供服务的已注册微服务。
6.如权利要求5所述的基于指令集的微服务拆分方法,其特征在于,将检验后的待注册微服务注册到注册中心,包括:
同时将所述Java工程和所述进程注册到注册中心。
7.如权利要求5所述的基于指令集的微服务拆分方法,其特征在于,将检验后的待注册微服务注册到注册中心之后,还包括:
根据业务需求和特征,对每个已注册微服务部署负载均衡和容错策略,配置微服务编排策略,并设置服务通信机制。
8.一种基于指令集的微服务拆分装置,其特征在于,包括:
资源池汇集模块,用于搭建自主可控云平台基座,所述自主可控云平台基座用于提取第一操作系统的硬件资源,并汇集获得基于第一操作系统的混合指令集异构虚拟化资源池;
容器环境及工具构建模块,用于基于混合指令集异构虚拟化资源池中的指令集,构建微服务容器环境和持续集成工具;
重构模块,用于将第二操作系统重构为标准单体java工程;
微服务拆分模块,用于根据DDD模型理论,以及所述混合指令集异构虚拟化资源池中的指令集的特性,对重构后的第二操作系统进行微服务拆分。
9.一种终端设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1至7任一项所述的基于指令集的微服务拆分方法中的各个步骤。
10.一种存储介质,所述存储介质为计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1至7任一项所述的基于指令集的微服务拆分方法中的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210529011.3A CN115033290A (zh) | 2022-05-16 | 2022-05-16 | 一种基于指令集的微服务拆分方法、装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210529011.3A CN115033290A (zh) | 2022-05-16 | 2022-05-16 | 一种基于指令集的微服务拆分方法、装置及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115033290A true CN115033290A (zh) | 2022-09-09 |
Family
ID=83120934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210529011.3A Pending CN115033290A (zh) | 2022-05-16 | 2022-05-16 | 一种基于指令集的微服务拆分方法、装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115033290A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115657879A (zh) * | 2022-12-09 | 2023-01-31 | 北京小米移动软件有限公司 | 基于异构操作系统的输入控制方法、装置、设备及介质 |
-
2022
- 2022-05-16 CN CN202210529011.3A patent/CN115033290A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115657879A (zh) * | 2022-12-09 | 2023-01-31 | 北京小米移动软件有限公司 | 基于异构操作系统的输入控制方法、装置、设备及介质 |
CN115657879B (zh) * | 2022-12-09 | 2023-04-07 | 北京小米移动软件有限公司 | 基于异构操作系统的输入控制方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10664331B2 (en) | Generating an application programming interface | |
US9413604B2 (en) | Instance host configuration | |
CN108614726B (zh) | 虚拟机创建方法及装置 | |
US10338958B1 (en) | Stream adapter for batch-oriented processing frameworks | |
AU2014209611B2 (en) | Instance host configuration | |
CN112104723B (zh) | 一种多集群的数据处理系统及方法 | |
US8966025B2 (en) | Instance configuration on remote platforms | |
CN111108479A (zh) | 自主多租户数据库云服务框架 | |
CN108737168B (zh) | 一种基于容器的微服务架构应用自动构建方法 | |
US10728169B1 (en) | Instance upgrade migration | |
US20170364844A1 (en) | Automated-application-release-management subsystem that supports insertion of advice-based crosscutting functionality into pipelines | |
CN109783562B (zh) | 一种业务处理方法和装置 | |
US10503630B2 (en) | Method and system for test-execution optimization in an automated application-release-management system during source-code check-in | |
US20190036766A1 (en) | Methods and systems that synchronize configuration of a clustered application | |
CN112394947A (zh) | 一种基于微服务架构的信息系统 | |
CN112698921A (zh) | 一种逻辑代码运行方法、装置、计算机设备和存储介质 | |
US10534640B2 (en) | System and method for providing a native job control language execution engine in a rehosting platform | |
CN114816665B (zh) | 混合编排系统及超融合架构下虚拟机容器资源混合编排方法 | |
CN115033290A (zh) | 一种基于指令集的微服务拆分方法、装置及终端设备 | |
US20220035844A1 (en) | Centralized database system with geographically partitioned data | |
Cai et al. | SMSS: Stateful Model Serving in Metaverse With Serverless Computing and GPU Sharing | |
CN103067507A (zh) | 互联网云计算资源虚拟化封装系统及方法 | |
US11907176B2 (en) | Container-based virtualization for testing database system | |
US12086141B1 (en) | Coordination of services using PartiQL queries | |
Lavacca | Scheduling Jobs on Federation of Kubernetes Clusters |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |