CN106250199B - 一种多语言云编译的动态微服务调用方法及装置 - Google Patents

一种多语言云编译的动态微服务调用方法及装置 Download PDF

Info

Publication number
CN106250199B
CN106250199B CN201610597274.2A CN201610597274A CN106250199B CN 106250199 B CN106250199 B CN 106250199B CN 201610597274 A CN201610597274 A CN 201610597274A CN 106250199 B CN106250199 B CN 106250199B
Authority
CN
China
Prior art keywords
micro services
server
micro
scripted code
service
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.)
Active
Application number
CN201610597274.2A
Other languages
English (en)
Other versions
CN106250199A (zh
Inventor
闫观涛
刘生权
张庆化
熊品卿
徐东
王伊烟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Beson Cloud Ltd By Share Ltd
Original Assignee
Beijing Beson Cloud Ltd By Share Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Beson Cloud Ltd By Share Ltd filed Critical Beijing Beson Cloud Ltd By Share Ltd
Priority to CN201610597274.2A priority Critical patent/CN106250199B/zh
Publication of CN106250199A publication Critical patent/CN106250199A/zh
Application granted granted Critical
Publication of CN106250199B publication Critical patent/CN106250199B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供的多语言云编译的动态微服务调用方法及装置,预设服务器接收到调用第一微服务的调用请求后,在预设服务器中查找相应的第一微服务实例并运行,或者从微服务脚本仓库中查找相应的第一微服务对应的第一脚本代码,对该第一脚本代码进行编译形成第一微服务实例后运行,并将运行结果反馈至终端。解决了使得业务系统在进行升级或者出现故障的时候,服务器仍然可以执行预设的任务,以保证业务系统的正常运行的问题,并且有效提高系统功能扩展的灵活性、开放性、可维护性以及可伸缩性。

Description

一种多语言云编译的动态微服务调用方法及装置
技术领域
本发明属于计算机技术领域,具体涉及一种多语言云编译的动态微服务调用方法及装置。
背景技术
随着面向对象设计模式和企业架构模式出现,一个系统从功能实现、代码组织等角度来思考,通常分为三个层次:表示层、业务逻辑层、数据访问层,表示层是基于Html的Web页面,通过RestAPI取数据进行渲染;业务逻辑层是应用系统的核心代码,通常用来实现系统业务规则;数据访问层是访问数据库或信息的中间媒介;这是常见的经典三层架构模式,这种模式虽然在一定程度上解决了系统模块间调用复杂、职责不清的问题,但这种传统的架构风格在开发效率、构建部署、维护成本,以及可扩展性、可伸缩方面有很大不足和局限性。
这种架构方式的系统开发完成后是各个功能、模块相对固定的,提供的接口和实现都是约定好的,最终经过开发、编译、打包、部署,最后运行是放在一个进程中,它就像一块铁块,笨重且无法拆分,也无法扩展,后期系统中任何一点的变化都需要线下重新开发、编译,打包,部署,整个过程周期长、维护成本高。而随着业务系统的不断发展,需求的不断增加,系统的可扩展性、可维护性、可运维、可管理性却在不断下降。
综合现有技术中存在以下缺点:(1)扩展复杂:代码全部在一个项目系统中,这使得整个扩展过程非常复杂繁琐,并且有可能破还原有代码的结构;(2)代码重用率低:系统代码逻辑只是为了当前所开发并耦合到系统中,这降低了代码的重用率;。(3)开发周期长效率低:扩展或添加新的需求时,需要开发人员线下重新开发、编译、测试、上传、配置、打包、部署系统,这使得开发周期很长效率很低。(4)难以维护:系统开发人员和技术的应用有可能都已经迭代过无数次,系统中代码之间的互相调用、互相耦合也错综复杂,不是很了解系统的人不敢轻举妄动。随着系统的需求和功能越来越多,团队越来越大,相应的沟通成本、开发成本、管理成本都会成倍增加,当系统出现缺陷时,也会造成分析问题、定位问题、修复问题的时间更长;随着代码量的增加也有可能导致“修复越多,缺陷越多”的恶性循环;系统中一个小的改动就需要重新部署整个应用系统。(5)开发语言局限性:应用系统如果使用某种语言开发,那么再次需求扩展时则还必须已经此语言进行扩展,无法尝试新的编程语言或框架,这目前在现实中也不可能使用一个技术平台或方案来解决所有问题。(6)硬件成本高难以水平扩展:所有的程序代码在服务器的同一个进程中,会导致水平扩展难和成本高的局面,因为系统中不同的模块功能实际上对服务器的要求是不同的,有的是CPU密集计算机型,需要有性能较强的CPU处理器,有的是需要内存IO密集型,需要使用大量内存进行数据缓存,如果将系统所要求的服务器基础设施按同一种标准去采购,则硬件成本会非常高。(7)可靠性低:所有模块功能都运行在一个进程中,任何一个模块功能中的一个错误bug,比如内存泄露/CPU持续走高,将会有可能弄垮或拖慢整个进程,从而影响到整个应用的可靠性。(8)无法分布式部署支撑高并发:由于无法将外部依赖的Dll或Jar与现有系统程序进行物理机进行有效的分离,随着系统的不断升级和扩展,这样庞大且复杂的系统,要伸缩必须为整体式的伸缩,无法有效分离式伸缩,系统中用户所需要经常操作的核心业务点可能只有30%,而现在却要将非核心的70%做同样的部署伸缩,不能达到资源的最大化集约使用。(9)影响持续集成和交付:由于业务系统的庞大复杂,加上无数次的扩展升级,所以构建一次的时间也会非常漫长,失败的次数也会大大增加,如果构建过程错误,排查问题也会非常困难。另外对系统做的任何一点细微的修改都需要将整个系统重新构建、重新部署。多个开发人员共同开发一个系统,还需要等待其他开发人员完成后才能部署,这大大降低了团队的灵活性和功能交付频率;(10)另外在项目打开和运行十分缓慢、系统难以开发、测试、持续集成困难、部署环境依赖复杂、技术栈绑定,编程语言、框架、数据库的升级和更换非常困难等等。
如何应对这些问题,对软件系统的灵活性、开放性、可维护性、可伸缩性,以及软件系统对于市场和客户的反应能力都提出了更高的要求。如何快速地增加、扩展、升级当前标准的系统功能为客户量身定制,并且有效的保障提升软件开发质量和开发效率,已经成为软件行业的重要挑战。
现有的业务系统在调用过程中只能对整个业务系统进行调用,在业务系统进行升级或者出现故障(例如,业务系统崩溃或者CPU被占用的内存急剧飙升)的时候,在服务器中,该业务系统不能执行相应的功能,通过该业务系统完成的业务也无法正常运行。
发明内容
本发明所要解决的技术问题是如何使得业务系统在进行升级或者出现故障的时候,服务器仍然可以执行预设的任务,以保证业务系统的正常运行,并且有效提高系统功能扩展的灵活性、开放性、可维护性以及可伸缩性。
针对该问题,本发明提供了一种多语言云编译的动态微服务调用方法,包括:
A1:预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,运行所述第一微服务实例,并将运行结果反馈至终端;否则,执行步骤A2;
A2:从预设的微服务脚本仓库中读取所述第一脚本代码,将所述第一脚本代码载入脚本编译引擎,对所述第一脚本代码进行编译,生成新的微服务实例,以作为所述第一微服务实例后,运行所述第一微服务实例并将运行结果反馈至终端;
其中,所述微服务脚本仓库包括预先创建的所有微服务的脚本代码;所述微服务为一段脚本代码,对所述脚本代码进行编译形成能够实现预设功能的微服务实例。
优选地,所述步骤A1包括:
A11:预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,执行步骤A12,否则,执行步骤A2;
A12:根据所述第一微服务实例的标识在所述微服务脚本仓库中查找具有所述标识的第二微服务的第二脚本代码,判断所述第二脚本代码对应的哈希值是否与预设哈希值相同,若是,运行所述第一微服务实例,并将运行结果反馈至所述终端,否则,执行步骤A13;
A13:从所述微服务脚本仓库中读取所述第二脚本代码,将所述第二脚本代码载入脚本编译引擎,编译生成第二微服务实例,运行所述第二微服务实例,并将运行结果反馈至所述终端。
优选地,所述步骤A1之前还包括:
网关在接收到所述终端发送的调用所述第一微服务的调用请求后,在预先创建的微服务列表中查找与所述第一微服务对应的服务相关的服务器,根据预设规则从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器,并将所述第一微服务的调用请求发送至所述预设服务器;
其中,与所述第一微服务对应的服务相关的服务器,指的是服务器所执行的任务是与所述第一微服务对应的功能相关的;所述微服务列表包括所述微服务脚本仓库中所有的微服务的微服务信息,所述微服务信息至少包括:微服务的标识、微服务所在的服务器的标识、微服务所在的服务器当前的CPU使用率、微服务所在的服务器当前的内存使用率、微服务所在的服务器连接终端的连接数、微服务所在的服务器最快响应时间、微服务所在的服务器的配置对应的权重。
优选地,所述预设规则包括:采用随机法或者轮循法从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的最小连接数从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的CPU使用率或内存使用率从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器最快响应时间从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的配置对应的权重从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器。
优选地,还包括:
判断所述微服务实例运行的过程中是否出现异常,若是,将运行所述微服务实例的服务器根据所述异常判断的异常原因发送至网关,以使所述网关记录所述微服务实例的异常执行过程。
另一方面,本发明还提供了一种多语言云编译的动态微服务调用装置,包括:
判断模块,用于在预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,运行所述第一微服务实例,并将运行结果反馈至终端;
编译模块,判断所述预设服务器中是不存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,从预设的微服务脚本仓库中读取所述第一脚本代码,将所述第一脚本代码载入脚本编译引擎,对所述第一脚本代码进行编译,生成新的微服务实例,以作为所述第一微服务实例后,运行所述第一微服务实例并将运行结果反馈至终端;
其中,所述微服务脚本仓库包括预先创建的所有微服务的脚本代码;所述微服务为一段脚本代码,对所述脚本代码进行编译形成能够实现预设功能的微服务实例。
优选地,所述判断模块包括:
第一判断单元,用于在预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例;
第二判断单元,用于在判断所述预设服务器中存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例后,根据所述第一微服务实例的标识在所述微服务脚本仓库中查找具有所述标识的第二微服务的第二脚本代码,判断所述第二脚本代码对应的哈希值是否与预设哈希值相同,若是,运行所述第一微服务实例,并将运行结果反馈至所述终端;
编译单元,用于在判断所述第二脚本代码对应的哈希值是否与预设哈希值不相同后,从所述微服务脚本仓库中读取所述第二脚本代码,将所述第二脚本代码载入脚本编译引擎,编译生成第二微服务实例,运行所述第二微服务实例,并将运行结果反馈至所述终端。
优选地,还包括选择模块,所述选择模块用于网关在接收到所述终端发送的调用所述第一微服务的调用请求后,在预先创建的微服务列表中查找与所述第一微服务对应的服务相关的服务器,根据预设规则从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器,并将所述第一微服务的调用请求发送至所述预设服务器;
其中,与所述第一微服务对应的服务相关的服务器,指的是服务器所执行的任务是与所述第一微服务对应的功能相关的;所述微服务列表包括所述微服务脚本仓库中所有的微服务的微服务信息,所述微服务信息至少包括:微服务的标识、微服务所在的服务器的标识、微服务所在的服务器当前的CPU使用率、微服务所在的服务器当前的内存使用率、微服务所在的服务器连接终端的连接数、微服务所在的服务器最快响应时间、微服务所在的服务器的配置对应的权重。
优选地,所述预设规则包括:采用随机法或者轮循法从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的最小连接数从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的CPU使用率或内存使用率从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器最快响应时间从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的配置对应的权重从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器。
优选地,所述编译模块还用于判断所述微服务实例运行的过程中是否出现异常,若是,将运行所述微服务实例的服务器根据所述异常判断的异常原因发送至网关,以使所述网关记录所述微服务实例的异常执行过程。
本发明提供的多语言云编译的动态微服务调用方法及装置,预设服务器接收到调用第一微服务的调用请求后,在预设服务器中查找相应的第一微服务实例并运行,或者从微服务脚本仓库中查找相应的第一微服务对应的第一脚本代码,对该第一脚本代码进行编译形成第一微服务实例后运行,并将运行结果反馈至终端。由于调用的微服务是独立于整个业务系统的,能够实现预设功能的一个功能点,而不是整个业务系统,因此,业务系统在进行升级或者出现故障的时候,服务器仍然可以通过调用能够实现预设功能的可用的微服务实现相应的功能,而不需要调用整个业务系统。解决了使得业务系统在进行升级或者出现故障的时候,服务器仍然可以执行预设的任务,以保证业务系统的正常运行的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的多语言云编译的动态微服务调用方法流程示意图;
图2是本发明实施例提供的多语言云编译的动态微服务调用装置结构框图;
图3是本发明实施例提供的多语言动态微服务调用过程流程示意图;
图4是本发明实施例提供的多语言动态微服务编辑及调用过程的框架示意图;
图5是本发明实施例提供的多语言动态微服务编辑过程流程示意图;
图6是本发明实施例提供的多语言动态微服务在线开发的界面结构示意图;
图7是本发明实施例提供的多语言动态微服务的属性结构示意图;
图8是本发明实施例提供的多语言动态微服务的进程实例状态上报示意图;
图9是本发明实施例提供的多语言动态微服务的API网关处的微服务的属性示意图;
图10是本发明实施例提供的多语言动态微服务容器内存装置结构图;
图11是本发明实施例提供的多语言动态微服务扩容过程流程示意图;
图12是本发明实施例提供的多语言动态微服务部署/分布/伸缩的示意图;
图13是本发明实施例提供的多语言动态微服务容器管理模块装置示意图;
图14是本发明实施例提供的多语言动态微服务编译的模块示意图;
图15是本发明实施例提供的多语言动态微服务的微服务列表结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的语言云编译的动态微服务调用方法的流程示意图,参见图1,该方法包括:
A1:预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,运行所述第一微服务实例,并将运行结果反馈至终端;否则,执行步骤A2;
A2:从预设的微服务脚本仓库中读取所述第一脚本代码,将所述第一脚本代码载入脚本编译引擎,对所述第一脚本代码进行编译,生成新的微服务实例,以作为所述第一微服务实例后,运行所述第一微服务实例并将运行结果反馈至终端;
其中,所述微服务脚本仓库包括预先创建的所有微服务的脚本代码;所述微服务为一段脚本代码,对所述脚本代码进行编译形成能够实现预设功能的微服务实例。
可理解的是,调用请求也是一段代码,根据调用请求的代码解析出该调用请求对应的微服务,从而实现对相应的微服务的调用。微服务的脚本仓库中存储了开发人员根据实际业务的需求(例如,添加成绩、发送短信等)创建的微服务对应的脚本代码。
微服务实例是微服务的脚本代码实例化后的结果,存在于服务器中,服务器接收到调用请求后,若该服务器中存在该微服务实例,直接执行该微服务实例即可。若不存在需要从微服务脚本仓库中调用该微服务的脚本代码,将其载入脚本代码编译引擎,编译形成新的微服务实例,进而执行该微服务实例。
需要说明的是,微服务是能够实现预设功能的功能点,功能点(例如,学生管理系统中用来实现添加成绩这一功能的脚本代码)是实现业务系统(例如,学生管理系统)中的一个功能的功能模块。与现有技术不同的是,微服务的脚本代码编译后可以业务系统中的某一个功能,但其是一个独立的功能模块,其功能的实现不受整个业务系统的限制。基于这样的微服务,在实现业务系统中的某一个功能时,可以只通过该微服务来实现,而不依赖于整个业务系统。微服务的脚本代码存储于服务器中,一般来说,当存储该微服务脚本代码的服务器正常运行,且当前通过该服务器调用该微服务的终端数量在没有超过最大限制值,则该微服务对应的节点就是可用的,也就是说该微服务对应的服务是可用的。
举例来说,微服务是用于实现预设业务系统中的预设功能的脚本代码,例如,在学生管理系统这一业务系统中,微服务A用于实现学生成绩添加这一功能、微服务B用于实现学生个人信息添加这一功能、微服务C用于实现学生信息删除和更改这一功能……,所有的微服务均只能实现学生管理系统中的一个预设功能,整个学生管理系统按照一定的规则对这些微服务进行调用实现整个学生管理系统的功能。学生管理系统的各个微服务之间相互独立,当个别微服务出现故障或者需要进行升级时,不会造成整个学生管理系统不能调用。另一方面,在系统开发的过程中,各个微服务也可以采用不同的编程开发语言(例如,C#、VB.NET、JAVA、Python)进行编写。这种方式容易使不同的开发人员尝试技术创新,甚至每个功能扩展点都可以采用不同的编程语言编写,实现的功能组件的共用,提高了业务系统创建的效率。
本发明提供的多语言云编译的动态微服务调用方法,服务器接收到调用微服务的调用请求后,在服务器中查找相应的微服务实例并运行,或者查找相应的微服务对应的脚本代码,对该脚本代码进行编译形成微服务实例后运行,并将运行结果反馈至终端。由于调用的微服务是独立于整个业务系统的,能够实现预设功能的一个功能点,而不是整个业务系统,因此,业务系统在进行升级或者出现故障的时候,服务器仍然可以通过调用能够实现预设功能的微服务实现相应的功能,而不需要调用整个业务系统。解决了使得业务系统在进行升级或者出现故障的时候,服务器仍然可以执行预设的任务,以保证业务系统的正常运行的问题。
进一步地,所述步骤A1包括:
A11:预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,执行步骤A12,否则,执行步骤A2;
A12:根据所述第一微服务实例的标识在所述微服务脚本仓库中查找具有所述标识的第二微服务的第二脚本代码,判断所述第二脚本代码对应的哈希值是否与预设哈希值相同,若是,运行所述第一微服务实例,并将运行结果反馈至所述终端,否则,执行步骤A13;
A13:从所述微服务脚本仓库中读取所述第二脚本代码,将所述第二脚本代码载入脚本编译引擎,编译生成第二微服务实例,运行所述第二微服务实例,并将运行结果反馈至所述终端。
需要说明的是,第一微服务实例的标识可以是生成所述第一微服务实例的脚本代码对应的哈希值,也可以是该微服务的名称。通过该标识可以找到生成该第一微服务实例的脚本代码,进而生成该脚本代码的哈希值,将该哈希值与存储的生成第一微服务实例的脚本代码的哈希值进行对比,若相同,说明该脚本代码没有发生变化,直接运行该微服务实例即可。若不相同,说明该脚本代码发生了变化,则不再运行第一微服务实例,而是将变化后的第二微服务的脚本代码载入脚本编译引擎,编译生成第二微服务实例后运行。
进一步地,网关在接收到所述终端发送的调用所述第一微服务的调用请求后,在预先创建的微服务列表中查找与所述第一微服务对应的服务相关的服务器,根据预设规则从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器,并将所述第一微服务的调用请求发送至所述预设服务器;
其中,与所述第一微服务对应的服务相关的服务器,指的是服务器所执行的任务是与所述第一微服务对应的功能相关的;所述微服务列表包括所述微服务脚本仓库中所有的微服务的微服务信息,所述微服务信息至少包括:微服务的标识、微服务所在的服务器的标识、微服务所在的服务器当前的CPU使用率、微服务所在的服务器当前的内存使用率、微服务所在的服务器连接终端的连接数、微服务所在的服务器最快响应时间、微服务所在的服务器的配置对应的权重。
需要说明的是,第一微服务对应的服务与第一微服务实现的功能相对应。例如,第一微服务编译后的第一微服务实例可以实现添加成绩这个功能,那么,第一微服务对应的服务就是添加成绩。与第一微服务对应的服务相关的服务器是与第一微服务实现的功能相对应的服务器。例如,服务器实现的功能是添加学生信息,那么实现添加成绩这一服务的第一服务对应的服务器就是能够实现添加学生信息的服务器。
进一步地,所述预设规则包括:采用随机法或者轮循法从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的最小连接数从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的CPU使用率或内存使用率从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器最快响应时间从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的配置对应的权重从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器。
进一步地,还包括:
判断所述微服务实例运行的过程中是否出现异常,若是,将运行所述微服务实例的服务器根据所述异常判断的异常原因发送至网关,以使所述网关记录所述微服务实例的异常执行过程。
所述服务器将运行结果反馈至所述终端的过程具体包括:
服务器将所述运行结果反馈至网关后,网关将所述运行结果包装成预设通信协议下的目标运行结果,并将所述目标运行结果反馈至所述终端;
其中,所述预设通信协议是所述终端和所述网关之间的通信协议,所述目标运行结果是所述运行结果根据所述预设通信协议进行转换得到。
异常运行信息的记录以便快速找到微服务出现问题的根源,这种模块化的业务系统在某个微服务故障时,不影响业务系统其它微服务的运行。
包装过程是为了提高信息传输的效率,例如,可以将服务器与网关之间的socket连接转换为终端和网关之间的Http格式的连接。
网关处的微服务列表中包括了所有服务器中的微服务的信息,根据这些信息,网关可以判断当前需要调用的微服务存在于哪一个服务器中,进而将该微服务的请求信息发送至该微服务。
哈希运算的引入是为了提高查找效率,每一个微服务的脚本代码对应唯一一个哈希值,因而通过微服务的脚本代码对应的哈希值可以实现微服务的快速查找。
另一方面,图2是本发明实施例提供的多语言云编译的动态微服务调用装置结构框图。参见图2,该多语言云编译的动态微服务调用装置20,包括:
判断模块21,用于在预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,运行所述第一微服务实例,并将运行结果反馈至终端;
编译模块22,用于在判断所述预设服务器中不存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,从预设的微服务脚本仓库中读取所述第一脚本代码,将所述第一脚本代码载入脚本编译引擎,对所述第一脚本代码进行编译,生成新的微服务实例,以作为所述第一微服务实例后,运行所述第一微服务实例并将运行结果反馈至终端;
其中,所述微服务脚本仓库包括预先创建的所有微服务的脚本代码;所述微服务为一段脚本代码,对所述脚本代码进行编译形成能够实现预设功能的微服务实例。
本发明提供的多语言云编译的动态微服务调用装置20,判断模块21在服务器接收到调用微服务的调用请求后,在服务器中查找相应的微服务实例并运行,或者编译模块22查找相应的微服务对应的脚本代码,对该脚本代码进行编译形成微服务实例后运行,并将运行结果反馈至终端。由于调用的微服务是独立于整个业务系统的,能够实现预设功能的一个功能点,而不是整个业务系统,因此,业务系统在进行升级或者出现故障的时候,服务器仍然可以通过调用能够实现预设功能的微服务实现相应的功能,而不需要调用整个业务系统。解决了使得业务系统在进行升级或者出现故障的时候,服务器仍然可以执行预设的任务,以保证业务系统的正常运行的问题。
优选地,所述判断模块包括:
第一判断单元,用于在预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例;
第二判断单元,用于在判断所述预设服务器中存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例后,根据所述第一微服务实例的标识在所述微服务脚本仓库中查找具有所述标识的第二微服务的第二脚本代码,判断所述第二脚本代码对应的哈希值是否与预设哈希值相同,若是,运行所述第一微服务实例,并将运行结果反馈至所述终端;
编译单元,用于在判断所述第二脚本代码对应的哈希值是否与预设哈希值不相同后,从所述微服务脚本仓库中读取所述第二脚本代码,将所述第二脚本代码载入脚本编译引擎,编译生成第二微服务实例,运行所述第二微服务实例,并将运行结果反馈至所述终端。
优选地,还包括还包括选择模块,所述选择模块用于网关在接收到所述终端发送的调用所述第一微服务的调用请求后,在预先创建的微服务列表中查找与所述第一微服务对应的服务相关的服务器,根据预设规则从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器,并将所述第一微服务的调用请求发送至所述预设服务器;
其中,与所述第一微服务对应的服务相关的服务器,指的是服务器所执行的任务是与所述第一微服务对应的功能相关的;所述微服务列表包括所述微服务脚本仓库中所有的微服务的微服务信息,所述微服务信息至少包括:微服务的标识、微服务所在的服务器的标识、微服务所在的服务器当前的CPU使用率、微服务所在的服务器当前的内存使用率、微服务所在的服务器连接终端的连接数、微服务所在的服务器最快响应时间、微服务所在的服务器的配置对应的权重。
优选地,所述预设规则包括:采用随机法或者轮循法从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的最小连接数从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的CPU使用率或内存使用率从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器最快响应时间从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的配置对应的权重从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器。
进一步地,所述编译模块还用于判断所述微服务实例运行的过程中是否出现异常,若是,将运行所述微服务实例的服务器根据所述异常判断的异常原因发送至网关,以使所述网关记录所述微服务实例的异常执行过程。
参见图4,服务器中的各种微服务(例如,图4中的微服务A、微服务B等)由开发人员在线开发。服务器接收到调用请求后,根据请求信息调用微服务(如图4所示,可以调用单独的一个微服务,也可以调用两个或者多个微服务,例如,按照一定的规则调用微服务A和微服务B,这种调用方式相当于调用了一个新的微服务F),在微服务完成预设功能后,将执行任务的结果反馈至终端,在反馈的过程中信息传输的途径会由网关进行包装,从socket传输转换为http的传输方式后,将结果反馈至终端。其中,socket传输是网关和服务器之间的数据传输方式,http的传输方式是网关和终端之间的传输方式。
作为一种具体的实施例,微服务的调用过程参见图3,多语言动态微服务调用过程流程示意图,包括如下步骤:
1)前端业务系统,发起业务服务请求调用,传递到动态微服务API网关。
2)根据请求服务参数、用户信息,判断用户身份是否已经验证。
3)如果身份验证已经通过,则跳转到5。
4)如果身份验证没有通过,则跳转到28。
5)根据请求服务参数,判断此动态微服务是否已经在动态微服务框架中注册。
6)如果此请求的动态微服务已经注册,则跳转到8。
7)如果此请求的动态微服务没有注册,则跳转到28。
8)判断此动态微服务在注册列表中是否有效、是否健康,必须为有效的且至少有一个微服务节点可以使用。
9)如果此动态服务有效且有可用节点,则跳转到11。
10)如果此动态服务无效或无可用节点,则跳转到28。
11)选择一种负载均衡调度策略。
微服务的负载均衡策略、采用以下6种方式:
1.随机
2.轮循
3.最小连接数
4.CPU/内存最小利用率
5.最快响应时间
6、服务器配置对应的权重
其中最小连接数、CPU/内存最小利用率、最快响应时间、之前已经由底层的各个微服务定期上报给微服务API网关/综合管理调度器,所以可以很快速从综合管理调度器中获取到这些值,从多个可用的微服务节点中选择出最一个最佳节点,进行下一步请求路由。
12)将动态微服务请求包装,这里的包装主要是将rest(Http)请求包装为微服务内部所需要的Thrift(Socket)通信传输协议,然后路由至实际远程微服务节点。
13)传递包装的请求信息,如果遇到网络中断或无响应,则跳转到8。
14)根据微服务哈希标识,检测容器内存是否已经编译存在此实例或微服务脚本代码发生变化。
15)如果此动态微服务实例已经存在,则跳转到17。
16)如果此动态微服务实例不存在,则跳转到24。
17)如果此动态微服务实例脚本代码未发生变化,则跳转到19。
18)如果此动态微服务实例脚本代码已经发生变化(当动态微服务脚本代码发生变化时,原实例失效,新实例产生,这里是使用时再产生,不调用使用不产生),则跳转到24。
19)动态微服务从内存读取定位已编译的内存服务实例。
20)微服务动态脚本执行引擎驱动运行实例运行指定函数方法。
21)如果执行异常或超时,则跳转到22,再跳转到28。
22)异步记录运行日志&性能、耗时情况调用计数器加1,更新最后调用时间。
23)运行结果返回动态微服务网关。
24)从动态微服务脚本Nosql仓库中读取脚本代码。
25)将脚本代码载入动态微服务脚本编译引擎。
26)加载动态微服务关联语言外部关联模块和资源进行编译。
27)将编译内存字节放置于内存并实例化,然后跳转到19。
28)结束返回友好信息给前端调用者。
当然,调用的这些微服务是之前通过以下方式添加至服务器中的:参见图5:
1)根据业务系统划分出来的微服务在线添加/编辑动态脚本代码。添加的信息有:微服务中英文标识、允许最大最小服务实例个数、微服务服务类型(CPU消耗型/内存消耗型)、微服务所用语言(C#/VB.NET/JAVA/Python)、微服务执行方式(同步执行/异步队列)、微服务动态脚本代码、超时限制、动态伸缩扩容阈值(CPU/内存)。
2)将微服务英文标识、业务脚本代码进行并进行唯一性哈希、生成一个36位MD5字符串,能够唯一标识此微服务脚本代码。唯一性哈希信息除了有脚本代码,英文标识、还有所用语言、服务类型。
3)根据此微服务唯一性哈希值判断NoSql脚本存储仓库(Redis)中是否已经存在。
4)如果NoSql微服务脚本代码存储仓库中不存在,则跳转到6。
5)如果NoSql微服务脚本代码存储仓库中存在,则跳转到8。
6)选择对应的语言编译器对脚本进行编译,如果微服务脚本代码没有编译语法错误,则微服务脚本代码保存到NoSql脚本存储仓库。
7)如果微服务脚本代码有编译语法错误,则跳转到8
8)根据上下文提示操作者,已经存在于NoSql脚本存储仓库中或编译存在语法错误或添加编辑成功,跳转到1、再次添加新的微服务脚本代码。
微服务编辑的界面如图6所示,通过该界面将微服务对微服务的脚本代码进行编辑,并添加微服务的属性信息。其中,图7中示出了动态微服务的属性类别。可理解的是,在动态脚本添加或者编辑后,会将微服务的状态(创建、销毁或变更)上报至网关,当然上报至网关的数据中还包括微服务的连接数,线程数等,具体参见图8。
如图9所示,动态微服务的API网关记载了动态微服务的信息,例如,微服务的注册、微服务的发现、动态微服务的身份验证等,具体参见图9。
图10是动态微服务的容器装置结构图,微服务存储于容器装置中,在容器装置中通过多语言动态脚本代码编译引擎装置和多语言动态脚本代码执行引擎装置对微服务进行实例化。这些微服务存储于多语言动态脚本存储仓库中。
对于这些微服务,还可以通过如图11所示的方式进行扩展。如图11所示,
1)从动态微服务综合管理调度器中,获取已注册有效动态微服务列表。微服务列表的结构如图15所示。
2)获取此微服务所有服务器健康状态,健康指标状态之前已上报。
每个动态微服务、根据系统配置定时上报微服务数据到微服务综合管理调度中心,上报的数据有以下12种:
1.CPU使用率
2.内存使用率
3.线程数量
4.TCP连接数
5.执行日志
6.响应时间
7.IO状况
8.垃圾回收GC状况
9.TCP端口状态(是否连通)
10.微服务的创建
11.微服务的销毁
12.微服务的版本变更
3)判断动态微服务类型
4)如果为CPU消耗型,则跳转到6。
5)如果为内存消耗型,则跳转到9。
6)判断CPU使用率是否超过所配置的最大平均值(此微服务的所有实例CPU利用率平均值)。
7)如果CPU使用率已经超过所配置的最大平均值,则跳转到12。
8)如果CPU使用率没有超过所配置的最大平均值,则跳转到14。
9)判断内存使用率是否超过所配置的最大平均值(此微服务的所有实例内存利用率平均值)。
10)如果内存使用率已经超过所配置的最大平均值,则跳转到12。
11)如果内存使用率没有超过所配置的最大平均值,则跳转到18。
12)对微服务进行非阻塞微服务实例动态复制扩展(需要准备好足够的可用物理机,扩展最大数量及增量根据配置)。
13)根据配置休息指定时间再次启动检测,跳转到1。
14)判断CPU使用率是否低于最小平均值。
15)如果CPU使用率低于最小平均值,跳转到21。
16)如果CPU使用率高于最小平均值,跳转到13。
17)减少动态微服务器实例(减少的数量根据配置),跳转到13。
18)判断内存使用率是否低于最小平均值。
19)如果内存使用率低于最小平均值,跳转到24。
20)如果内存使用否高于最小平均值,跳转到13。
21)判断CPU使用率低于最小平均值且连续超出指定持续时间。
22)如果CPU使用率低于最小平均值连续已经超出指定持续时间,跳转到17。
23)如果CPU使用率低于最小平均值连续没有超出指定持续时间,跳转到13。
24)判断内存使用率低于最小平均值且连续超出指定持续时间。
25)如果内存使用率低于最小平均值连续已经超出指定持续时间,跳转到17。
26)如果内存使用率低于最小平均值连续没有超出指定持续时间,跳转到13。
27)跳转到13。
图12是动态微服务的部署/分布/伸缩示意图,当检测到需要对微服务(例如图12中的微服务A、微服务B和微服务C)进行复制扩容时,直接将该微服务复制至其它服务器,以提供更多的可调用微服务。图13是微服务的容器管理装置,通过该装置中的检测模块、复制模块等对微服务的扩容进行控制。
图14是本发明提供的微服务的总体结构模块示意图,通过该模块中的各个模块之间的协作共同完成微服务的调用、编辑和扩容的过程。
本发明提供的多语言云编译实现动态微服务技术,是把系统的每一个服务都映射为一段动态脚本代码,在远程服务器动态微服务云编译引擎会把它翻译成可执行代码放置于内存当中(这段代码可以用常见的编程语言C#、VB.NET、JAVA、Python等编写),在调用时会根据路由算法,路由到此服务器的动态微服务中进行运行,以此解决系统中功能模块之间耦合的问题,提高软件重用性,降低代码的复杂度。使系统在开发阶段各模块的职能更加明确,功能模块之间的耦合更为松散,让系统更具有可扩展性、维护性、可运维性,进而大大降低项目的开发费用和成本。
本发明的方案采用多语言云编译实现动态微服务体系结构,可以使各个微服务功能模块具有更大的独立性,各个微服务之间是相对独立的,可以完全独立开发,独立部署、独立运行、独立运维,有利于在大规模软件开发过程中提高开发的并行性和效率,改善提高软件系统的的可测试性和可维护性。
本发明并不局限于应用软件所用的这一种语言,可以实现.Net、VB.NET、Java、Python在线开发、在线编译、自动编译、自动部署,不需要像传统方式一样,需要线下使用开发软件VisualStudio、Eclipse、Sublime在电脑本地进行开发、编译。
微服务API网关/综合管理调度器,负责动态微服务的注册、发现、负载均衡、身份验证、健康汇总、限流、请求路由。微服务API网关的存在,有效的连接了微服务内部和外部前端业务页面渲染,屏蔽了后台微服务的复杂性,后台个别微服务的变化和升级不会对微服务API网关和客户有任何影响。
动态微服务在创建实例启动时,会将微服务的地址信息和端口信息上报注册给微服务API网关综合管理调度器。这样前端业务在调用到动态微服务时就可以知道微服务所在位置,将请求根据所设置的负载均衡策略,路由到真实的微服务目标地址。
利用多语言云编译实现动态微服务体系,每微服务都使用最小耦合来进行处理,不同专家和团队负责开发不同的模块,每个微服务专注一件事,边界清晰且彼此隔离,开发者都可以快速线上开发、集成、测试、部署、独立完成上线部署流程,彼此间互不影响。实现快速灵活敏捷开发、有效减少运维成本和管理成本、提高开发效率。
利用多语言云编译实现动态微服务体系,可以使软件开发人员以产品的心态和角度来做微服务,使开发人员不断增强服务意识、提高服务质量。
利用多语言云编译实现动态微服务体系,支撑业务快速变化,服务之间是快速融合,实现将多个动态微服务按照业务的需求,进行有机的、灵活的组装和编排,以适应满足急剧增长的客户个性化业务逻辑需求,还可以有效合并减少客户端请求交互次数、简化客户端代码量、进一步提高系统性能和开发效率。
利用多语言云编译实现动态微服务体系,可以交将微服务的开发给第三方公司,提高行业内的合作,达到优势互补的目的。微服务在开发完成后,立即也可被其他系统所调用,完全能够提高微服务的可重用性。
利用多语言云编译实现动态微服务体系,有利于在大规模软件系统开发过程中,使开发团队能够并行进行,提高开发的效率和质量。并且在开发和调试过程中,当部分微服务发生问题的时候,并不会影响到其他微服务,将有利于软件测试、部署工作的开展和进行。
利用多语言云编译实现动态微服务体系,可以使系统在运行时刻可以动态地替换微服务组件,根据运行环境的变化或某些条件而引起新的行为,动态的提高软件系统的自适应性。
利用多语言云编译实现动态微服务体系,可以在线开发微服务、在线编译、在线调试,微服务开发编译后可立即部署,供软件系统直接调用。
利用多语言云编译实现动态微服务体系,可以在线修复微服务,实现微服务的快速升级扩展或替换,使微服务热部署、动态可插拔。可以实现微服务多版本,实现业务系统灰度升级,服务降级,服务分布式跟踪等。
利用多语言云编译实现动态微服务体系,将微服务编译后的实例放置于进程内存中,后端全部采用Thrift(Socket)通信,就像直接引用对象一样方便且高效、减少网络延迟、提高系统的吞吐量,并且体系有同步、异步(队列非阻塞)、定时多种调用处理方式,进一步提高用户体验。
利用多语言云编译实现动态微服务体系,可能使开发团队容易尝试技术创新,与平台无关、语言无关,支持多语言(C#/VB.NET/JAVA/Python),可以选择不仅可以用现有系统所用的语言开发,也可以用其它语言进行开发跨平台运行。
利用多语言云编译实现动态微服务体系,系统稳定性增强,单个服务的失效不会影响其他服务,可以一定程度实现服务降级,而不会让整个系统瘫痪。
利用多语言云编译实现动态微服务体系,可以可视化监控,即时看到每个微服务每分钟/每小时/每天会有多少次的调用,被哪些业务调用,调用的每个时间点是多少,执行的性能和状态如何。当微服务出现问题时,即时短信/QQ/邮件报警,并可以通过错误跟踪监控系统可以快速定位异常信息。另外系统支持特有的applicationContext上下文,可以从客户请求到结束做全程调用链式和依赖关系跟踪。
利用多语言云编译实现动态微服务体系,同一个微服务实例提供多个版本,当新发布的版本出现问题或不稳定时,可以立即切换到上一个微服务版本,实现微服务版本快速rollback回滚。
利用多语言云编译实现动态微服务体系,很容易通过建立新的微服务来扩展系统业务逻辑。当向系统中加入新的微服务时,不必重新编译原有系统的前提下按需对系统功能进行扩充,从而快速响应客户个性化需求变化。
利用多语言云编译实现动态微服务体系,可以将动态在线扩展的业务逻辑可以同时部署到多台服务器上,实现自动化业务逻辑的负载均衡、横向扩展及分布式部署,从而适应多用户、高并发请求。
需要说明的是,构建多语言云编译实现动态微服务,可以动态的扩展增加系统的功能。当发现当前系统不能满足目前的需求时,只需要在线增加一个相应的动态脚本,不停止现有系统运行的情况下,对现有模块在线进行功能扩展或补充即可,而不用重新在线下开发,再次构造整个系统重新部署,从而实现敏捷业务扩展开发,即时满足客户个性化定制需求。
多语言云编译实现动态微服务对于软件运行时的扩展提供了很好的平台,业务动态脚本逻辑的指令集可以支持常见语言(C#/VB.NET/JAVA/Python),语言编译器通过框架可以生成低级指令的对象代码,整个系统所需要的脚本代码在首次运行时被动态编译成高效的原始代码,并放置于内存之中,大大提高了系统的执行速度。
在体系结构方面,传统的软件体系结构不利于大规模的集群化开发、部署,对现代软件产业的发展造成了极大的限制。采用多语言云编译实现动态微服务体系结构,可以使各个功能模块具有更大的独立性,改善了软件的可测试性和可维护性。与传统的软件体系结构相比,在这种微服务的体系结构中,使得而各个新扩展的微服务之间是相对独立的,这使得程序的结构简单,各部分可以完全独立开发,独立部署、独立运行,有利于在大规模软件开发过程中提高开发的并行性和效率。
多语言云编译实现动态微服务提供的强大可扩展性和组装性,正是通过不断的微服务进行扩展,使得它就像一棵树的树根一样不断地发展,从而赋予系统功能模块的无限可扩展性,使得系统能够不断地去满足新的需求。
多语言云编译实现动态微服务它允许自定义程序代码执行顺序的关系和执行逻辑,每个动态可扩展脚本都可以单独在线编程调试、升级维护、配置,可以根据需要动态编译、安装、载入、运行、停止、启用、停用、卸载,既不影响其它已有微服务功能模块的工作,又具有极大的灵活性。
本发明并不局限于应用软件所用的这一种语言,可以实现C#、VB.NET、JAVA、Python在线编译服务,不需要像传统方式一样,使用开发软件VisualStudio或Eclipse在电脑本地进行开发,而是直接在线开发,在线动态编译、实现编译即服务并通过预留接口动态切入当前系统,实现原有功能的快速扩展。
多语言云编译实现动态微服务是基于SOA/ESB/MicroService的构建模式,这样的动态扩展也可以直接移植融合到远程业务接口或添加到您需要扩展的地方,不同的动态扩展之间,可以互相调用,也可以调用外部其它接口,从而构造复合的动态的微服务组件,使之更加灵活多变。
多语言云编译实现动态微服务是把软件开发中的功能细分,使开发者可以使用不同语言在线开发,动态部署,动态运行的方案,以减少重复代码编写,然后在系统运行需要时编译、加载、运行时,这套框架体系可以提高开发效率的编程思想。
多语言云编译实现动态微服务,这个微服务甚至可以交给第三方公司开发,提高行业内的合作,达到优势互补的目的。在开发完成后,微脚本功能也可被其他程序系统所调用,能提高软件的可重用性。
有利于在大规模软件开发过程中,使开发能够并行进行,提高开发的效率和质量。并且在开发和调试过程中,当部分微服务动态脚本发生问题的时候,由于各个微服务动态脚本之间相对独立,并不会影响到其他微服务,将有利于软件测试工作的开展和进行,便于在测试和调试的过程中发现问题解决问题。另外,对部分微服务动态脚本的修改,不会影响到其他微服务动态脚本,避免了因为改正错误而引出新问题的情况,而且系统在运行时刻可以动态地替换微服务组件,根据运行环境的变化或某些条件而引起新的行为,从而动态的提高软件系统的自适应性。
与现有技术相比,本发明公开的技术方案具有以下优点:
1)即时生效:由于微服务是开线开发、在线编译,所以开发编译后可立即生成微服务,可以开发后的微服务可以直接立即调用,不需要开发人员重新编译,重新部署系统;
2)增强代码可维护性:微服务代码在线开发、在线调试、在线运行,如果遇到问题,可以在线修复微服务,快速升级扩展或替换微服务、启用或停用微服务,实现微服务动态可插拔。
3)微服务会降低业务的复杂度,迫使你去合理划分系统边界,合理设计领域模型,使迭代的周期更短,可以多版本,灰度升级,服务降级,服务分布式跟踪等。
4)代码重用率高:微服务动态脚本把每个方面实现为独立的功能点,功能点之间是松散耦合的。松散耦合的实现通常意味着更好的代码重用性,可以将其移值到其它系统中直接调用,从而降低了软件的开发成本和难度,一次开发,微服务即可在任何地方调用(远程/本地)。
5)性能高:微服务体系根据上下文调用需要,即时将脚本进行编译,编译后的实例放置于内存中,就像直接引用对象一样方便且高效,且有同步、异步(队列非阻塞)、定时多种调用处理方式。
6)多种语言支持:微服务对于应用系统,如果需要扩展添加新的功能,不仅可以用现有语言开发,也可以用其它语言进行开发,并且可以跨平台运行。
7)易于管理:每个微服务开发者都可以单独开发、集成、测试、部署、完成上线流程,有效减少运维成本和管理成本,提高开发效率。
8)技术创新:微服务容易尝试技术创新,甚至每个功能扩展点微服务都可以采用不同的编程语言编写。
9)稳定性增强:系统稳定性增强,单个微服务的失效不会影响其他微服务,可以一定程度实现服务降级。
10)易于开发:每个微服务都使用最小耦合来进行处理,将系统中的模块进一步细化成不同的微服务,降低了模块之间的耦合度,不同专家和团队负责开发不同的模块,彼此间互不影响。实现快速敏捷开发。
11)代码集中易于理解。使用微服务体系可以将需要多次使用的公用代码集中到一处实现,这样代码的修改范围就可以得到严格的控制,减少代码修改对系统稳定性的影响,减少代码的冗余度和耦合度,增强可读性,提高软件质量,解决了面向对象编程跨模块造成的代码混乱和代码分散问题。
12)分布式:微服务实现将动态在线扩展的业务逻辑可以同时部署到多台服务器上,实现微服务业务逻辑的负载均衡横向扩展及分布式部署,从而适应多用户、高并发请求。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种多语言云编译的动态微服务调用方法,其特征在于,包括:
A1:预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,运行所述第一微服务实例,并将运行结果反馈至终端;否则,执行步骤A2;
A2:从预设的微服务脚本仓库中读取所述第一脚本代码,将所述第一脚本代码载入脚本编译引擎,对所述第一脚本代码进行编译,生成新的微服务实例,以作为所述第一微服务实例后,运行所述第一微服务实例并将运行结果反馈至终端;
其中,所述微服务脚本仓库包括预先创建的所有微服务的脚本代码;所述微服务为一段脚本代码,对所述脚本代码进行编译形成能够实现预设功能的微服务实例;
所述步骤A1之前还包括:
网关在接收到所述终端发送的调用所述第一微服务的调用请求后,在预先创建的微服务列表中查找与所述第一微服务对应的服务相关的服务器,根据预设规则从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器,并将所述第一微服务的调用请求发送至所述预设服务器;
其中,与所述第一微服务对应的服务相关的服务器,指的是服务器所执行的任务是与所述第一微服务对应的功能相关的;所述微服务列表包括所述微服务脚本仓库中所有的微服务的微服务信息,所述微服务信息至少包括:微服务的标识、微服务所在的服务器的标识、微服务所在的服务器当前的CPU使用率、微服务所在的服务器当前的内存使用率、微服务所在的服务器连接终端的连接数、微服务所在的服务器最快响应时间、微服务所在的服务器的配置对应的权重。
2.根据权利要求1所述的方法,其特征在于,所述步骤A1包括:
A11:预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,执行步骤A12,否则,执行步骤A2;
A12:根据所述第一微服务实例的标识在所述微服务脚本仓库中查找具有所述标识的第二微服务的第二脚本代码,判断所述第二脚本代码对应的哈希值是否与预设哈希值相同,若是,运行所述第一微服务实例,并将运行结果反馈至所述终端,否则,执行步骤A13;
A13:从所述微服务脚本仓库中读取所述第二脚本代码,将所述第二脚本代码载入脚本编译引擎,编译生成第二微服务实例,运行所述第二微服务实例,并将运行结果反馈至所述终端。
3.根据权利要求1所述的方法,其特征在于,所述预设规则包括:采用随机法或者轮循法从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的最小连接数从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的CPU使用率或内存使用率从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器最快响应时间从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的配置对应的权重从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器。
4.根据权利要求1或3所述的方法,其特征在于,还包括:
判断所述微服务实例运行的过程中是否出现异常,若是,将运行所述微服务实例的服务器根据所述异常判断的异常原因发送至网关,以使所述网关记录所述微服务实例的异常执行过程。
5.一种多语言云编译的动态微服务调用装置,其特征在于,包括:
判断模块,用于在预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,若是,运行所述第一微服务实例,并将运行结果反馈至终端;
编译模块,判断所述预设服务器中不存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例,从预设的微服务脚本仓库中读取所述第一脚本代码,将所述第一脚本代码载入脚本编译引擎,对所述第一脚本代码进行编译,生成新的微服务实例,以作为所述第一微服务实例后,运行所述第一微服务实例并将运行结果反馈至终端;
其中,所述微服务脚本仓库包括预先创建的所有微服务的脚本代码;所述微服务为一段脚本代码,对所述脚本代码进行编译形成能够实现预设功能的微服务实例;
还包括选择模块,所述选择模块用于网关在接收到所述终端发送的调用所述第一微服务的调用请求后,在预先创建的微服务列表中查找与所述第一微服务对应的服务相关的服务器,根据预设规则从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器,并将所述第一微服务的调用请求发送至所述预设服务器;
其中,与所述第一微服务对应的服务相关的服务器,指的是服务器所执行的任务是与所述第一微服务对应的功能相关的;所述微服务列表包括所述微服务脚本仓库中所有的微服务的微服务信息,所述微服务信息至少包括:微服务的标识、微服务所在的服务器的标识、微服务所在的服务器当前的CPU使用率、微服务所在的服务器当前的内存使用率、微服务所在的服务器连接终端的连接数、微服务所在的服务器最快响应时间、微服务所在的服务器的配置对应的权重。
6.根据权利要求5所述的装置,其特征在于,所述判断模块包括:
第一判断单元,用于在预设服务器在接收到调用第一微服务的调用请求后,判断所述预设服务器中是否存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例;
第二判断单元,用于在判断所述预设服务器中存在对所述第一微服务的第一脚本代码编译后形成的第一微服务实例后,根据所述第一微服务实例的标识在所述微服务脚本仓库中查找具有所述标识的第二微服务的第二脚本代码,判断所述第二脚本代码对应的哈希值是否与预设哈希值相同,若是,运行所述第一微服务实例,并将运行结果反馈至所述终端;
编译单元,用于在判断所述第二脚本代码对应的哈希值是否与预设哈希值不相同后,从所述微服务脚本仓库中读取所述第二脚本代码,将所述第二脚本代码载入脚本编译引擎,编译生成第二微服务实例,运行所述第二微服务实例,并将运行结果反馈至所述终端。
7.根据权利要求5所述的装置,其特征在于,所述预设规则包括:采用随机法或者轮循法从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的最小连接数从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的CPU使用率或内存使用率从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器最快响应时间从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器、根据所述微服务列表中记载的服务器的配置对应的权重从与所述第一微服务对应的服务相关的服务器中选择一个服务器作为所述预设服务器。
8.根据权利要求5或7中所述的装置,其特征在于,所述编译模块还用于判断所述微服务实例运行的过程中是否出现异常,若是,将运行所述微服务实例的服务器根据所述异常判断的异常原因发送至网关,以使所述网关记录所述微服务实例的异常执行过程。
CN201610597274.2A 2016-07-26 2016-07-26 一种多语言云编译的动态微服务调用方法及装置 Active CN106250199B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610597274.2A CN106250199B (zh) 2016-07-26 2016-07-26 一种多语言云编译的动态微服务调用方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610597274.2A CN106250199B (zh) 2016-07-26 2016-07-26 一种多语言云编译的动态微服务调用方法及装置

