CN111913713A - 一种基于服务调用追踪的异构服务集成方法 - Google Patents
一种基于服务调用追踪的异构服务集成方法 Download PDFInfo
- Publication number
- CN111913713A CN111913713A CN202010522724.8A CN202010522724A CN111913713A CN 111913713 A CN111913713 A CN 111913713A CN 202010522724 A CN202010522724 A CN 202010522724A CN 111913713 A CN111913713 A CN 111913713A
- Authority
- CN
- China
- Prior art keywords
- api
- service
- node
- information
- key
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于服务调用追踪的异构服务集成方法,其步骤包括:1)根据设定服务厂商的API的名称、版本和位置信息,收集各设定服务厂商的API语义信息;2)基于获取的API语义信息解析输入的DSL配置文件,得到泛化API与设定服务厂商API之间的映射规则;3)基于有序树构造算法对步骤2)处理后的DSL配置文件进行处理,得到基于有序树的API集成。本发明在异构环境中迁移时不需要重新编译,可以在运行时直接修改或按照策略更新,这种智能方法可以无缝对接新版本API,解决API同步问题,能够支持电子商务、互联网金融等实时性要求较高的场景。
Description
技术领域
本发明属于软件技术领域,具体涉及基于反射方法的异构服务API智能集成***。
背景技术
随着边缘计算、无服务计算等新型服务场景的出现,通过异构混合服务场景部署各类不同技术栈、不同业务功能的服务实例可以有效保障服务质量、提升开发效率以及提供细粒度运维监测数据。同时将多个业务部署在不同软件***上能够应对“单点失效”问题,同时可根据业务负载特点、厂商服务类型选择性价比最高的若干家服务厂商。当前市场的发展呈现出主流服务厂商引领、开源框架定制服务的两个特点。一方面,以Alibaba、Azure、AWS等为代表的一线服务厂商提出了HotSopt、LoadBalance、SDN等一系列成熟产品并具有大量的商用成功案例,其技术成熟度高,通用性好,但是定制化成本较高;另外一方面,以Kubernetes、OpenShift、Docker等为代表的开源社区主流框架经过商用集成改造后大量使用在企业私有服务环境,其可定制化程度高,由于社区支持其成本较低,能够针对数十台至数十万台集群按需定制需要的UI、部署模型、监控工具等。企业级混合软件***往往使用AWS等公有服务环境提供基础设施,定制Kubernetes等提供PaaS和SaaS等上层服务,在接入第三方服务厂商服务和定制开源框架,开发人员面临的核心问题是如何能够统一协调处理不同风格、不同层次和参数的各类软件***API,如何高效整合异构服务API、提升开发效率直接关系到服务提供商的核心竞争力,是控制成本、保持产品稳定性的关键。
然而,通过分析全球市场十几年来的发展趋势,软件***异构服务API集成问题仍然没有得到有效解决。首先,由于国内外技术发展水平、开发习惯和产业发展特点的差异,各个服务厂商对服务实例、服务控制器、私有网络隔离等业务组织层次有着不同的定义,导致其API的设计原则、参数命名、逻辑执行轨迹甚至文档质量等都有较大差异,难以自动化集成异构服务API;此外,由于上述新型服务场景的不断出现,其对软件***应用需要的各类存储网络基础设施、Devops流程和部署方式带来了持续需求,主流服务厂商的API一般一年需要更新40次以上,开源框架一年至少更新10个以上的小版本,API集成需要大量的人工同步工作,企业需要耗费大量的人力、物力成本去维护自身产品的稳定性。因此,如何能够智能化、自动化地去集成异构服务并提供统一泛化且功能覆盖全面的API成为当前服务计算研究的重点。虽然当前工业和学术领域的主流研究成果能够通过初级的半自动化API集成在一定程度上减少人工工作量,但是由于厂商封闭和API更新等原因,这些研究成果仍然难以大规模真实商业使用。服务异构API集成方法的研究进展和其局限性主要有以下几个方面。
(1)解决异构服务API的集成问题,其最直观的方案是通过制定统一的标准来统一各个厂商和开源框架的API,较为成熟和具有一定使用率的标准主要有三个。其中CAMP标准(CAMP:G.P.T.R.Jacques Durand,Adrian Otto,“Cloud Application Management forPlatforms Version 1.1,”2014,http://docs.oasis-open.org/camp/camp-spec/v1.1/camp-spec-v1.1.pdf)仅在国外Solum、Brooklyn等PaaS平台上小规模使用,CAMP的使用要求、适用环境等和国内差异较大,在国内难以大规模推广;TOSCA标准(TOSCA:T.Binz,U.Breitenbucher,O.Kopp,and F.Leymann,“TOSCA:¨portable automated deploymentand management of cloud applications,”in Advanced Web Services.Springer,2014,pp.527–549.)虽然其定义较为全面,且基于XML能够快速建模实现自动化服务部署,但其较为复杂,可操作性差,主流软件***都难以支持此标准;OCCI标准(OCCI:A.P.T.M.RalfNyren,Andy Edmonds,“Open Cloud Computing Interface-Core,”2011)通过基于Restful的远程管理API来代理各类服务实现自动部署、弹性伸缩和监测等功能,其架构较为合理,但粒度较粗,为了支撑新的第三方服务需要大量繁琐、低质量的开发工作。因此,通过指定统一服务厂商服务API标准的方式在市场现阶段难以有效推进,由于厂商版权、市场份额竞争和技术门槛等原因,统一API标准只能在小型和特定场景中使用,其价值有限。
(2)服务集成研究项目一般通过语义注解来***管理异构软件***。PaaSPort项目(N.Bassiliades,M.Symeonidis,G.Meditskos,E.Kontopoulos,P.Gouvas,andI.Vlahavas,“A semantic recommendation algorithm for the PaaSport platform-as-a-service marketplace,”Expert Systems with Applications,vol.67,pp.203–227,2017.)提供语义cloud-broker来部署、管理和迁移各类服务,它需要PaaS API通过OWL拓扑结构进行语义注解,其构造的API同样遵循CAMP和Cloud4SOA标准;MDE框架(F.Gonidis,I.Paraskakis,and A.J.Simons,“Leveraging platform basic services in cloudapplication platforms for the development of cloud applications,”in 2014 IEEE6th International Conference on Cloud Computing Technology and Science(CloudCom).IEEE,2014,pp.751–754.)可以屏蔽异构服务的多样性,基于语义拓扑和元数据模型提供泛化API,能够处理异构API的共同属性,难以处理独特属性。这些研究项目往往基于受限的语言表达模型,其语义输入需要大量的人工标注和修正校验,不支持一些主流厂商的定制功能,不能应对国内企业复杂多变的需求。
(3)近年来发展较为迅速的解决是对外提供统一的泛化API,在后台构造不同厂商的集成器达到异构服务统一管理的目的。策略驱动中间件PaaSHopper(S.Walraven,D.VanLanduyt,A.Rafique,B.Lagaisse,and W.Joosen,“PaaSHopper:Policy-drivenmiddleware for multiPaaS environments,”Journal of Internet Services andApplications,vol.6,no.1,p.1,2015.)针对服务在开发和部署阶段的问题,用API抽象层来集成异构服务,用策略驱动层来管理服务的部署运维,其技术较为成熟,但是存在非开源、手工化集成等问题;STAGER框架(Khattab,Sherif,Fatma A.Omara,and HishamHassan."STAGER:Semantic-based Framework for Generating Adapters of Service-based Generic-API for Portable Cloud Applications."IEEE Transactions onServices Computing(2018).)则是近年来最早提出使用半自动化代码生成技术构造泛化API的典型代表,通过定义软件***提供者、厂商API注入器、泛化API设计者和服务开发者四类角色来明确自动化生成和人工工作的边界,能够较好应对API更新,在一定程度上较少人工工作,仅在GCE和Azure上进行了初步时间,其模型集成性和代码生成开销扔需要继续测试验证。
异构服务API集成通过统一行业标准、第三方人工集成项目和泛化API等方法解决,由于技术水平和推广程度的差异,其发展情况不一致,没有主导性的解决方案,一个较为成熟的产品或框架需要能够以低成本较好应对上述三方面存在的问题。首先,集成方法能够符合市场需求,具有可推广性,不能违背现有服务的发展趋势和产业格局;然后集成方法必须保持足够的可用性,能够兼容主流服务厂商的核心功能,可快速扩展接入各类异构服务;最后面向实际发人员,其培训周期、开发流程、使用方法要简单可控,在成本和性能开销可控的情况下集成不同行业、不同技术栈等的多源异构环境。因此,需要智能的软件***异构服务API集成方法来准确定义软件和人工的边界与协同工作流程,最大限度减少人工工作,且能根据集成场景和API的变化自动调整相关参数和服务管理策略。
发明内容
为了解决集成时标准难以统一、集成模型难以覆盖主流服务厂商功能、手工集成工作量大准确性不足、集成代码不能随API变化自动更新等问题,本发明的目的在于提供一种基于服务调用追踪的异构服务集成方法。
本发明的技术原理:本发明结合高级编程语言的反射特性和面向切面编程技术实现高效集成,追踪服务调用的过程。
本发明技术解决方案具体包括以下步骤:
(1)服务调用反射分析:其功能是收集主流服务厂商的API服务调用的语义信息,其目的在于克服一般人工标注和手动收集文档的不全面、不准确的问题,分析的可用性在于主流服务厂商均采用统一的开发和组织规范来生产供第三方开发的API服务调用。第三方开发人员输入服务厂商API服务调用的名称、版本、位置等基础信息以及若干启发式搜索规则,服务调用反射分析根据规则和基础信息从服务调用中反向查找所有的API及参数信息,并导出格式化文档,输出文档作为开发人员编写基于领域特定语言(DSL)的配置文件参考,提供相较于官方文档更为安全和准确的服务调用数据,其过程如下:
1)服务描述及校验,面向本发明之后不断新增的各类API,从开发人员的输入数据中得到特定服务厂商服务调用的API资源描述符向量RIV={metadatav,uris,addisets}其中:metadatav代表需要分析的服务厂商的服务调用API的标准SDK描述信息;uris代表服务调用资源获取的协议和位置信息,默认直接通过类加载尝试获取;addisets可选,用于填充符合JDBC或OWL规范的身份认证等信息;然后基于JSR 303规范,通过正则匹配和注解机制,完成RIV信息的静态校验;
2)如果静态校验通过,就根据服务厂商的RIV信息,输入服务集成的若干启发式规则HR,这些规则由第三方开发人员按需导入,其格式的形式化定义如下:
HR={HR1,HR2,...,HRm}
式中,HRi代表面向资源i中同一类API的具体的启发式规则,所有规则构成服务厂商的服务调用API预期分析的集合HR,HR中包含m个元素,分别通过下标1至m进行标示,每个规则按照不同类型的资源类型下标i进行区分,由一个独立的偏序关系→进行刻画:首先通过搜索SDK中每类API的匹配前缀prefixi、标示接口int erfacei、URL名称identifieri确定SDK的反射搜索入口;接着,通过执行指针的增量操作Δ不断增加一类API的反射索引,将新索引pointern添加到指针集合D中,其中n表示当前指针代表类的属性propertyj与方法methodj个数,所有的n构成完备的n∈D,其中j代表类中的属性及方法编号,每次增量都会触发反射创建新的实例,其中+表示属性和方法的并集操作,×表示启发规则每次增量操作的操作对象,即属性和方法的局部集合;
3)所有启发式规则装载完毕后,从服务调用远程方法调用client端的入口基础类开始反射实例化,执行整个分析过程APR:
分析过程依次遍历所有的资源类型i,针对每一类资源类型,首先使用2)中装载的启发式规则HRi对资源类型i对应的一类API进行反射分析链(深层嵌套的复杂对象设置顺序)的初始化,在遇到嵌套对象(https://www.tutorialspoint.com/java/java_innerclasses.htm)或复杂类型(除java基本数据类型https://www.w3schools.com/java/java_data_types.asp之外的类型)时执行增量操作;增量操作作为递归运算,只有其当所有子资源(嵌套对象和复杂类型)遍历完成后才会继续分析下一种资源类型i+1,当所有i≤m种资源的反射分析链都正常终止时,返回当前资源的根指针;如果出现异常,则返回异常终止位置,异常提示信息中的子属性位置、分析进度等信息统一由errhandlerij记录,exporterij存放目前资源、属性的离散关系和具体类型并最终以文档形态导出分析结果。步骤3)将启发式规则、异常处理和结果输出三个核心功能剥离,可随时调整目标服务调用,更改规则,能够及时追踪异常位置并验证分析结果,同时分析结果还可以与官方文档对比,校验官方文档完整性和服务调用编码规范,分析结果能够表达一类资源所有API的内部属性和方法,即作为服务集成语义信息,为后续二次研发人员的解析调用等操作提供支撑。
(2)服务追踪描述语言解析:按照(1)中获取的语义信息,面向二次研发人员输入的DSL配置文件,使用java Properties操作接口,解析DSL配置文件中的属性及方法映射规则,实现泛化API到厂商特定API的转化,可以在服务集成软件首次启动时按照java环境变量配置解析所有的DSL文件,或者按需在运行时更新DSL及相关缓存。DSL解析结果以KV键值对的形式在缓存中存放,作为API集成(即步骤(3))的输入数据。服务追踪描述语言的解析调用如下:
1)基本语法校验:服务集成映射描述语言完成泛化API方法、属性名称(企业内部研发规范中得到及扩展)到实际服务调用服务、属性名(步骤(1)中得到)的映射,这种DSL采用基础的“prefix-key=value”形式书写,其中prefix-key的取值为泛化API的方法或属性,由第三方开发人员结合企业实际情况设置;value代表其prefix-key所映射的厂商特定SDK服务参数的类名称或反射分析链;
2)DSL信息提取解析:根据1)中等号左侧的字符取值进行解析,有以下几种情况:以“key”字面值为结尾的部分,有且仅有两个映射关系,分别表达泛化API和厂商服务调用API的保留关键字,是DSL开始两行的内容;以普通小写字符串标记的部分,注明泛化API最外层参数对应服务调用的类型名称或者反射分析链;以“-”开头的部分为内层参数,如内层有多个则通过多个-分割;以$开头的部分为自定义变量,用于开发人员扩展映射规则时的保留配置,按照上述规则解析所有DSL配置文件,得到泛化API和厂商特定API之间的映射规则。
3)导出缓存:上述映射关系直接表达服务厂商一类或多类资源与泛化API的映射层次,在服务集成方法运行时通过全局变量缓存所有DSL的解析结果,需要时可以通过下标、key值等直接访问,同时使用java字节码技术进行版本的热升级和更新。
(3)基于有序树的API集成:使用启发式规则优化的有序树(Heuristic Order-based Tree)算法进行不同厂商API的统一集成。API集成使用有序树构造算法,将平台无关的参数转化为特定厂商服务调用需要的格式(JSON或XML),并最终转发步骤(4)。构造有序树对泛化API参数依次进行处理,使用参数重新命名、数组及字符串分割、对象嵌套赋值、集合构造等缺省操作和开发人员自定义的参数映射方法,支持多源异构服务API简单数据类型和复杂数据对象的接口集成,可以避免API版本更新导致的维护问题。面向任何厂商的每次API调用,其基于有序树算法实现集成的步骤如下:
1)初始化有序树的头结点treekey,以及头结点的两个固定后继节点nodetarget和nodemain,其中nodetarget记录厂商特定服务的认证信息和URL地址,nodemain记录集成后服务调用相关的请求参数;
2)开始依次遍历泛化API中的每个参数nodep,参数符合Json格式,可以实现和java原生数据格式的映射(基本数据类型、对象和数组),每个参数nodep的命名与DSL中的prefix-key对应,可以根据其命名在DSL中找到厂商特定的分析链(即DSL中对应的value值)。针对每个参数按照以下顺序执行步骤3)~5),当参数遍历完毕且没有异常时,执行过程7),即一次集成结束;
3)如果当前参数nodep按照DSL中的配置信息,能通过反射找到了对应key值的开发人员自定义方法,则集成算法将该参数传递给该自定义方法,基于方法名称和参数找到该方法,然后使用Java invoke接口实现对该方法的反射调用,方法的返回值约定为nodep本身的引用(否则会出现异常),nodemain会在自定义方法执行完毕后新增nodep作为有序树子节点(自定义方法需要保障nodep前驱、后继的正确性,否则也会出现异常),如果此过程没有异常,则日志记录,返回新增的nodep,并返回过程2)遍历下一个参数,否则执行异常处理过程6);
4)如果当前参数nodep没有找到自定义方法且参数是一个数组,说明该参数是有序树的中间节点,先反射实例化nodep并记录为当前父亲节点nodecurrent;然后继续按照顺序遍历该数组中的每个元素,每个元素的特征及对应处理逻辑同样由集成步骤2)递归处理(https://baike.***.com/item/%E9%80%92%E5%BD%92%E5%87%BD%E6%95%B0/5634537?fr=aladdin),即当元素是基本数据类型、对象和数组时,对该元素执行步骤3)-5),如果递归处理没有异常,将步骤步骤3)-5)中返回的nodep作为nodecurrent的子节点,并返回nodecurrent作为新的nodep;
5)如果当前参数nodep没有找到自定义方法且参数是一个简单数据类型或者对象(HashMap)时,说明该参数是有序树的叶子节点,直接将nodep添加为nodemain的直接后继节点,记录日志返回nodep,并再次回到步骤2)遍历下一个参数;如果缓存中没有对应数据,执行异常处理过程6);
6)记录异常产生位置,输出当前nodemain、nodecurrent信息和显示集成完成比例,查询DSL缓存中的异常部分;
7)按照有序树的前序遍历算法(https://baike.***.com/item/%E5%89%8D%E5%BA%8F%E9%81%8D%E5%8E%86/757319?fr=aladdin)遍历有序树treekey(treekey已经通过步骤2)-6)完成了初始化),将有序树treekey以Json文本或其他格式导出,每个Json元素的key是厂商服务调用API相关的类型或设置方法(与DSL配置中的Value对应),value是真实业务请求参数(在步骤4中会更新)中的字符串、数值和集合。相较于STRGER等半自动框架生成的代码,其不需要在运行前预生成,且可以随服务调用的更新而自动调整,此基于Json的服务集成产物具有运行时动态更新和自动化同步的特点。
(4)用户特定的反射执行:当用户特定服务请求(包含特定执行规则,即treekey中nodetarget的描述信息,以及nodemain中的参数信息,是(3)中集成结果的子集)到来时,根据步骤(3)中泛化API和厂商特定API的集成结果,填充(3)最后获得到的JSON中的真实业务请求参数,然后基于反射驱动(Reflection-driven)引擎来智能化执行多个服务厂商和开源框架的API,从而完成一类厂商一类资源(都在treekey中nodetarget进行了描述)的API适配过程。其过程如下所示:
1)服务远程方法调用环境初始化:从Json数据中的nodetarget域读取上下文相关信息,根据URI和认证信息{URI,Certifications}获取服务远程方法调用远程操作入口,由于主流厂商的服务模式和认证机制相对完善且不容易变化,这部分代码通过人工集成完成,远程操作入口实例作为Json数据nodemain域中反射执行的起点;
2)反射语义执行:首先根据特定服务请求确认泛化API的操作对象和操作方法,然后通过深度优先遍历依次填充需要的参数:如果Json对象的key是类名,就在反射起点的基础上实例化新的对象;如果Json对象的key是以-开头的反射链,则执行key分割,按照先进先出的顺序依次实例化上层对象,并最后调用setter方法结束反射;
3)服务请求处理:根据2)中执行后的已经实例化过的操作对象和操作方法,基于restful方式,发起服务请求,本方法对提供商的请求结果(资源操作结果及基于HTTP协议的状态码)基于java多层try catch机制和注解技术进行二次封装,提升服务请求结果的可读性,满足国际化和客户定制等需求。
综上,本发明基于异构服务的服务调用及API,形成如图1所示的执行过程:首先分析特定厂商服务的资源种类、操作规范和API信息,定制启发式分析规则智能化导出各类异构服务的语义反射链,继而由开发人员根据泛化API格式,书写服务集成映射关系,通过有序树构造算法实现泛化API到服务调用API的参数转换,最后由反射执行器实际调用服务调用,封装异构服务的管理空间,通过日志监测智能方法的性能和开销,实现在多厂商、API自动同步情况下的软件***运维。
本发明与现有技术相比具有如下优点:
(1)不需要统一的API标准,开发人员可以自定义映射规则:相关开发人员可以继承符合本公司开发规范的API,不需要进行额外设计,只需要使用DSL描述与标准API的映射关系,从而提供与底层技术无关的应用层API,可以显著减低开发团队的培训成本和重复性工作;
(2)基于反射的API分析器与执行器充分利用高级语言的动态编程特性,除DSL外不需要生成代码,在异构环境中迁移时不需要重新编译,可以在运行时直接修改或按照策略更新,这种智能方法可以无缝对接新版本API,解决API同步问题;
(3)本方法兼顾功能性与扩展性的统一,在开发效率层面,不需要提供厂商API语义和集成器接口,通过包、类和方法的命名规则反射实现少数难以自动化的映射,通过大量缺省规则处理服务厂商绝大多数API特性;在运行效率层面,使用字节码缓存、内存高性能数据库和基于线程的P/S模型来约束DSL解析和反射驱动的开销,能够支持电子商务、互联网金融等实时性要求较高的场景;
(4)智能集成方法重新定义开发流程中角色和职责,将STRGER框架中的四个角色减少为服务提供商和开发人员两个,不需要特别设计泛化API和语义注解,从不同角度进行服务集成。
附图说明
图1为本方法的执行过程;
图2为本方法的典型部署环境。
具体实施方式
如图2所示的场景,服务调用分析器作为独立的工具部署在Machine1上,DSL解析器、API集成和反射执行器作为独立的第三方SDK包在第三方私有服务管理平台上使用,并以容器方式运行。所管理的资源有:
(1)已付费经过认证的阿里云账号,能够创建若干ECS实例,ECS实例之间通过专有网络连接;
(2)可以通过Ansible方式安装的Kubernetes与OpenShift;
(3)待部署的一套微服务应用,可以兼容kubernetes方式部署的image及相关配置参数。
通过在ECS上分别部署两套集群,验证本智能集成方法在ECS、Kubernetes和OpenShift集群上的集成能力,可以充分发挥本方法在不同层次上基于厂商服务调用的集成效果和性能开销。其中服务调用分析工具使用maven构建,其余组件使用spring boot方式构建,能够接受Json格式的参数,并通过AOP方式根据服务厂商种类切入,进行参数转换、反射执行和结果封装,混合服务管理平台通过注解方式使用本方法,最大限度避免侵入性;请求其实施方式如下所示:
(1)确认ECS、Kubernetes和OpenShift的配置版本及对应较为成熟稳定的服务调用开发包,书写服务调用分析器需要的基础参数,执行服务调用分析,导出服务调用相关API的语义文档;
(2)根据ECS和Kubernetes的分析文档制定书写DSL的表达规则,撰写DSL映射关系,生成ECS中createInstance,Kubernetes中createDeployment,OpenShift中createDeploymentConfig三个分别创建虚拟机实例和微服务实例的泛化API到厂商API的映射规则;
(3)发起7台创建ECS实例的请求,进行API映射和反射驱动,获取实际的执行调用关系,界面显示创建结果;并调用Ansible分别创建各个地区的Kubernetes与OpenShift集群,返回访问集群的API地址和认证token,混合服务管理平台能够按照区域筛选全部的基础设施;
(4)分别调用Kubernetes和Openshift的创建接口,在Kubernetes集群中部署微服务业务实例(github地址)并对外创建Ingress访问入口;在Openshift集群中部署需要的文件***、数据库和缓存等基础服务,并对外创建nginx负载均衡器,混合服务管理平台能够在同一UI下展示两个异构软件***之上的一个应用;
(5)创建相关的私有网络和负载均衡器,验证API集成对其他资源的集成效果,并在后台查询实际的隔离和访问情况。
提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。
Claims (8)
1.一种基于服务调用追踪的异构服务集成方法,其步骤包括:
1)根据设定服务厂商的API的名称、版本和位置信息,收集各设定服务厂商的API语义信息;
2)基于获取的API语义信息解析输入的DSL配置文件,得到泛化API与设定服务厂商API之间的映射规则;
3)基于有序树构造算法对步骤2)处理后的DSL配置文件进行处理,得到基于有序树的API集成。
2.如权利要求1所述的方法,其特征在于,收集各设定服务厂商的API语义信息的方法为:
11)生成每一设定服务厂商的API资源描述符向量RIV={metadatav,uris,addisets};其中metadatav代表设定服务厂商的服务调用API的标准SDK描述信息,uris代表服务调用API的资源获取协议和位置信息,addisets为可选项,用于填充符合JDBC或OWL规范的身份认证信息;然后对RIV信息进行静态校验;
12)静态校验通过后,根据设定服务厂商的RIV信息对每一资源类型设置一启发式规则;
13)依次遍历所有的资源类型,其中针对每一资源类型i,使用该资源类型i对应的启发式规则HRi对资源类型i中的API进行反射实例化,得到该资源类型i的API语义信息。
3.如权利要求2所述的方法,其特征在于,当资源类型i有子资源时,遍历完资源类型i的所有子资源后继续分析下一种资源类型i+1的API语义信息。
5.如权利要求2所述的方法,其特征在于,如果对资源类型i中的API进行反射实例化时出现异常,则返回异常终止位置,并记录异常提示信息中的子属性位置和分析进度信息。
6.如权利要求1所述的方法,其特征在于,步骤2)中,所述DSL配置文件包括多个“prefix-key=value”;其中prefix-key的取值为泛化API的方法或属性,由第三方开发人员结合企业实际情况设置;value代表prefix-key所映射的设定服务厂商SDK服务参数的类名称或反射分析链;得到泛化API与设定服务厂商API之间的映射规则的方法为:对“prefix-key=value”中等号左侧的字符取值进行解析,得到泛化API和设定服务厂商API的保留关键字;注明泛化API最外层参数对应服务调用的类型名称或者反射分析链;以“-”开头的部分为内层参数;以$开头的部分为自定义变量,用于开发人员扩展映射规则时的保留配置。
7.如权利要求1所述的方法,其特征在于,步骤3)中,得到基于有序树的API集成的方法为:
31)对于每一泛化API,初始化有序树的头结点treekey,以及头结点的两个固定后继节点nodetarget和nodemain,其中nodetarget记录设定服务厂商API的认证信息和URL地址,nodemain记录集成后服务调用相关的请求参数;
32)开始依次遍历泛化API中的每个参数nodep,针对每个参数nodep,执行步骤33)~35),当参数遍历完毕且没有异常时,执行过程37),即一次集成结束;
33)如果当前参数nodep按照DSL中的配置信息,能通过反射找到对应key值的自定义方法,则将该参数nodep传递给该自定义方法并对该自定义方法进行反射调用,如果方法的返回值是约定的参数nodep本身,则nodemain在自定义方法执行完毕后新增nodep作为有序树子节点;如果出现异常,则执行步骤36);
34)如果当前参数nodep没有找到自定义方法且参数nodep是一个数组,则先反射实例化nodep并记录为当前父亲节点nodecurrent;然后继续按照顺序遍历该数组中的每个元素,将元素作为参数nodep,根据元素是基本数据类型、对象或数组选择执行对应的步骤33)、34)或35),如果递归处理没有异常,则将返回的nodep作为nodecurrent的子节点,并返回nodecurrent作为新的nodep;
35)如果当前参数nodep没有找到自定义方法且参数是一个简单数据类型或者对象时,则直接将nodep添加为nodemain的直接后继节点,记录日志返回nodep;如果缓存中没有对应数据,执行异常处理过程36);
36)记录异常产生位置,输出当前nodemain、nodecurrent信息和显示集成完成比例,查询DSL缓存中的异常部分;
37)遍历当前生成的有序树treekey,将有序树treekey以Json文本导出,每个Json元素的key是设定服务厂商API的类型或设置方法,value是真实业务请求参数中的字符串、数值和集合。
8.一种基于权利要求1所述异构服务集成的服务调用执行方法,其步骤包括:
1)对于收到的异构软件***应用的服务请求,该服务请求包含nodetarget的描述信息以及nodemain中的参数信息,服务远程方法调用环境初始化:从Json数据中的nodetarget域读取上下文相关信息,根据URI和认证信息获取服务远程方法调用远程操作入口,将远程操作入口实例作为Json数据nodemain域中反射执行的起点;
2)反射语义执行:首先根据该服务请求确认泛化API的操作对象和操作方法,然后通过深度优先遍历依次填充需要的参数:如果Json对象的key是类名,则在反射起点的基础上实例化新的对象;如果Json对象的key是以-开头的反射链,则执行key分割,按照先进先出的顺序依次实例化上层对象,并最后调用setter方法结束反射;
3)服务请求处理:基于步骤2)中实例化的操作对象和操作方法,向对应的设定服务厂商发起服务请求,并返回该服务请求的处理结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010522724.8A CN111913713B (zh) | 2020-06-10 | 2020-06-10 | 一种基于服务调用追踪的异构服务集成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010522724.8A CN111913713B (zh) | 2020-06-10 | 2020-06-10 | 一种基于服务调用追踪的异构服务集成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111913713A true CN111913713A (zh) | 2020-11-10 |
CN111913713B CN111913713B (zh) | 2023-01-17 |
Family
ID=73237692
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010522724.8A Active CN111913713B (zh) | 2020-06-10 | 2020-06-10 | 一种基于服务调用追踪的异构服务集成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111913713B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112671882A (zh) * | 2020-12-18 | 2021-04-16 | 上海安畅网络科技股份有限公司 | 一种基于微服务的同城双活***和方法 |
CN114244836A (zh) * | 2021-12-17 | 2022-03-25 | 杭州视洞科技有限公司 | 一种混合云场景中服务器批量管理方法 |
CN114416202A (zh) * | 2022-01-17 | 2022-04-29 | 赞同科技股份有限公司 | 一种移动端sdk调用方法及*** |
CN114416599A (zh) * | 2022-03-28 | 2022-04-29 | 中建电子商务有限责任公司 | 一种基于Dubbo服务接口生成泛化调用进行接口测试的方法 |
CN117221374A (zh) * | 2023-09-11 | 2023-12-12 | 广州Tcl互联网小额贷款有限公司 | 一种基于api网关的api调用方法及*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1836208A (zh) * | 2003-10-23 | 2006-09-20 | 微软公司 | 计算机***和分布式应用程序的基于模型管理 |
US9667704B1 (en) * | 2014-04-26 | 2017-05-30 | Google Inc. | System and method for classifying API requests in API processing systems using a tree configuration |
CN109656544A (zh) * | 2018-12-26 | 2019-04-19 | 苏州博纳讯动软件有限公司 | 一种基于执行路径相似度的云服务api适配方法 |
CN110505187A (zh) * | 2018-05-18 | 2019-11-26 | 深信服科技股份有限公司 | 混合云中安全规则管理方法、***、服务器及存储介质 |
US20200004598A1 (en) * | 2017-06-05 | 2020-01-02 | Umajin Inc. | Server kit and methods therefor |
CN110908767A (zh) * | 2018-09-18 | 2020-03-24 | 亿阳信通股份有限公司 | 一种参数自动部署方法和装置 |
-
2020
- 2020-06-10 CN CN202010522724.8A patent/CN111913713B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1836208A (zh) * | 2003-10-23 | 2006-09-20 | 微软公司 | 计算机***和分布式应用程序的基于模型管理 |
US9667704B1 (en) * | 2014-04-26 | 2017-05-30 | Google Inc. | System and method for classifying API requests in API processing systems using a tree configuration |
US20200004598A1 (en) * | 2017-06-05 | 2020-01-02 | Umajin Inc. | Server kit and methods therefor |
CN110505187A (zh) * | 2018-05-18 | 2019-11-26 | 深信服科技股份有限公司 | 混合云中安全规则管理方法、***、服务器及存储介质 |
CN110908767A (zh) * | 2018-09-18 | 2020-03-24 | 亿阳信通股份有限公司 | 一种参数自动部署方法和装置 |
CN109656544A (zh) * | 2018-12-26 | 2019-04-19 | 苏州博纳讯动软件有限公司 | 一种基于执行路径相似度的云服务api适配方法 |
Non-Patent Citations (2)
Title |
---|
LEI HUA 等: "A framework to support multi-cloud collaboration", 《2020 IEEE WORLD CONGRESS ON SERVICES (SERVICES)》 * |
任凯 等: "混合型虚拟化资源管理***", 《计算机***应用》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112671882A (zh) * | 2020-12-18 | 2021-04-16 | 上海安畅网络科技股份有限公司 | 一种基于微服务的同城双活***和方法 |
CN112671882B (zh) * | 2020-12-18 | 2022-03-01 | 上海安畅网络科技股份有限公司 | 一种基于微服务的同城双活***和方法 |
CN114244836A (zh) * | 2021-12-17 | 2022-03-25 | 杭州视洞科技有限公司 | 一种混合云场景中服务器批量管理方法 |
CN114244836B (zh) * | 2021-12-17 | 2023-12-05 | 杭州视洞科技有限公司 | 一种混合云场景中服务器批量管理方法 |
CN114416202A (zh) * | 2022-01-17 | 2022-04-29 | 赞同科技股份有限公司 | 一种移动端sdk调用方法及*** |
CN114416202B (zh) * | 2022-01-17 | 2023-08-04 | 赞同科技股份有限公司 | 一种移动端sdk调用方法及*** |
CN114416599A (zh) * | 2022-03-28 | 2022-04-29 | 中建电子商务有限责任公司 | 一种基于Dubbo服务接口生成泛化调用进行接口测试的方法 |
CN117221374A (zh) * | 2023-09-11 | 2023-12-12 | 广州Tcl互联网小额贷款有限公司 | 一种基于api网关的api调用方法及*** |
CN117221374B (zh) * | 2023-09-11 | 2024-05-24 | 广州Tcl互联网小额贷款有限公司 | 一种基于api网关的api调用方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN111913713B (zh) | 2023-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111913713B (zh) | 一种基于服务调用追踪的异构服务集成方法 | |
US10162612B2 (en) | Method and apparatus for inventory analysis | |
Ren et al. | Migrating web applications from monolithic structure to microservices architecture | |
US7917889B2 (en) | Data locations template based application-data association and its use for policy based management | |
US9396037B2 (en) | Model-based data pipeline system optimization | |
US8515799B2 (en) | Constructing change plans from component interactions | |
US8712965B2 (en) | Dynamic report mapping apparatus to physical data source when creating report definitions for information technology service management reporting for peruse of report definition transparency and reuse | |
US8671222B2 (en) | Systems and methods for dynamically deploying an application transformation tool over a network | |
US9495371B2 (en) | Unified access to resources | |
CN109117164B (zh) | 基于关键元素差异性分析的微服务更新方法及*** | |
US9251222B2 (en) | Abstracted dynamic report definition generation for use within information technology infrastructure | |
AU2015221442A1 (en) | System architecture for cloud-platform infrastructure layouts | |
Rossini et al. | The cloud application modelling and execution language (CAMEL) | |
Reniers et al. | Object to NoSQL Database Mappers (ONDM): A systematic survey and comparison of frameworks | |
US8707260B2 (en) | Resolving interdependencies between heterogeneous artifacts in a software system | |
Challita et al. | Specifying semantic interoperability between heterogeneous cloud resources with the FCLOUDS formal language | |
CA2902128A1 (en) | System architecture for cloud-platform infrastructure layouts | |
CN113841135A (zh) | Dbms中的服务管理 | |
Bibartiu et al. | Clams: a cloud application modeling solution | |
US11714624B2 (en) | Managing and deploying applications in multi-cloud environment | |
WO2011041246A1 (en) | Systems and methods for analyzing and transforming an application from a source installation to a target installation | |
CN109299004B (zh) | 关键元素差异性分析方法及*** | |
Le Nhan | Model-Driven Software Engineering for Virtual Machine Images Provisioning in Cloud Computing | |
Canzoneri | Exploring extensibility of DevSecOps Modelling Language (DOML) | |
Wang et al. | A software-reuse method from model1 to SSH2 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |