传统本地部署应用的容器插件的制作方法

文档序号:33649067发布日期:2023-03-29 06:34阅读:35来源:国知局
传统本地部署应用的容器插件
背景技术
::1.传统上,软件是独立的,并在一个或多个本地机器上运行。希望使用软件工具的企业构建本地部署(on-premises)计算系统并运行软件应用以在该计算系统上提供工具。软件应用可以由企业开发和/或从第三方软件提供者处购买。用户直接从计算系统或通过联网的用户计算设备远程访问软件工具。附图说明2.本公开在以下附图中通过示例而不是限制的方式来说明。3.图1是示出用于向在云环境中运行的传统本地部署应用提供插件支持的环境的一个示例的示图。4.图2是示出可以在图1的环境中运行以在应用实例上安装或升级插件的处理流的一个示例的流程图。5.图3是示出可以在图1的环境中运行以在应用实例中卸载插件的处理流的一个示例的流程图。6.图4是示出用于将插件安装到在云环境中运行的传统本地部署应用的布置的一个示例的示图。7.图5是示出插件容器图像的一个示例布置的示图。8.图6-图8是示出可以在布置(诸如图4的布置)中实现的向应用实例安装插件的处理流600的一个示例的流程图。9.图9是示出用于管理在云环境中运行的传统本地部署应用处的插件的布置的一个示例的示图。10.图10和图11是示出考虑版本兼容性的用于将插件安装到应用实例的处理流的一个示例的流程图。11.图12和图13是示出考虑插件版本兼容性升级应用实例的处理流的一个示例的流程图。12.图14是示出用于计算设备的软件架构的一个示例的框图。13.图15是计算机系统的示例形式的机器的框图,其中可以执行指令以使机器执行本文讨论的任何一个或多个方法。具体实施方式14.本地部署(on-premises)软件应用通常由企业在现场或本地部署的计算系统执行。本地部署应用可以被实现为包括一个或多个可执行文件(executable)、库等的集合,由驻留在本地部署计算系统的可执行文件、库等的集合实现。与企业相关联的用户从本地部署计算系统访问软件应用。15.本地部署软件应用的典型特征是发布周期长。例如,可以通过改变一个或多个可执行文件和/或库来实现对本地部署应用的一项功能的改变。然而,本地部署应用的可执行文件、库等通常会实现多种功能。这意味着对本地部署应用的一项功能的改变可能需要重新测试修改的可执行文件和/或库文件提供的许多不同功能。此外,当本地部署应用是数据库管理系统或与数据持久性接口的其他应用时,对用于实现应用的可执行文件(或多个)和/或库的改变可能会改变应用与持久性接口的方式。因此,升级本地部署应用可以包括以持久性执行数据迁移(例如,从一个模式到目标模式)。因此,可以批量改变本地部署应用。这样,可以同时测试、调试和部署一批多个改变。16.与本地部署实现相反,一些软件应用在云环境中被运行。云环境包括实现一个或多个虚拟和/或硬件服务器的一个或多个数据中心。云环境运行云应用的实例。例如,云应用的实例可以运行以向一组用户(例如,与购买对软件工具的访问的实体相关联的一组用户)提供软件工具。云应用的每个实例包括在云环境中运行的一个或多个虚拟机和/或容器的集合。17.云本原应用专门被开发用于在云环境中运行。因此,许多云本原应用是根据微服务架构设计的。在微服务架构中,软件应用的实例由在云环境运行的松散耦合微服务集合实现。每个微服务还可以包括单个可执行文件,该单个可执行文件在由云环境实现的单独虚拟机(vm)或容器中运行。在微服务架构中,每个微服务都被编程为执行定义的任务或一小组任务,并以定义的方式与其他微服务交互,例如,根据应用编程接口(api)。18.微服务架构应用中微服务之间的独立程度简化了测试和升级的处理。例如,由于微服务架构的性质,对一个微服务的改变可能对其他微服务和/或微服务架构应用使用的数据持久性的影响有限。因此,许多云本原微服务架构应用支持通过持续或持续处理进行测试和更新,诸如持续集成/持续交付(ci/cd)流水线。在ci/cd流水线中,开发人员可以对构成应用实例的微服务子集进行改变。这些改变被实现为应用的修改版本。修改的构建被部署到各种集成和测试环境。如果修改的构建通过了各种集成和测试环境的测试,则它可以作为新构建被部署到一个或多个云环境。如果发现新构建有缺陷或包括bug,则可以通过恢复到构建的先前版本来回滚。19.在一些示例中,希望将设计用于本地部署执行的软件应用转换到云环境。由于云环境和本地部署计算系统环境之间的差异,这样的转变可能不是微不足道的。在一些示例中,本地部署应用的可执行文件、库等被配置为在云环境的一个或多个容器中执行。云环境中的编排(orchestration)服务可以管理在云环境运行的容器,以将应用的实例提供给与不同客户相关联的用户组。20.在一些示例中,可以完全重构和重新编码传统的本地部署应用以符合微服务架构。一旦发生这种重构和重新编码,则现在的云本原应用可以使用ci/cd流水线或类似的连续技术不断升级。然而,通常不希望对传统的本地部署应用执行完全重构和重新编码。例如,这种转换可能是时间和劳动密集型的。本地部署应用可能会受到部分重构,而不是完全重构和重新编码。在一些示例中,本地部署应用的现有可执行文件(或多个)和库仅被配置为在由一个或多个云服务管理的云环境运行的容器中运行。21.当本地部署应用未完全被转换为微服务架构格式时,应用的最终云实现可能不太适合持续更新。例如,容器实现的可执行文件和/或改编自本地部署实现的库可能不像云本原应用那样独立。因此,对由可执行文件或库实现的一个功能的改变可能需要对由相同可执行文件或库或者其他可执行文件和/或库实现的其他功能进行更广泛的测试。22.此外,具有容器实现的可执行文件和/或库的云应用可能不独立于应用使用的持久性的一个或多个模式。因此,在云上更新应用可以包括以一个或多个云持久性来执行数据迁移以使那些持久性与升级的应用一致。这种数据迁移可能是时间和资源密集型的,因此在出现故障或其他错误时难以回滚。23.将本地部署应用迁移到云环境时出现的另一个挑战与插件有关,有时也称为应用扩展或扩展。插件是扩展或以其他方式修改应用实例的功能性的软件。例如,将插件安装到应用可以包括修改和/或补充应用的现有实例,而不是执行应用的不同实例。24.在本地部署实现中,应用开发人员向现场应用管理员提供插件,例如,通过下载或交付到本地部署的物理介质。应用管理员有权访问其上执行应用实例的服务器或其他计算设备,包括适当的安全授权和运行插件安装程序以安装、升级或删除插件的访问权。安装插件可能包括,例如,将一个或多个附加可执行文件加载到现场机器,将新库或osgi包添加到本地部署机器,添加结构化查询语言(sql)或其他数据库协议过程等。25.云本原应用使用插件的方式可能与本地部署应用不同。例如,因为可以根据微服务架构来布置云本原应用,所以可以通过添加或修改实现应用的微服务来连续地执行向云本原应用添加新的或附加的功能。可以使用ci/cd流水线或其他连续技术对微服务进行改变。因此,用户和用户组可能不需要直接访问云环境来实现使用插件在本地部署实现的各种功能改变。26.然而,当传统的本地部署应用被转换到云实现时,仍可以构建云实现的传统应用以与插件一起使用。因此,可能希望允许用户选择安装、升级或删除哪些插件。然而,在云安排中,客户只需购买对应用的访问权和用于保护数据和资产的安全概念。客户不拥有执行应用的计算机系统,也不对系统的安全性负责。因此,允许客户的用户上传和安装插件到云环境可能是不切实际的。然而,如果未能为客户提供安装或删除插件的任何机制,则可能会限制传统的本地部署应用相对于本地部署实现和完全云本原实现的功能。27.在云环境中使用插件安装服务可以解决这些和其他挑战。插件安装服务在云环境中执行,例如在容器中,并且可以与插件目录数据存储和/或插件存储数据存储进行通信。云环境中的前端服务可以向用户组(或其代表用户)提供用于选择安装、升级和/或移除当前应用实例的插件的接口。前端服务可以调用插件安装服务以基于插件目录检索一个或多个可用插件的列表,并向代表用户提供可用插件的指示。28.在接收到插件选择之后,前端服务调用插件安装器来安装、升级和/或删除选定插件。插件安装器可以从云环境的插件存储中检索选择的插件,并将其安装到与用户组相关联的当前应用实例。29.通过这种方式,用户组可以保留对插件的访问权,以修改云环境中传统的本地部署应用的功能,同时避免一些潜在的缺点。例如,因为插件由云环境维护,所以降低了无意中将恶意软件引入云环境的风险。此外,例如,因为插件仍然可用,所以本地部署应用的云实现可以保持本地部署应用的灵活性,而无需将应用完全重构为云本原格式。30.图1是示出用于向在云环境102中运行的传统本地部署应用提供插件支持的布置100的一个示例的图。云环境102执行一个或多个应用实例122、124、126、128和各种服务112、104、131向一个或多个用户组114、116、118、120提供应用,诸如数据库管理系统应用。31.云环境102可以包括一个或多个计算设备,诸如服务器,用于执行应用实例122、124、126、128和服务112、104。在一些示例中,云环境102是由不同地理位置处的云服务提供者实现的多个云环境中的一个。例如,云环境102可以被实现在地理上靠近用户组114、116、118、120的一个或多个数据中心,以最小化对用户组114、116、118、120的网络延迟。类似于云环境102的其他云环境可以被实现在地理上靠近其他用户组的数据中心,以将应用提供给那些用户组。32.用户组114、116、118、120指示在云环境102开发和/或使用应用实例122、124、126、128的一个或多个用户的组。在一些示例中,每个用户组114、116、118、120与利益相关者相关联。例如,一些用户组114、116、118、120与作为客户实体的利益相关者相关联。客户实体购买或以其他方式获得对应用实例122、124、126、128的访问权。与客户实体相关联的用户组114、116、118、120可以包括利用例如使用应用的功能的一个或多个应用实例122、124、126、128。此外,例如,一些用户组114、116、118、120与提供软件应用的实体的内部利益相关者相关联。例如,一些用户组114、116、118、120可以与用于开发应用实例122、124、126、128中的一些或全部的开发组、用于测试应用实例122、124、126、128的qa和/或测试用户组等相关联。33.用户组114、116、118、120可以与一个或多个应用实例122、124、126、128相关联。例如,用户组114可以与应用实例122相关联。用户组116可以与应用实例124相关联。用户组118可以与应用实例126相关联。用户组120可以与应用实例128相关联,等等。在一些示例中,用户组114、116、118、120可以与应用的多于一个实例相关联。例如,用户组114、116、118、120可以执行应用的实例用于生产实现,并且执行应用的另一个实例或多个实例用于测试或评估使用。34.云环境102还实现持久性(persistency)130、133、135、136。例如,当应用实例122、124、126、128实现数据库管理系统时,持久性130、133、135、136可以存储由数据库管理系统应用关联的数据。持久性130、133、135、136可以使用任何合适的数据存储设备来实现,例如一个或多个磁盘、一个或多个固态驱动器、一个或多个随机存取存储器等。在一些示例中,例如,在云环境102处实现的软件应用是用于内存数据库的数据库管理系统应用,例如可从德国瓦尔多夫的sapse获得的和系统。35.持久性130、133、135、136可以与用户组相关联。在图1的示例中,持久性130与用户组114相关联。持久性133与用户组116相关联。持久性135与用户组118相关联;并且持久性136与用户组120相关联等等。在一些示例中,单个用户组114、116、118、120可以与多于一个持久性相关联。例如,用户组114、116、118、120可以为软件应用的生产实现维护一个持久性和为软件应用的测试或评估实现维护另一个持久性。36.应用实例122、124、126、128包括一个或多个可执行文件、库和/或在单个容器或在云环境处实现的有限容器组内执行的其他组件的集合。例如,应用实例122、124、126、128可以是在云实现的容器内执行的传统本地部署应用的实例。在一些示例中,实例122、124、126、128可以与相应的持久性130、133、135、136相关联,如图所示。在一些示例中,用于执行各种应用实例122、124、126、128的容器使用容器管理布置来执行,例诸如一个或多个集群。37.容器可以是包括代码的代码依赖性的软件单元,诸如库等。这样,容器可以在不同的环境上运行,诸如在本文描述的云环境中,而不依赖于环境本身的组件。在一些示例中,容器可以由容器运行时来管理,诸如可从加利福尼亚州帕洛阿尔托的docker,inc.获得的引擎。38.在一些示例中,在云环境102处执行的容器是使用容器编排系统来管理的,诸如容器编排系统。例如,实现应用实例122、124、126、128的一个或多个容器可以作为容器集群来执行和管理。容器编排系统可以被配置为管理容器的执行,包括例如通过管理容器的持久性,如果现有版本崩溃,则通过旋转一个或多个容器的新版本等。39.在某些示例中,容器从容器图像运行。容器图像可以例如如本文所述被存储并且可以包括用于在诸如云环境102的计算系统上实现容器的可执行代码。例如,通过执行一个或多个容器图像来实现用于执行应用实例122、124、126、128的一个或多个容器,可以在云环境102启动应用实例122、124、126、128。40.尽管在图1中示出了多个用户组114、116、118、120、应用实例122、124、126、128、持久性130、133、135、136等,但是应当理解,云环境102可以包括任何合适数量的这些元素,例如包括一个。41.云环境102还执行一个或多个服务112、104、131以管理应用实例122、124、126、128和在云环境102处执行的任何附加应用实例。服务104、112、131可以在一个或多个容器中在云环境102被执行。前端服务112可以与用户组114、116、118、120接口。例如,前端服务112可以为来自用户组114、116、118、120的用户提供用户接口以允许用户管理应用实例122、124、126、128和/或发起新的应用实例。例如,前端服务112可以为用户组114、116、118、120提供用于创建、升级、删除和/或以其他方式管理应用实例122、124、126、128的功能。在一些示例中,前端服务112还向来自用户组114、116、118、120的用户提供关于可用插件的数据,如本文所述。42.应用编排服务104可以管理应用实例122、124、126、128的执行。应用编排服务104可以实现为单个服务和/或一个或多个子服务集合。在图1的示例中,应用编排服务104包括应用运营商服务105和应用更新服务103。43.应用运营商服务105可以管理实现应用实例122、124、126、128的一个或多个容器的执行。例如,应用运营商服务105可以开始执行用于实现应用实例122、124、126、128的一个或多个容器,例如,来自与一个或多个容器相关联的一个或多个容器图像。此外,如果与应用实例122、124、126、128相关联的一个或多个容器崩溃,则应用运营商服务105可以上旋(spinup)一个或多个崩溃容器的替代品。44.插件安装服务131可以与应用编排服务104和/或前端服务112通信以安装、升级和/或移除用于应用实例122、124、126、128的插件。插件安装服务131、应用编排服务104和/或前端服务可以与插件目录132通信。插件目录132是或包括云环境102处的持久性,其存储描述用于应用实例122的一个或多个插件的插件目录记录。45.插件目录记录可以包括关于插件的各种信息,包括例如插件的名称、插件的描述、与插件相关联的应用、插件的版本以及指示用于实现插件的一个或多个文件位置的地址。例如,地址可以是指在插件存储134处的位置。在一些示例中,插件目录记录还包括应用的一个或多个版本的指示。例如,某些插件可能与应用的所有版本都不兼容。此外,在一些示例中,插件目录记录可以包括描述客户组的选择器数据。例如,某些插件可能被授权由选定用户组使用,而不是由其他用户组使用。46.下面的示例1提供了一个名为“plugin-xyz”的第一插件的插件目录记录示例:47.example1:[0048][0049]在example1中,插件目录记录包括各种字段。“apiversion”字段指示插件安装服务131用于与插件目录132接口的api版本的名称。“kind”字段指示记录的种类——在这种情况下,“productplugin”记录指示记录是插件目录记录。“name”字段表示插件的名称–“plugin-xyz”。“type”字段指示插件的类型——在此示例中,共享库。如本文所述,“description”字段指示可被提供给用户组114的一个或多个用户的文本描述。“extendedproduct”字段指示能够安装引用插件的应用的名称。在示例中,应用被称为“product-a”。version字段指示插件的版本是“1.0.0”。“location”字段包括插件存储器134处的包含用于安装插件的一个或多个文件的位置的地址。[0050]图2是示出可以在布置100中运行以在应用实例122处安装或升级插件的处理流200的一个示例的流程图。应当理解,虽然关于应用实例122和用户组114描述了图2,但是也可以对其他用户组116、118、120以及关于其他应用实例124、126、128来执行处理流200。[0051]处理流200包括三个列201、203、205,每列包括可以由布置100的不同组件执行的操作。列201包括可以由用户组114或例如被授权代表用户组114进行改变的单个用户执行的操作。列203包括由前端服务112执行的操作。列205包括由插件安装服务131执行的操作。[0052]在操作202,用户组114(例如,代表用户)打开应用仪表板。应用仪表板可以是由前端服务112提供给用户组114的任何合适的用户界面元素。在操作204,前端服务112从插件目录132读取可用插件。这可以包括从插件目录132检索一个或多个插件目录记录。例如,前端服务112可以从插件目录132检索与插件相对应的插件目录记录,这些插件与对应于应用实例122的应用相关联。在一些示例中,前端服务112可以限制其考虑到与应用实例122表示的应用版本兼容的插件。例如,前端服务112可以考虑指示应用实例122的版本的插件目录记录。此外,在一些示例中,前端服务112可以将其考虑限制在用户组114授权使用的插件上。例如,前端服务112可以考虑包括描述用户组114的消费者上下文属性的选择器数据的插件目录记录。[0053]在操作206,前端服务112向用户组114(例如,其代表用户)提供可用插件的指示。例如,这可能包括在仪表板上提供可用插件的列表。在一些示例中,向用户组114提供插件列表包括将每个插件的描述从其相关联的插件目录记录提供给用户组114。[0054]在操作208,用户组114选择要安装的插件,并且在操作210,例如通过选择用户界面按钮或指示选定插件的其他输入,向前端服务112指示选定插件。在操作212,前端服务112收集选定插件的参数并启动安装。在一些示例中,启动安装包括调用应用编排服务104(例如,其应用更新服务103)。应用编排服务104进而可以调用插件安装服务131来安装选定插件。在其他示例中,前端服务112直接调用插件安装服务131。[0055]在操作214,插件安装服务131在接收到安装插件的请求时,访问对应于选定插件的插件目录记录。如本文所述,插件目录记录可以包括指示插件存储134处的位置的地址,插件存储134包括用于安装插件的一个或多个文件。用于安装插件的文件可以包括例如一个或多个可执行文件、一个或多个库文件、一个或多个osgi包、一个或多个sql或其他数据库协议过程等。插件安装服务131可以在操作216检索一个或多个文件,并且可以在操作218安装插件。[0056]插件安装服务131可以以各种不同的方式安装插件,例如,基于插件的形式。考虑插件是或包括共享库的示例,该共享库将由实现应用实例122的可执行文件使用。插件安装服务131可以停止在其容器内执行应用实例122的可执行文件。停止的可执行文件可以实现应用实例122的全部或一部分。插件安装服务131修改可执行文件以在执行时加载共享库。插件安装服务131将共享库存储在持久性130和/或在执行时应用实例122可访问的另一个持久性。插件安装服务131可以通过重新启动可执行文件的执行来完成共享库插件的安装。这可能导致可执行文件加载共享库,从而使插件对用户组114可用。[0057]考虑另一示例,其中插件是或包括库文件,诸如动态链接库,包括查询语言过程。查询语言过程可以是例如结构化查询语言(sql)查询。例如,当应用实例122实现的应用是数据库管理系统应用时,各种插件可以包括包含查询语言过程的库文件。插件安装服务131可以加载包括查询语言过程的库文件,类似于本文对包括共享库的插件所描述的。[0058]考虑另一示例,其中插件是或包括代码包(bundle),诸如开放服务网关启动(osgi)包、jar文件、sql或其他数据库协议过程,或可以添加到应用实例122的其他代码包,以实现插件的功能。在该示例中,插件安装服务131可以通过将代码包写入持久性130和/或可以与应用实例122的其余部分一起执行的另一个位置来安装插件。[0059]考虑另一示例,其中插件是或包括独立可执行文件。在该示例中,插件安装可以通过开启独立可执行文件的执行来安装插件,例如,在包括应用的其他组件的同一容器中。[0060]考虑另一示例,其中插件是或包括用于实现插件功能的微服务。在该示例中,插件安装服务131可以通过发起微服务的执行来安装插件,例如,通过发起用于执行微服务的容器。[0061]在操作220,插件安装服务131可以向前端服务112提供插件何时安装的指示。在操作220,前端服务112可以向用户组114报告应用实例122已准备好与安装的插件一起使用。在操作222,用户组114可以开始使用应用实例122。[0062]图3是示出可以在布置100中执行以在应用实例122处卸载插件的处理流300的一个示例的流程图。应当理解,虽然关于应用实例122和用户组114描述了图2,但是也可以对其他用户组116、118、120以及关于其他应用实例124、126、128来执行处理流200。[0063]处理流300包括三个列301、303、305,每列包括可以由布置100的不同组件执行的操作。列301包括可以由用户组114或例如被授权代表用户组114进行改变的单个用户执行的操作。列303包括由前端服务112执行的操作。列305包括由插件安装服务131执行的操作。[0064]在操作302,用户组114(例如,代表用户)打开应用仪表板。应用仪表板可以是由前端服务112提供给用户组114的任何合适的用户界面元素。在操作304,前端服务112向用户组114显示关于应用实例122的信息。所显示的信息可以包括,例如,安装到应用实例122的插件列表。在操作306,用户组114选择要移除的插件。在操作308,用户组114指示移除应该继续。[0065]在操作310,前端服务112收集选定插件的参数并开启移除。在一些示例中,开启移除包括调用应用编排服务104(例如,其应用更新服务103)。应用编排服务104进而可以调用插件安装服务131来移除选定插件。在其他示例中,前端服务112直接调用插件安装服务131。[0066]在操作312,插件安装服务131在接收到卸载插件的请求时,访问对应于选定插件的插件目录记录。插件目录记录可以包括实现插件的一个或多个文件的标识,插件安装服务131可以使用该标识来识别在卸载插件时要移除的文件。[0067]插件安装服务131在操作314卸载插件。卸载插件的方式可以取决于插件的形式。例如,如果插件是共享库,则卸载插件可以包括停止应用实例122的至少一个可执行文件、移除共享库文件以及重新启动应用实例122。如果插件是代码包,卸载插件可能包括移除代码包。[0068]插件安装服务131可以向前端服务112提供插件何时安装的指示。在操作316,前端服务112可以向用户组114报告应用实例122已准备好在插件被卸载的情况下使用。在操作318,用户组114可以开始使用应用实例122。[0069]在云环境中使用传统的本地部署插件也会带来其他实现挑战。例如,如本文所述,传统本地部署应用可以在云环境中在一个或多个容器中执行,诸如由编排系统或其他合适的容器管理系统作为集群管理的容器集合。虽然向云本原应用添加功能可能涉及向实现应用实例的集群添加或修改基于容器的微服务,但是将插件安装或卸载到传统本地部署应用实例可能涉及在现有一个或多个容器内进行修改。[0070]在应用实例的一个或多个容器内安装插件可能会带来各种挑战。例如,安排访问一个容器或容器集群的机制可能是不平凡的。此外,希望允许用户组,包括客户用户组,在他们自己的应用实例中管理插件。用户组可能期望选择要安装和卸载的插件。此外,可能期望向用户组提供这种灵活性,而不向用户组提供对容器或执行应用实例的容器的直接访问。[0071]在各种示例中,可以通过使用插件容器来解决这个和其他挑战。插件容器可以从存储在云环境中的插件容器图像构建。插件容器图像可以包括用于实现插件的插件有效载荷数据。有效载荷数据可以包括例如可执行文件、库、osgi包和/或用于实现插件的其他组件。插件容器图像还可能包括副本可执行文件。插件容器图像可能是不包括操作系统的最小图像或临时图像。为方便起见,副本可执行文件可以是静态链接的。[0072]为了安装插件,插件运营商服务可以实现插件安装作业。插件安装作业可以例如由容器编排系统(例如系统)来执行。插件安装作业可以实现共享容器文件系统,可由作为插件安装作业一部分的各种容器访问。插件安装作业访问插件容器图像并使用它在插件安装作业中启动对应的容器插件。插件安装作业将插件容器安装到共享容器文件系统。当插件容器被安装到共享容器文件系统时,可以执行副本可执行文件。在执行之后,副本可执行文件将插件有效载荷数据传输到共享文件系统。[0073]插件安装作业还可以执行插件部署容器,例如,从插件部署容器图像。插件部署容器也可以安装到共享容器文件系统。插件部署容器可以包括一个或多个可执行文件以从共享文件系统检索插件有效载荷数据并将其安装到一个或多个实现应用实例的容器。在安装完成之后,插件安装作业可以终止并且共享文件系统可能会被删除。[0074]本文描述的示例布置可以提供各种优点。在一些示例中,因为对一个或多个应用实例容器的访问限于插件安装作业,所以可以在不向用户组(诸如客户用户组)提供对应用实例的直接访问权的情况下完成插件安装。[0075]此外,在一些示例中,本文描述的布置可以减少云环境的容器注册表的存储需求。例如,因为插件容器是最小容器或临时容器,所以云环境可能不需要为每个插件容器图像存储操作系统图像。例如,不同插件的插件容器图像可能具有相同的临时层和/或相同的副本可执行文件,这意味着云环境可能需要存储临时层的一个副本和可执行文件的一份副本,与所使用的插件容器图像的数量无关。[0076]图4是示出用于将插件安装到在云环境402中运行的传统本地部署应用的布置400的一个示例的示图。图4所示的示例云环境402示出了单个用户组414和单个应用实例422。然而,应当理解,在一些示例中,类似于云环境402的云环境可以布置有多个用户组以执行多个对应的应用实例,例如,如本文所述。[0077]与本文描述的其他云环境一样,云环境402可以包括一个或多个计算设备,诸如服务器,用于执行应用实例422和服务403、404、405、412等。在一些示例中,云环境402是由云服务提供者在不同地理位置实现的多个云环境中的一个。例如,云环境402可以被实现在地理上靠近用户组414的一个或多个数据中心处,以便在与用户组412相关联的用户访问云环境4022时最小化网络延迟。类似于云环境402的其他云环境可以被实现在地理上靠近其他用户组的数据中心,以向那些用户组提供应用。[0078]用户组414指示使用云环境402处的应用实例422的一个或多个用户的组。用户组414可以与利益相关者相关联,例如,在实现云环境402的实体处的组,和/或与为用户组414的用户购买对软件应用的访问权的客户实体相关联。[0079]图4所示的应用实例422与用户组414相关联。尽管为了清楚起见,图4没有示出与应用实例422相关联的持久性,但是应当理解,应用实例424可以具有如本文其他地方所述的持久性。例如,在一些示例中,应用实例422是数据库管理应用,例如可从德国瓦尔多夫的sapse获得的hana和s/4hana系统。[0080]由图4的云环境402提供的软件应用可以是被转换为由云环境402提供的传统本地部署应用。例如,应用可以作为实例422在云环境402处执行。实例422可以包括一个或多个容器,包括可执行文件、库和/或用于提供软件应用的其他组件。在一些示例中,用于执行应用实例422的容器被布置为集群。[0081]云环境402还执行一个或多个服务403、404、405、412、431,以管理应用实例422的执行。服务403、404、405、412、431可以在一个或多个容器中在云环境402下执行。前端服务412可以与用户组414的用户交互。例如,前端服务412可以为来自用户组414的用户提供用户接口以允许用户访问应用实例422,以升级应用实例422,如本文所述,和/或可以安装、升级和/或删除插件。应用编排服务404可以管理应用实例422的执行,例如,以类似于本文描述的编排服务104、604的方式。在图4的示例中,应用编排服务404包括应用运营商服务405和应用更新服务403,其可以类似于图1的应用更新服务103和应用运营服务105来操作。在图4的示例中,前端服务412包括在应用编排服务404中。然而,应当理解,在一些示例中,前端服务412可以与应用编排服务404分离,例如,如图4所示。[0082]插件安装服务431可以与应用编排服务404和/或前端服务412通信以安装、升级和/或移除应用实例422的插件。插件安装服务431、应用编排服务404和/或前端服务可以与插件目录432通信。插件目录432是或包括在云环境402处的持久性,其存储描述应用实例422的一个或多个插件的插件目录记录。[0083]如本文所述,插件目录记录可以包括关于插件的各种信息,包括例如插件的名称、插件的描述、与插件相关联的应用、插件的版本以及指示用于在插件存储434处实现插件的一个或多个文件的位置。在一些示例中,插件存储434是或包括容器注册表,包括一个或多个插件容器图像,例如图4中所示的示例插件容器图像460.[0084]图5是示出插件容器图像460的一种示例布置的示图。插件容器图像460可以根据任何合适的格式来布置,例如图像格式。插件容器图像460包括图像基础层502、可执行层504和插件有效载荷层506。[0085]在本示例中,插件容器图像460是从头开始构建的。例如,插件容器图像的基础层502可以是没有操作系统的空文件系统。如本文所述,可执行层504可以包括用于安装插件的一个或多个可执行文件。例如,插件基础层可以包括副本可执行文件,在此更详细地描述。在一些示例中,插件基础层504还包括附加的可执行文件,例如用于检查插件和/或安装处理的安全方面的安全可执行文件。此外,在一些示例中,可以包括扫描可执行文件以扫描插件有效载荷数据以查找错误。[0086]可执行层504的一个或多个可执行文件可以被存储在基础层502的空文件系统的根目录中。此外,可执行层504的一个或多个可执行文件可以是静态链接的。例如,一个或多个可执行文件可以被布置为在不依赖于操作系统提供的和/或来自其他文件的库、服务或其他资源的情况下执行。以这种方式,一个或多个可执行文件可以在从插件容器图像460启动的容器中执行,该插件容器图像460可以不包括操作系统,如本文所述。[0087]插件有效载荷层506包括插件有效载荷数据。插件有效载荷数据可以是用于在应用实例422处安装插件的数据。例如,插件有效载荷层506可以包括用于实现插件的一个或多个可执行文件、用于实现插件的一个或多个库或osgi包、用于实现插件的一个或多个sql或其他数据库协议过程等。在一些示例中,插件有效载荷数据包括可以安装在应用的本地部署实现以提供插件的数据。[0088]插件容器图像460的结构可以减少插件存储434以及例如其插件注册表处的存储需求。例如,具有存储在插件存储434中的相应插件容器图像的所有或多个插件可以使用相同的基础层502和可执行层504。因此,插件存储434可以仅存储基础层502和可执行层的一个示例层504。当对特定插件请求插件容器图像时,插件存储434可以检索公共基础层504和可执行层506以及插件特定插件有效载荷数据层506。[0089]当来自用户组414的用户请求安装插件时,应用编排服务404可以调用插件安装服务431来安装插件。插件安装服务431可以启动插件安装作业464。插件安装作业464可以是例如根据容器管理安排的作业,诸如一个或多个作业。插件安装服务431检索对插件部署图像462的引用并将插件部署图像462的引用提供给插件安装作业464。插件部署图像462包括可以由插件安装作业464启动的安装可执行文件或命令,如本文所述。[0090]插件安装作业464进一步检索适当的插件容器图像460和插件部署图像462。可以从插件存储434访问插件容器图像460。安装作业464可以开启共享容器文件系统456。共享容器文件系统456可以是从插件安装作业464内可访问的并且可以在插件安装作业464完成时被消除。在一些示例中,安装作业464可以启动pod或相关容器集合,包括插件容器458和插件部署容器454。pod的容器458、454可以彼此通信,并且可能能够访问共享容器文件系统456。[0091]插件安装作业464可以使用插件容器图像460来启动插件安装作业464内的插件容器458。插件安装作业464可以将插件容器458安装到共享容器文件系统456并提示副本可执行文件可以从插件容器图像460执行。副本可执行文件可以将插件有效载荷数据从插件容器458复制到共享容器文件系统456。[0092]插件安装作业464还可以从插件部署容器图像462来开启插件部署容器454。在启动插件部署容器454时,插件安装作业464发起插件部署容器454处的安装可执行文件。安装可执行文件可以是被配置为访问用于实现应用实例422的一个或多个容器。插件部署容器454(例如,安装可执行文件)可以访问实现应用实例422的容器或容器的pod并且将插件有效载荷数据从共享容器文件系统456移动到一个或多个实现应用实例422的容器,从而安装插件。在安装插件之后,插件安装作业464可以终止,导致容器458、454和共享容器文件系统456也终止。[0093]图4还包括开发环境452,该开发环境452包括插件生产系统453。插件生产系统453可以被一个或多个用户(例如,用户组414或另一用户组的)用于为应用生成插件。例如,当添加插件时,插件生产系统453可以将新插件的插件目录记录添加到插件目录432,并且可以将插件的插件容器图像提供到插件存储。[0094]图6-图8是示出可以在将插件安装到应用实例的布置(诸如图4的布置400)中实现的处理流600的一个示例的流程图。使用七行来说明处理流600。标记为“用户组”的一行包括可以由用户组414(包括其一个或多个用户)执行的操作。一个或多个用户组可以例如通过一个或多个用户计算设备来执行操作。标记为“应用编排”的行包括可以由应用编排服务执行的操作,例如前端服务412、应用运营商服务403和/或应用运营商服务405。标记为“插件安装服务”的行包括可以由插件安装服务431执行的操作。标记为“容器管理”的行包括可以由容器管理系统、诸如编排系统或类似系统执行的操作。在一些示例中,容器管理系统由应用编排服务404实现。称为“pi安装作业”的行包括可以由插件安装作业464执行的操作。称为“插件容器”的行包括可以由插件容器458执行的操作。称为“插件部署”的行包括可以由插件部署容器454执行的操作。[0095]在操作602,用户组414选择要安装到应用实例422的插件。例如,前端服务412可以查询插件目录432以确定与应用实例422兼容的可用插件。在操作604,应用编排服务404收集选定插件的参数。这可以包括例如检索选定插件的插件目录记录,包括例如插件存储434中插件的插件容器图像460的位置。在操作606,应用编排服务404调用插件安装服务431来安装插件。[0096]在操作608,插件安装服务431访问插件元数据以安装插件。例如,这可以包括插件的插件目录记录和/或插件兼容的应用的类型或版本。在操作610,插件安装服务431读取对插件部署容器图像462的引用。在操作612,插件安装服务431创建插件安装作业464。在操作614,容器管理系统调度插件安装作业464。[0097]移动到图7,在操作616,插件安装作业464启动插件容器458。启动插件容器458可以包括例如将插件容器458安装到共享容器文件系统456。在操作618,插件安装作业464从插件容器458运行副本可执行文件。在操作620,插件容器458(例如,其副本可执行文件)将插件有效载荷数据复制到共享容器文件系统456。在操作622,插件安装作业464确定插件有效载荷数据的复制是否成功。如果插件有效载荷数据的复制不成功,则在操作624,插件安装服务431向应用编排服务404报告失败,应用编排服务404在操作626向用户组报告失败。在操作628,处理流600可以终止。[0098]如果在操作622复制成功,则在操作630,插件安装作业464可以从插件部署容器图像462启动插件部署容器454。在操作632,插件安装作业464开启在插件部署容器处可执行的安装454。在操作634,插件部署容器454(例如,其安装可执行文件)从共享容器文件系统456提取插件有效载荷数据。在操作638,插件部署容器454(例如,其安装可执行文件)将由插件安装作业464实现的pod连接到应用实例422。[0099]在操作640,插件部署容器454(例如,其安装可执行文件)将插件安装到应用实例422。这可以包括例如将插件有效载荷数据从共享容器文件系统456复制到实现应用实例422的至少一个容器。考虑插件有效载荷数据包括一个或多个库的示例。插件部署容器454(例如,其安装可执行文件)可以将一个或多个库复制到实现应用实例422的一个或多个容器。考虑插件有效载荷数据包括可执行文件的示例。插件部署容器454(例如,其安装可执行文件)可以将可执行文件复制到实现应用实例422的一个或多个容器并且可以开启可执行文件的执行。考虑另一示例,其中插件有效载荷数据包括sql或其他数据库协议过程。插件部署容器454(例如,其可执行的安装程序)可以将协议过程复制到实现应用实例的一个或多个容器处的适当位置。在一些示例中,将插件安装到应用实例422包括重新启动应用实例。[0100]在操作642,插件安装作业464确定在操作640的安装是否成功。如果安装不成功,则在操作644,插件安装服务431向应用编排服务404报告失败。在操作648,应用编排服务404向用户组414报告失败,并且处理流600可以在操作650终止。[0101]如果安装成功,则在操作646,插件安装服务431可以向应用编排服务404报告成功。在操作652,应用编排服务404可以向用户组415报告应用实例422已准备好使用。在操作654,用户组414可以利用安装的插件来使用应用实例422,并且处理流600可以在操作656结束。[0102]在云环境中利用传统本地部署插件时遇到的另一个困难与兼容性有关。例如,虽然云本原应用的微服务可以根据定义的api进行互操作,但传统本地部署插件可能与应用实例的有限兼容性。一些插件可能仅与应用的单个版本或构建兼容。其他插件可能仅与应用程序的特定版本或版本范围兼容。[0103]在本地部署安装中,插件的有限版本兼容性可能不会导致重大问题。例如,实现本地部署计算系统的用户组知道在本地部署计算系统上执行的应用的版本,并且可以相应地选择插件。如果用户组决定升级或改变在本地部署计算系统上执行的应用的版本,它也可以对插件进行任何必要的升级。[0104]另一方面,在云环境中,应用实例的确切构建可能对使用它的用户组来说是模糊的。例如,云环境的提供者可能希望保持修改为用户组执行的应用实例的构建或版本的自由,例如,修补应用、修复安全问题等。然而,当云环境的提供者进行这样的改变时,它可能会破坏用户组已安装到应用实例的任何插件。[0105]这些和其他问题可以使用插件目录服务来解决。当要安装插件时,插件目录服务可以由插件安装服务或其他合适服务调用。插件目录服务可以确定要安装插件的应用实例的构建版本。使用插件目录中的插件目录记录,插件目录服务确定与应用实例的构建兼容的插件的集合。[0106]例如,当应用实例的构建版本要改变时,也可以使用插件目录服务。例如,当云环境的提供者要修改应用实例的构建版本时,它可以利用插件目录服务来确定哪些已安装的插件(如果有)与目标构建版本不兼容。如果任何插件与目标构建版本不兼容,则插件目录服务可以提供与目标构建版本兼容的替换插件的指示。提供者可以在目标构建版本的安装期间或与目标构建版本一起安装替换插件。在各种示例中,这可以以对用户组透明的方式发生。[0107]图9是示出用于管理在云环境902中运行的传统本地部署应用处的插件的布置900的一个示例的示图。云环境902执行一个或多个应用实例922、924、926、928和各种服务912、904,向一个或多个用户组914、916、918、920提供应用,诸如数据库管理系统应用。[0108]云环境902可以包括一个或多个计算设备,诸如服务器,用于执行应用实例922、924、926、928和服务912、904。在一些示例中,云环境902是不同地理位置的云服务提供者实现的多个云环境中的一个。例如,云环境902可以被实现在地理上靠近用户组914、916、918、920的一个或多个数据中心处,以最小化用户组914、916、918和920的网络延迟。类似于云环境902的其他云环境可以被实现在地理上靠近其他用户组的数据中心,以向这些用户组提供应用。[0109]用户组914、916、918、920指示在云环境902中使用应用实例922、924、926、928的一个或多个用户的组。在一些示例中,每个用户组914、916、918、920与利益相关者相关联。利益相关者可以是提供软件应用的实体的内部利益相关者,例如qa或测试组。利益相关者还可以包括购买软件应用访问权的客户实体。[0110]用户组914、916、918、920可以与一个或多个应用实例922、924、926、928相关联。例如,用户组914可以与应用实例922相关联。用户组916可以与应用实例924相关联。用户组918可以与应用实例926相关联。用户组920可以与应用实例928相关联,等等。在一些示例中,用户组914、916、918、920可以与应用的多于一个实例相关联。例如,用户组914、916、918、920可以执行用于生产实现的应用的实例以及用于测试或评估使用的应用的另一或多个实例。[0111]云环境902还实现持久性930、933、935、936。例如,当应用实例922、924、926、928实现数据库管理系统时,持久性930、933、935、936可以存储由数据库管理系统应用管理的数据。持久性930、933、935、936可以使用任何合适的数据存储设备来实现,例如一个或多个磁盘、一个或多个固态驱动器、一个或多个随机存取存储器等。在一些示例中,例如,在云环境902处实现的软件应用是用于内存数据库的数据库管理系统应用,例如可从德国瓦尔多夫的sapse获得的和系统。[0112]持久性930、933、935、936可以与用户组相关联。在图9的示例中,持久性930与用户组914相关联。持久性933与用户组916相关联。持久性935与用户组918相关联;并且持久性936与用户组920相关联,等等。在一些示例中,单个用户组914、916、918、920可以与多于一个的持久性相关联。例如,用户组914、916、918、920可以为软件应用的生产实现维护一个持久性,为软件应用的测试或评估实现维护另一持久性。[0113]由图9的云环境902提供的软件应用可以是为由云环境902提供而转换的传统本地部署应用。例如,应用可以作为各种实例922、924、926、928执行。每个应用实例可以包括一个或多个容器,包括可执行文件、库、和/或用于提供软件应用的其他组件。在一些示例中,实例922、924、926、928可以与相应的持久性930、933、935、936相关联,如图所示。在一些示例中,用于执行各种应用实例922、924、926、928的容器被布置为集群。[0114]云环境902还执行用于管理应用实例922、924、926、928的执行的一个或多个服务904、912。服务904、912可以在一个或多个容器中在云环境902处执行。前端服务912可以与各种用户组914、916、918、920接口。例如,前端服务912可以向来自各种用户组914、916、918、920的用户提供用户界面,以允许用户访问正在执行的应用实例922、924、926、928和/或启动新的应用实例。在一些示例中,前端服务912向来自各种用户组914、916、918、920的用户提供关于用户组自己的执行实例922、924、926、928可以升级到的可用目标版本的数据,如本文所述。[0115]应用编排服务904可以管理应用实例922、924、926、928的执行。应用编排服务904可以实现为单个服务和/或一个或多个子服务的集合。在图9的示例中,应用编排服务904包括应用运营商服务905和应用更新服务903。[0116]应用运营商服务905可以管理实现应用实例922、924、926、928的一个或多个容器的执行。例如,应用运营商服务905可以开始执行实现应用实例922、924、926、928的一个或多个容器,例如,来自与一个或多个容器相关联的一个或多个容器图像。此外,如果与应用实例922、924、926、928相关联的一个或多个容器崩溃,则应用运营商服务905可以上旋一个或多个崩溃容器的替代品。应用更新器服务903可以管理应用版本。[0117]在图9的示例中,版本元数据906包括产品版本图908。产品版本图908包括描述应用的可用版本的数据。在一些示例中,描述版本的数据可以包括描述版本的成熟度级别的发布周期数据。例如,发布周期数据可以指示版本已经经历的测试和开发级别。发布周期数据还可以指示发布新版本的频率。例如,版本可以代表每月发布、双周发布或任何其他合适的发布期。产品版本图908还可以包括一个或多个版本的跟踪数据。跟踪数据可以指示版本的状态或升级轨迹,并且可以与普遍可用的或生产版本相关联。例如,最近发布的季度版本可能与“最新”轨迹相关联。一个或多个先前发布的版本可以与指示该版本不是最新但仍被维护的“维护”轨迹相关联。[0118]下面的example2给出了示例产品版本图908:[0119]example2:[0120][0121]示例2示出名为application1的应用的示例产品版本图908。示例2中所示的示例产品版本图908可以表示产品版本图的整体和/或可以是从具有多个不同应用的产品版本图记录的产品版本地部署图检索的application1的版本图记录。示例产品版本图908指示application1经历分阶段推出。示例产品版本图908还指示两个示例版本,称为app1cloudedition2019.32和app1cloudedition2019.34。在example2中,每个版本都由唯一标识符、发布周期、跟踪、容器图像位置、容器图像名称和构建标识符进一步描述。[0122]为每个版本指示的发布周期描述了该版本的成熟度级别。例如,版本app1cloudedition2019.32被指示为“通常季度可用”版本,而版本app1cloudedition2019.34被指示为“通常双周可用”版本。“通常季度可用”成熟度级别可以指示应用的发布周期,其中每个季度包括新的通常可用版本。“通常双周可用”成熟度级别可以指示应用的发布周期,其中每隔一周包括新的通常可用版本。其他示例版本可能是“评估”或“早期采用”版本。“评估”或“早期采用”版本可能处于适合希望接收应用的早期或预发布版本(例如,用于评估或测试)的用户组914、916、918、920的成熟度级别。[0123]版本元数据906还可以包括升级策略图910。升级策略图910描述从应用的各种版本允许的升级。例如,升级策略图910可以包括升级策略记录,其中每个升级策略记录指示应用的源版本以及源版本可以升级到的一个或多个目标版本(如果有)。[0124]在一些示例中,应用编排服务904(例如,通过应用更新服务903和/或应用运营商服务905)读取版本元数据906并准备应用实例922、924、926、928以进行升级。例如,应用编排服务904(例如,通过应用运营商服务905)可以利用产品版本图908和升级策略图910来确定各种应用实例922、924、926、928的可用升级。这可以包括确定应用实例922、924、926、928的版本和/或成熟度级别和升级轨迹(如果有),然后从升级策略图910确定从该成熟度级别和升级轨迹可用的任何升级(如果有)。[0125]应用编排服务904(例如,应用运营商服务905)然后可以查阅产品版本图908以确定与每个可用升级的目标版本相关联的链接容器图像和版本号。这些可被写入应用编排服务904(例如,其应用更新服务903)可访问的位置,应用编排服务904可以利用指示的目标版本来响应来自用户组914、916、918、920的升级请求。当接收到升级请求时,应用编排服务904(例如,应用更新服务903)可以上旋所请求目标版本的新版本。[0126]在一些示例中,代替预先弄清来自特定应用实例922、924、926、928的目标版本,应用编排服务(例如,应用运营商服务905)可以在接收到来自用户组914、916、918、920的升级请求时查阅版本元数据906以确定可用升级和目标版本。[0127]在一些示例中,应用编排服务904(例如,通过应用更新服务903和/或应用运营商服务905)在发起应用实例922、924、926、928时读取版本元数据906。例如,当应用在创建实例时,可以用版本记录对其进行注释,版本记录可以用来自产品版本图908和/或升级策略图910的数据构建。在一些示例中,注释应用实例922、924、926、928的数据可以被存储在使用云环境902的容器编排系统实现的自定义资源中,诸如容器编排系统。下面的example3显示了应用实例922、924、926、928的示例版本记录:[0128]example3:[0129][0130]图9的布置900还包括部署服务938。部署服务938可以在一个或多个计算设备上执行,诸如由实现云环境902的云服务提供者实现的计算设备。在一些示例中,部署服务938在与实现环境902相同的计算设备处执行。部署服务938可以被编程为发起云环境902,例如,作为ci/cd流水线的一部分。在一些示例中,部署服务938还可用于更新元数据906,例如,如本文所述。例如,ci/cd流水线可以被用于为应用实例922、924、926、928生成新版本、补丁等。当部署服务938部署新版本、补丁、升级等时,它也可以对元数据906进行适当的升级。[0131]云环境902还可以包括插件安装服务931、插件目录服务936、插件目录932和插件存储934。插件安装服务931可以与应用编排服务904和/或前端服务912通信以安装、升级和/或删除应用实例922、924、926、928的插件。插件安装服务931、应用编排服务904和/或前端服务可以与插件目录932通信,例如,通过插件目录服务936。插件目录932是或包括在云环境902处的持久性,其存储描述应用实例922的一个或多个插件的插件目录记录。在一些示例中,插件存储934是或包括容器注册表,其包括一个或多个插件容器图像,诸如图4中所示的示例插件容器图像460。[0132]插件目录932可以包括描述各种可用插件的插件目录记录。如本文所述,插件目录记录可以包括关于插件的各种信息,包括例如插件的名称、插件的描述、与插件相关联的应用、插件的版本以及指示用于在插件存储934处实现插件的一个或多个文件的位置。在一些示例中,插件目录记录还可以包括插件与其兼容的一个或多个构建版本的指示。下面的example4给出了示例插件的示例插件目录记录:[0133]example4:[0134][0135]在示例4中,示例插件被称为“plugin-a”,并被指示为共享库。example4的插件目录记录指示插件与application1相关联。示例插件目录记录还包括与插件兼容的application1的构建列表。[0136]图10和图11是示出用于考虑版本兼容性将插件安装到应用实例的处理流1000的一个示例的流程图。使用五行来说明处理流1000。标记为“用户组”的行包括可由用户组914、916、918、920(包括其一个或多个用户)执行的操作。一个或多个用户组可以例如通过一个或多个用户计算设备来执行操作。标记为“前端服务”的行包括可以由前端服务912执行的操作。标记为“应用编排”的行包括可以由应用编排服务904执行的操作。标记为“插件安装”的行包括可以由插件安装服务931执行的操作。标记为“插件目录”的行可以包括由插件目录服务936执行的操作。[0137]在操作1002,用户组打开应用仪表板。例如,应用仪表板可以是由前端服务912提供的用户接口的组件。在操作1004,前端服务912向插件目录服务936查询可用插件。插件目录服务936可以在操作1006构建可用插件的列表并将该列表返回给前端服务912。为了确定可用插件的列表,插件目录服务936可以查询插件目录932以确定与插件相关联的插件目录记录,该插件可以被安装到为用户组执行的应用实例922、924、926、928。在操作1008,前端服务912可以例如通过应用仪表板向用户组列出可用插件。[0138]在操作1010,用户组选择要安装的插件。在操作1012,用户组可以在应用仪表板处选择更新按钮或其他ui元素以开启选定插件的安装。作为响应,在操作1014,前端服务可以为要安装的插件收集插件参数。移动到图11,在操作1016,应用编排服务904请求插件安装服务931开始安装插件。[0139]在操作1018,插件安装服务931查询插件目录服务936以提供与应用实例的构建版本兼容的选定插件的一个或多个版本。在操作1010,插件目录服务936找到与应用实例的构建版本兼容的选定插件的一个或多个版本。例如,插件目录服务936可以访问应用实例的构建版本。例如,可以从应用实例的版本记录元数据和/或版本元数据906访问构建版本。[0140]插件目录服务936使用应用实例的构建版本来识别插件的兼容版本。例如,插件目录服务936可以识别指示插件版本的插件目录记录,该插件目录记录包括指示应用实例的构建版本的产品版本选择器行。[0141]在一些示例中,插件目录服务936可以使用相等选择器和/或匹配表达式选择器来执行搜索。使用相等选择器的搜索可能会返回具有与应用实例的构建版本完全匹配的兼容构建版本的插件的插件目录记录。使用匹配表达式选择器的搜索可以根据指示的表达式返回具有与应用实例的构建版本匹配的兼容构建版本的插件的插件目录记录。表达式可以基于各种因素,例如构建版本或语义版本。基于构建版本的示例表达式可能会返回一系列与构建版本兼容的插件,这些构建版本大于、大于等于、小于或小于等于应用实例的构建版本。基于语义版本的示例表达式可能类似,但可能会返回应用实例的一系列语义版本,诸如应用实例是主要版本、次要版本、补丁等。[0142]使用匹配表达式和/或范围或构建版本的搜索可能适用于不同类型的插件。例如,某些插件被构建为与对应应用的单个构建兼容。例如,一些插件是对应用的共享库构建的,因此应该与共享库具有二进制兼容性。这样的插件可能仅适用于具有与插件保持二进制兼容性的共享库的应用版本。因此,在安装此类插件时,可以使用匹配表达式来选择适合应用实例版本的插件版本。[0143]考虑另一种示例类型的插件,它使用软件开发工具包(sdk)或类似工具作为插件和应用实例之间的抽象层。对于这种类型的插件,插件和应用实例之间的二进制兼容性可能不是必需的。插件和应用实例的版本之间的兼容性可以基于通用sdk或应用编程接口(api)的使用。因此,搜索插件的一系列语义版本可能是合适的。[0144]在操作1022,插件目录服务936将与应用实例兼容的一个或多个插件版本的插件元数据,诸如插件目录记录,返回给插件安装服务931。插件安装服务936使用返回的元数据来访问在操作1024引用插件(例如,其插件容器图像)并且在操作1026安装插件。插件安装服务936可以以任何合适的方式安装插件,诸如本文描述的那些。在安装完成之后,前端服务912在操作1028向用户组报告应用实例和插件已准备好使用。在操作1030,用户组利用现在安装的插件来使用应用实例。[0145]图12和图13是示出用于考虑插件版本兼容性来升级应用实例的处理流1200的一个示例的流程图。使用五行来说明处理流1000。标记为“用户组”的行包括可以由用户组914、916、918、920(包括其一个或多个用户)执行的操作。一个或多个用户组可以例如通过一个或多个用户计算设备来执行操作。标记为“前端服务”的行包括可以由前端服务912执行的操作。标记为“应用编排”的行包括可以由应用编排服务904执行的操作。标记为“插件安装”的行包括可以由插件安装服务931执行的操作。标记为“插件目录”的行可以包括由插件目录服务936执行的操作。[0146]在操作1202,用户组打开应用仪表板。例如,应用仪表板可以是由前端服务912提供的用户接口的组件。在操作1204,前端服务912显示用户组可用应用的目标版本。例如,前端服务912可以直接或间接访问版本元数据906以确定用户组可用的目标版本。在操作1206,用户组选择应用的目标版本。目标版本可以用于升级到现有应用实例922、924、926、928。[0147]在操作1208,用户组选择一个或多个插件以包括在应用的目标版本中。选定插件例如基于安装在当前执行的应用实例922、924、926、928处的插件和/或基于插件目录数据来选择,如关于参考图10和图11所描述的。在操作1210,用户组在仪表板上选择更新按钮或特征以开始安装应用的目标版本。[0148]在操作1212,前端服务912收集升级参数以发起应用的目标版本。移动到图13,在操作1216,应用编排服务904可以将应用实例升级到目标版本。例如,这可以涉及例如检索由目标版本的版本元数据906引用的一个或多个容器图像,并启动相应的容器。[0149]在升级到目标应用实例之前、期间或之后,应用编排服务904可以在操作1214请求插件安装服务931安装由用户组指示的插件。插件安装服务931可以在操作1218查询插件目录服务以提供兼容的插件版本。在操作1220,插件安装服务931可以为目标应用版本找到兼容的插件版本。这可以例如如本文关于操作1020所描述的那样被执行。在操作1222,插件目录服务936可以将兼容插件版本的元数据返回给插件安装服务931。在操作1224,插件安装服务可以从插件存储934检索插件(例如,插件容器图像)。插件安装服务931可以在操作1226安装插件。可以安装插件,例如,如本文所述。在安装完成之后,前端服务912在操作1228向用户组报告应用实例和插件的目标版本已准备好使用。在操作1230,用户组利用现在安装的插件来使用应用实例。[0150]鉴于上述公开内容,下文阐述了各种示例。应当注意,在本技术的公开内容中应当考虑单独或组合的示例的一个或多个特征。[0151]示例:[0152]示例1是一种用于将插件安装到云实现的数据库管理应用的系统,所述系统包括:至少一个处理器,被编程以执行操作,包括:在云环境开启共享容器文件系统;访问插件容器图像,插件容器图像包括向数据库管理应用描述第一插件的插件有效载荷数据和副本可执行文件;在云环境启动插件容器,插件容器至少部分基于插件容器图像;将插件容器挂载到共享容器文件系统;执行副本可执行文件以将插件有效载荷数据复制到共享容器文件系统;以及将第一插件安装到在云环境中运行的数据库管理应用实例,该安装至少部分地基于共享容器文件系统处的插件有效载荷数据。[0153]在示例2中,示例1的主题可选地包括在云环境中启动插件部署容器;将插件部署容器挂载到共享容器文件系统;以及通过插件部署容器从共享容器文件系统处的插件有效载荷数据提取插件存档数据,将第一插件安装到数据库管理应用实例至少部分地基于插件存档数据。[0154]在示例3中,示例2的主题可选地包括将插件部署容器连接到数据库管理应用实例。[0155]在示例4中,示例1-3中的任何一个或多个的主题可选地包括访问插件容器图像包括从容器图像注册表访问插件容器图像。[0156]在示例5中,示例1-4中的任何一个或多个的主题可选地包括副本可执行文件是静态链接的。[0157]在示例6中,示例1-5中的任何一个或多个的主题可选地包括插件容器图像还包括静态链接的安全可执行文件,操作还包括执行安全可执行文件以对插件有效载荷数据执行至少一次安全检查。[0158]在示例7中,示例1-6中的任何一个或多个的主题可选地包括插件容器图像还包括静态链接的扫描可执行文件,操作还包括执行扫描可执行文件以执行插件有效载荷数据的至少一次扫描。[0159]在示例8中,示例1-7中的任何一个或多个的主题可选地包括通过在云环境中运行的前端服务接收来自与第一用户组相关联的第一用户的插件请求,数据库管理应用实例与第一用户组相关联;通过前端服务确定数据库管理应用实例的版本;以及通过前端服务访问插件目录以确定与数据库管理应用兼容的至少一个插件,所述至少一个插件包括第一插件。[0160]示例9是一种用于将插件安装到云实现的数据库管理应用的方法,所述方法包括:在云环境开启共享容器文件系统;访问插件容器图像,插件容器图像包括向数据库管理应用描述第一插件的插件有效载荷数据和副本可执行文件;在云环境启动插件容器,插件容器至少部分基于插件容器图像;将插件容器挂载到共享容器文件系统;执行副本可执行文件以将插件有效载荷数据复制到共享容器文件系统;以及将第一插件安装到在云环境中运行的数据库管理应用实例,安装至少部分地基于共享容器文件系统处的插件有效载荷数据。[0161]在示例10中,示例9的主题可选地包括在云环境启动插件部署容器;将插件部署容器挂载到共享容器文件系统;以及通过插件部署容器从共享容器文件系统处的插件有效载荷数据提取插件存档数据,将第一插件安装到数据库管理应用实例至少部分地基于插件存档数据。[0162]在示例11中,示例10的主题可选地包括将插件部署容器连接到数据库管理应用实例。[0163]在示例12中,示例9-11中的任何一个或多个的主题可选地包括访问插件容器图像包括从容器图像注册表访问插件容器图像。[0164]在示例13中,示例9-12中的任何一个或多个的主题可选地包括副本可执行文件是静态链接的。[0165]在示例14中,示例9-13中的任何一个或多个的主题可选地包括插件容器图像还包括静态链接的安全可执行文件,所述方法还包括执行安全可执行文件以对插件有效载荷数据执行至少一次安全检查。[0166]在示例15中,示例9-14中的任何一个或多个的主题可选地包括插件容器图像还包括静态链接的扫描可执行文件,所述方法还包括执行扫描可执行文件以对插件有效载荷数据执行至少一次扫描。[0167]在示例16中,示例9-15中的任何一个或多个的主题可选地包括通过在云环境运行的前端服务接收来自与第一用户组相关联的第一用户的插件请求,数据库管理应用实例与第一用户组相关联;通过前端服务确定数据库管理应用实例的版本;以及通过前端服务访问插件目录以确定与数据库管理应用兼容的至少一个插件,所述至少一个插件包括第一插件。[0168]示例17是一种用于将插件安装到云实现的数据库管理应用的系统,所述系统包括:至少一个处理器,被编程以执行操作,包括:在云环境开启共享容器文件系统;访问插件容器图像,插件容器图像包括向数据库管理应用描述第一插件的插件有效载荷数据和副本可执行文件;在云环境启动插件容器,插件容器至少部分基于插件容器图像;将插件容器挂载到共享容器文件系统;执行副本可执行文件以将插件有效载荷数据复制到共享容器文件系统;以及将第一插件安装到在云环境中执行的数据库管理应用实例,安装至少部分地基于共享容器文件系统处的插件有效载荷数据。[0169]在示例18中,示例17的主题可选地包括在云环境启动插件部署容器;将插件部署容器挂载到共享容器文件系统;以及通过插件部署容器从共享容器文件系统处的插件有效载荷数据提取插件存档数据,至少部分地基于插件存档数据将第一插件安装到数据库管理应用实例。[0170]在示例19中,示例18的主题可选地包括将插件部署容器连接到数据库管理应用实例。[0171]在示例20中,示例17-19中的任何一个或多个的主题可选地包括访问插件容器图像包括从容器图像注册表访问插件容器图像。[0172]图14是示出用于计算设备的软件架构1402的一个示例的框图1400。架构1402可以与各种硬件架构结合使用,例如,如本文所述。图14仅是软件架构的非限制性示例,并且可以实现许多其他架构以促进本文描述的功能。代表性硬件层1404被图示并且可以代表例如任何上面提到的计算设备。在一些示例中,硬件层1404可以根据图14的计算机系统的架构来实现。[0173]代表性硬件层1404包括具有相关联的可执行指令1408的一个或多个处理单元1406。可执行指令1408表示软件架构1402的可执行指令,包括本文描述的方法、模块、子系统和组件等的实现,并且还可以包括存储器和/或存储模块1410,它们也具有可执行指令1408。硬件层1404还可以包括由表示硬件层1402的任何其他硬件的其他硬件1412指示的其他硬件,例如示出为架构1402的一部分的其他硬件。[0174]在图14的示例架构中,可以将软件架构1402概念化为层的栈,其中每一层提供特定功能。例如,软件架构1402可以包括诸如操作系统1414、库1416、框架/中间件1418、应用1420和表示层1444的层。在操作上,应用1420和/或层内的其他组件可以通过软件堆栈调用api调用1424并访问响应于api调用1424被示为消息1426的响应、返回值等。所示的层在本质上具有代表性,并非所有软件架构都具有所有层。例如,一些移动或专用操作系统可能不提供框架/中间件层1418,而其他可能提供这样的层。其他软件架构可能包括额外的或不同的层。[0175]操作系统1414可以管理硬件资源并提供公共服务。操作系统1414可以包括例如内核1428、服务1430和驱动1432。内核1428可以充当硬件和其他软件层之间的抽象层。例如,内核1428可以负责存储器管理、处理器管理(例如,调度)、组件管理、网络、安全设置等。服务1430可以为其他软件层提供其他公共服务。在一些示例中,服务1430包括中断服务。中断服务可以检测到中断的接收,并且作为响应,使架构1402暂停其当前处理并在访问中断时执行中断服务例程(isr)。[0176]驱动1432可以负责控制底层硬件或与底层硬件接口。例如,驱动1432可以包括显示驱动、相机驱动、驱动、闪存驱动、串行通信驱动(例如,通用串行总线(usb)驱动)、驱动、nfc驱动、音频驱动、电源管理驱动等,取决于硬件配置。[0177]库1416可以提供可以由应用1420和/或其他组件和/或层使用的公共架构。库1416通常提供允许其他软件模块以比直接与底层操作系统1414功能(例如,内核1428、服务1430和/或驱动器1432)接口更容易的方式执行任务的功能。库1416可以包括系统1434库(例如,c标准库),其可以提供诸如存储器分配函数、字符串操作函数、数学函数等的函数。此外,库1416可以包括api库1436,诸如媒体库(例如,支持各种媒体格式的呈现和操作的库,诸如mpeg4、h.264、mp3、aac、amr、jpg、png)、图形库(例如,可用于在显示器上以图形内容呈现2d和3d的opengl框架)、数据库库(例如,可以提供各种关系数据库功能的sqlite)、web库(例如,可以提供web浏览功能)等。库1416还可以包括多种其他库1438以向应用1420和其他软件组件/模块提供许多其他api。[0178]框架1418(有时也称为中间件)可以提供可以由应用1420和/或其他软件组件/模块使用的更高级别的公共架构。例如,框架1418可以提供各种图形用户界面(gui)功能、高级资源管理、高级定位服务等等。框架1418可以提供可以由应用1420和/或其他软件组件/模块使用的广泛的其他api,其中一些可以特定于特定操作系统或平台。[0179]应用1420包括内置应用1440和/或第三方应用1442。代表性内置应用1440的示例可以包括但不限于联系人应用、浏览器应用、图书阅读器应用、位置应用、媒体应用、消息应用和/或游戏应用。第三方应用1442可以包括任何内置应用1440以及各种各样的其他应用。在特定示例中,第三方应用1442(例如,由特定平台的供应商以外的实体使用androidtm或iostm软件开发工具包(sdk)开发的应用)可以是在移动操作系统上运行的移动软件。移动操作系统,诸如iostm、androidtm、phone或其他移动计算设备。在该示例中,第三方应用1442可以调用由诸如操作系统1414的移动操作系统提供的api调用1424以促进本文描述的功能。[0180]应用1420可以利用内置操作系统功能(例如,内核1428、服务1430和/或驱动1432)、库(例如,系统1434、api1436和其他库1438)和框架/中间件1418来创建用户与系统用户交互的接口。可选地或另外地,在一些系统中,与用户的交互可以通过表示层发生,诸如表示层1444。在这些系统中,应用/模块“逻辑”可以和与用户交互的应用/模块的各方面分离。[0181]一些软件架构使用虚拟机。在图14的示例中,这由虚拟机1448示出。虚拟机创建软件环境,其中应用/模块可以像在硬件计算设备上执行一样执行。虚拟机由主机操作系统(操作系统1414)托管,并且通常(但不总是)具有虚拟机监视器1446,其管理虚拟机的操作以及与主机操作系统(即,操作系统1414)的接口。软件架构在虚拟机内执行诸如操作系统1450、库1452、框架/中间件1454、应用1456和/或表示层1458。在虚拟机1448内执行的软件架构的这些层可以与之前描述的对应层相同或可能不同。(saas)的相关操作的性能。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作可以通过网络(例如,互联网)和通过一个或多个适当的接口(例如,api)来访问。[0190]电子装置和系统[0191]示例实施例可以在数字电子电路中,或在计算机硬件、固件或软件中,或在它们的组合中实现。示例实施例可以使用计算机程序产品来实现,例如,有形地体现在信息载体中的计算机程序,例如,在机器可读介质中用于由数据处理装置执行或控制数据处理装置的操作,例如可编程的处理器、计算机或多个计算机。[0192]计算机程序可以以任何形式的编程语言编写,包括编译或解释语言,并且可以以任何形式部署,包括作为独立程序或模块、子例程或适用于计算环境的其他单元。计算机程序可以部署为在一个计算机上或在一个站点或分布在多个站点并通过通信网络互连的多个计算机上执行。[0193]在示例实施例中,操作可以由一个或多个可编程处理器执行,该处理器执行计算机程序以通过对输入数据进行操作并生成输出来执行功能。方法操作也可以由专用逻辑电路执行,并且示例实施例的装置可以实现为专用逻辑电路,例如fpga或asic。[0194]计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离并且通常通过通信网络进行交互。客户端和服务器的关系是通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序而产生的。在部署可编程计算系统的实施例中,将理解硬件和软件架构都值得考虑。具体地,将理解,选择是在永久配置的硬件(例如,asic)、在临时配置的硬件中(例如,软件和可编程处理器的组合)还是在永久配置和临时配置硬件的组合中实现某些功能可以是设计选择。在各种示例实施例中,下面列出了可以部署的硬件(例如,机器)和软件架构。[0195]示例机器架构和机器可读介质[0196]图15是计算机系统1500的示例形式的机器的框图,其中可以执行指令1524以使机器执行本文讨论的任何一个或多个方法。在替代实施例中,机器作为独立设备操作或可以连接(例如,联网)到其他机器。在网络部署中,机器可以在服务器-客户端网络环境中以服务器或客户端机器的身份运行,或者在对等(或分布式)网络环境中作为对等机器运行。机器可以是个人计算机(pc)、平板电脑、机顶盒(stb)、个人数字助理(pda)、蜂窝电话、网络设备、网络路由器、交换机或网桥,或任何能够执行指令(顺序或其他)的机器,这些指令指定了该机器要采取的行动。此外,虽然仅示出了单个机器,但术语“机器”也应理解为包括单独或联合执行一组(或多组)指令以执行本文讨论的任何一个或多个方法的机器的任何集合。[0197]示例计算机系统1500包括处理器1502(例如,中央处理单元(cpu)、图形处理单元(gpu)或两者)、主存储器1504和静态存储器1506,它们通过总线1508彼此通信。计算机系统1500还可以包括视频显示单元1510(例如,液晶显示器(lcd)或阴极射线管(crt))。计算机系统1500还包括字母数字输入设备1512(例如,键盘或触敏显示屏)、用户界面(ui)导航(或光标控制)设备1514(例如,鼠标)、盘驱动单元1516、信号生成设备1518(例如,扬声器)和网络接口设备1520。[0198]机器可读介质[0199]盘驱动单元1516包括机器可读介质1522,其上存储了一组或多组数据结构和指令1524(例如,软件),这些数据结构和指令1524(例如,软件)由本文描述的任何一个或多个方法或功能体现或使用。指令1524还可以在由计算机系统1500执行期间完全或至少部分地驻留在主存储器1504内和/或处理器1502内,主存储器1504和处理器1502也构成机器可读介质1522[0200]虽然机器可读介质1522在示例实施例中被示为单个介质,但术语“机器可读介质”可以包括存储一个或多个指令1524或数据结构的单个介质或多个介质(例如,集中式或分布式数据库,和/或相关联的缓存和服务器)。术语“机器可读介质”还应理解为包括能够存储、编码或携带指令1524以供机器执行并且使机器执行本公开的任何一个或多个方法的任何有形介质,或能够存储、编码或携带由此类指令1524使用或与此类指令相关联的数据结构的任何有形介质。因此,术语“机器可读介质”应被理解为包括但不限于固态存储器,以及光学和磁性介质。机器可读介质1522的具体示例包括非易失性存储器,包括例如半导体存储器设备,例如可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)和闪存设备;磁盘,诸如内部硬盘和可移动磁盘;磁光盘;以及cd-rom和dvd-rom磁盘。[0201]传输介质[0202]指令1524可以进一步使用传输介质在通信网络1526上发送或接收。指令1524可以使用网络接口设备1520和许多众所周知的传输协议(例如,http)中的任何一种来发送。通信网络的示例包括局域网(lan)、广域网(wan)、互联网、移动电话网络、普通老式电话(pots)网络和无线数据网络(例如,wifi和wimax网络)。术语“传输介质”应理解为包括能够存储、编码或携带指令1524以供机器执行的任何无形介质,并且包括数字或模拟通信信号或其他无形介质以促进此类软件的通信。[0203]尽管已经参照特定示例实施例描述了实施例,但是在不脱离本公开的更广泛的精神和范围的情况下,显然可以对这些实施例进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的。形成其一部分的附图通过说明而非限制的方式示出了可以实践本主题的特定实施例。对所示实施例进行了足够详细的描述,以使本领域技术人员能够实践本文所公开的教导。可以利用其他实施例并从中派生出其他实施例,从而可以在不脱离本公开的范围的情况下进行结构和逻辑替换和改变。因此,该详细描述不应被理解为限制性意义,并且各种实施例的范围仅由所附权利要求以及这些权利要求所享有的全部等同物范围来定义。[0204]本发明主题的这些实施例可在本文中单独和/或共同地被称为“发明”,仅仅是为了方便,并且如果事实上公开了多个发明或发明构思,则无意自愿将本技术的范围限制为任何单个发明或发明构思。因此,尽管本文已经说明和描述了具体实施例,但是应当理解,任何被计算为实现相同目的的布置都可以代替所示的具体实施例。本公开旨在涵盖各种实施例的任何和所有修改或变化。上述实施例的组合,以及本文未具体描述的其他实施例,对于本领域技术人员在阅读以上描述后将是显而易见的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1