Publications (2)

Publication Number Publication Date
CN106250199A CN106250199A (zh) 2016-12-21
CN106250199B true CN106250199B (zh) 2019-06-21

Family

ID=57604711

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610597274.2A Active CN106250199B (zh) 2016-07-26 2016-07-26 一种多语言云编译的动态微服务调用方法及装置

Country Status (1)

Country Link
CN (1) CN106250199B (zh)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106656604A (zh) * 2016-12-23 2017-05-10 郑州云海信息技术有限公司 微服务请求管理方法、微服务控制器及高并发微服务架构
CN108633311B (zh) 2017-01-26 2021-12-21 华为技术有限公司 一种基于调用链的并发控制的方法、装置及控制节点
CN106850829B (zh) * 2017-02-28 2019-11-22 苏州星熙数据科技有限公司 一种基于非阻塞通信的微服务系统设计方法
CN107273165B (zh) * 2017-06-19 2021-03-23 苏州浪潮智能科技有限公司 一种实现模块动态调用的系统及方法
CN109408134B (zh) * 2017-08-16 2022-04-08 阿里巴巴集团控股有限公司 模型文件的处理方法、装置、系统以及处理设备
CN107888681A (zh) * 2017-11-09 2018-04-06 北京中电普华信息技术有限公司 一种业务流程处理方法及装置
CN107979876B (zh) * 2017-11-16 2022-01-07 广州市百果园网络科技有限公司 数据传输方法及终端
CN108924221B (zh) * 2018-06-29 2020-08-25 华为技术有限公司 分配资源的方法和装置
CN109033805B (zh) * 2018-09-30 2023-05-19 山东电工电气集团新能科技有限公司 带微服务授权认证功能的智能配电终端及授权认证方法
CN109522115A (zh) * 2018-10-11 2019-03-26 平安科技(深圳)有限公司 资源配置方法、电子设备及存储介质
CN111488267B (zh) * 2019-01-25 2024-03-12 北京搜狗科技发展有限公司 一种接口测试脚本的生成方法、装置及电子设备
CN110175079B (zh) * 2019-05-10 2021-11-09 广州市申迪计算机系统有限公司 请求队列调度方法、系统、可读存储介质及计算机设备
CN110392106A (zh) * 2019-07-19 2019-10-29 深圳前海微众银行股份有限公司 一种作业状态的推送方法及装置
CN111092933A (zh) * 2019-11-20 2020-05-01 泰康保险集团股份有限公司 用于微服务架构的业务流程管理方法、系统、介质及电子设备
CN111078468A (zh) * 2019-11-21 2020-04-28 贝壳技术有限公司 微服务架构下的服务回滚方法及装置
CN110995829B (zh) * 2019-11-29 2022-07-22 广州市百果园信息技术有限公司 实例调用方法、装置及计算机存储介质
CN111125431B (zh) * 2019-12-24 2024-03-26 北京酷我科技有限公司 一种用于推荐系统的微服务架构
CN111177008A (zh) * 2019-12-31 2020-05-19 京东数字科技控股有限公司 数据处理方法、装置、电子设备和计算机存储介质
CN111341445B (zh) * 2020-02-05 2024-04-16 网宿科技股份有限公司 微服务调用链的健康检测方法和健康检测系统
CN111639501A (zh) * 2020-05-04 2020-09-08 国网浙江省电力有限公司 基于amsl的电网业务微服务组合方法
CN111708646A (zh) * 2020-06-16 2020-09-25 中国建设银行股份有限公司 前端服务平台实现方法、装置、系统和存储介质
CN112256248B (zh) * 2020-10-10 2023-06-16 合肥青谷信息科技有限公司 一种启效智慧云低代码平台
CN112506799B (zh) * 2020-12-22 2023-11-10 北京百度网讯科技有限公司 业务异常定位方法及装置、电子设备、介质、产品
CN112995324B (zh) * 2021-03-10 2023-07-14 中国民航信息网络股份有限公司 服务调用方法、装置、计算机可读介质以及设备
CN112988160B (zh) * 2021-03-15 2022-04-19 深圳市慧为智能科技股份有限公司 服务器编译方法、装置、设备及计算机可读存储介质
CN115756483A (zh) * 2022-11-16 2023-03-07 中电金信软件有限公司 编译方法、装置、计算机设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479225A (zh) * 2010-11-26 2012-05-30 中国移动通信集团四川有限公司 一种分布式数据分析和处理方法及系统
CN102750177A (zh) * 2012-06-19 2012-10-24 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法
CN105577780A (zh) * 2015-12-21 2016-05-11 武汉理工大学 一种基于微服务的高校教学云平台

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9842045B2 (en) * 2016-02-19 2017-12-12 International Business Machines Corporation Failure recovery testing framework for microservice-based applications

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102479225A (zh) * 2010-11-26 2012-05-30 中国移动通信集团四川有限公司 一种分布式数据分析和处理方法及系统
CN102750177A (zh) * 2012-06-19 2012-10-24 武汉凌控自动化技术有限公司 一种使用编译器的脚本实现方法
CN105577780A (zh) * 2015-12-21 2016-05-11 武汉理工大学 一种基于微服务的高校教学云平台

Also Published As

Publication number Publication date
CN106250199A (zh) 2016-12-21

Similar Documents

Publication Publication Date Title
CN106250199B (zh) 一种多语言云编译的动态微服务调用方法及装置
CN106227605B (zh) 一种多语言云编译的动态微服务扩容方法及装置
CN106293704B (zh) 多语言云编译的动态微服务编辑方法、装置和服务器
CN106227611A (zh) 一种多语言云编译的动态微服务调用方法及装置
CN106250178B (zh) 通过多语言云编译实现系统动态功能在线拦截扩展的方法
CN106293808B (zh) 多语言云编译实现系统功能动态拦截扩展的方法及系统
US10324690B2 (en) Automated enterprise software development
Granchelli et al. Towards recovering the software architecture of microservice-based systems
CN112534398B (zh) 用于连接器开发和集成通道部署的系统和方法
CN106293863B (zh) 多语言云编译实现系统功能动态扩展替换的方法及系统
US9542175B2 (en) Continuous deployment
US20070250575A1 (en) Deployment
US20030093420A1 (en) Method and system for retrieving sharable information using a hierarchically dependent directory structure
CN101996132A (zh) 公用对象请求代理程序体系结构接口自动测试方法和装置
CN107885658B (zh) 测试前置实现方法、装置、终端设备及存储介质
CN107025115B (zh) 一种适配多种接口采集的方法
BR112012001510B1 (pt) Sistema para modificar uma máquina de terminal e uma máquina de provedor de serviço e método de conduzir um diálogo entre uma máquina de terminal e uma máquina de provedor de serviço
CN106250179A (zh) 通过多语言云编译实现系统动态功能拦截扩展的方法
CN108021357A (zh) 程序调用的优化方法及装置
Kritikos et al. Towards the modelling of hybrid cloud applications
CN102929646A (zh) 应用程序生成方法及装置
KR20210060203A (ko) 마이크로서비스 구조 재구성 방법 및 장치
CN101980546A (zh) 智能网平台、业务执行方法和分析业务异常的方法
CN115309398A (zh) 基于软件开发框架衍生的多应用微前端实现方法
KR101045346B1 (ko) 인터페이스 자동 생성부를 가진 데이터 분산처리 시스템 및 그 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant