旧式系统上的无应用程序中断的软件更新的制作方法

文档序号:32101101发布日期:2022-11-09 02:41阅读:77来源:国知局
旧式系统上的无应用程序中断的软件更新的制作方法

1.本技术的发明构思涉及软件环境的更新,具体地,提供了在不中断活动应用程序的情况下更新旧式系统上的软件方法和装置。


背景技术:

2.软件环境可以具有长使用寿命,在此期间可能发生很多版本更新和特征增强。一些软件系统架构可能需要重启才能安装需要与现有软件集成到一起的某些特征更新或新软件。常规技术一直用完全重启来处理此类情形,从而导致在执行全面重启的同时系统不可用。很多大规模软件环境可能要用几十分钟乃至几小时来完成完全重启,即使对可用性(正常运行时间)存在不高的服务水平要求,也无法做到。相应地,仍然存在对技术进行改进的需求,从而在不中断操作的情况下实施软件更新。


技术实现要素:

3.总之,详细描述涉及各种创新技术,以实现在不中断执行当中的应用程序的情况下激活新软件。在示例中,可以将新软件脚本存储到服务器上。该服务器上的辅助组件的重启可以用于在不中断正在该服务器上执行的应用程序的情况下激活该脚本。可以应用所公开的技术保持该服务器的复制状况的远程日志。一旦该服务器发生了故障,该远程日志可以受到访问,以验证故障时的复制,并且自动执行故障转移。
4.在某些示例中,所公开的技术可以被实施为一种方法,在该方法中,脚本被存储到具有一个或多个数据库应用程序的数据库环境中。通过重启该数据库环境中的预先存在的辅助组件而在该数据库环境中激活该脚本,其中,(多个)数据库应用程序在整个的激活期间保持可操作。
5.在一些示例中,辅助组件可以是域名服务器。响应于重启,激活可以包括执行来自该辅助组件的钩子,从而对该脚本初始化并且使该脚本起作用。该脚本是通过执行该脚本内的一个或多个初始化函数而被初始化的。该脚本能够实现在截然不同的第一服务器计算机和第二服务器计算机上保持该数据库环境的复制状况。复制状况可以连同最新数据库事务的时间戳一起被存储到日志。
6.在其他示例中,数据库环境可以驻留在第一服务器计算机上,并且该方法还可以包括第二服务器计算机处的下述操作:在第一服务器计算机发生故障时,可以接收到对该数据库环境的复制状况的外部请求,并且可以响应于该外部请求提供该数据库环境的复制状况。在第一服务器发生故障时,在复制状态指示该数据库环境的复制生效的情况下,对该数据库环境的主控制可以被转移到非第一服务器计算机的副本服务器计算机。
7.在额外示例中,受到激活的该脚本可以通过该数据库环境的主机代理处理来自外部编排器的一个或多个请求。该数据库环境可以包括存储器内数据库。重启能够在不到一分钟的时间内执行。
8.在某些示例中,所公开的技术可以被实施成存储着可在一个或多个硬件处理器上
执行的指令的计算机可读介质,其中,指令的执行使(多个)硬件处理器执行下述操作。脚本被传输至包括一个或多个数据库应用程序的数据库实例,并且该数据库实例中的预先存在的辅助组件的重启被触发,以激活该脚本,其中,在重启和激活脚本的过程中数据库应用程序保持可操作。
9.在一些示例中,该数据库环境可以驻留在第一服务器上,并且该脚本可以是在第一服务器上激活的第一脚本,并且操作还可以包括在第二服务器上安装第二脚本。第一脚本可以被配置为保存该数据库实例的状态指示符,并且第二脚本可以被配置为检索该数据库实例的状态指示符。该状态指示符可以传达该数据库实例的复制是启用的还是禁用的。在其他示例中,第一脚本和第二脚本还可以被存储到计算机可读介质上。
10.在某些示例中,所公开的技术可以被体现到具有多个计算系统的系统当中,计算系统的每者具有一个或多个硬件处理器和与之耦接的存储器。这些计算系统包括主数据库服务器计算机、副本服务器计算机和主机服务器计算机。该系统还包括至少在主数据库服务器计算机和副本数据库服务器计算机上分布的数据库实例,其中,由主数据库服务器计算机提供数据库查询服务。该系统具有第一状态,其中,在主数据库服务器计算机发生故障时不保证主数据库服务器计算机的复制状况被知晓,以及第二状态,其中,在主数据库服务器计算机发生故障时保证主数据库服务器计算机的复制状况被知晓。该系统被配置为在发生下述情况时从第一状态转换至第二状态:(i)主数据库服务器计算机和主机服务器计算机的预先存在的辅助组件的重启,其引起主数据库服务器计算机上的第一灾难恢复支持程序的激活;以及(ii)主机服务器计算机上的第二灾难恢复支持程序的激活。该数据库实例在从第一状态转换到第二状态的整个期间保持可操作。
11.在一些示例中,第一灾难恢复支持程序包括被配置为对主数据库服务器计算机的复制状况进行日志记录的第一脚本,第二灾难恢复支持程序包括被配置为检索主数据库服务器计算机的复制状况的第二脚本,并且该系统进一步包括主数据库服务器计算机上的守护进程,其被配置为监测在主数据库服务器计算机上是否已经发生了故障。可以在截然不同的第一存储位置和第二存储位置对主数据库服务器计算机的复制状况进行日志记录,第一存储位置位于主数据库服务器计算机上,并且在第一存储位置不可访问的条件下第二存储位置对于第二脚本是可访问的。该守护进程可以被配置为将复制状况从第一存储位置拷贝至第二存储位置。该系统可以被配置为在当发生故障时复制状况指示复制被启用的条件下通过执行向副本服务器计算机的故障转移而对主数据库服务器计算机的故障做出响应。该故障转移可以是自动执行的。
12.通过下文参考附图进行的详细描述,本发明的前述以及其他目的、特征和优点将变得更加显见。
附图说明
13.图1是能够实施所公开技术的示例的第一软件架构的框图。
14.图2是根据所公开技术的第一示例方法的流程图。
15.图3是根据所公开技术的第二示例方法的流程图。
16.图4是根据所公开技术的第三示例方法的流程图。
17.图5是能够实施所公开技术的示例的第二软件架构的框图。
18.图6是能够实施所公开技术的第一示例数据库系统的框图。
19.图7是能够实施所公开技术的第二示例数据库系统的框图。
20.图8是示意性地示出了适于实施所公开技术的计算环境的图示。
21.图9是示意性地示出了与计算云协同操作来实施所公开技术的计算设备的图示。
具体实施方式
22.概述
23.高可用性数据库系统在普及性和尺寸方面不断提高。此类系统往往保持热备份或者副本服务器,从而能够以最短的故障停机时间快速执行故障转移。然而,在可靠性(启用复制)和性能(禁用复制)之间存在折衷。相应地,希望具有一种用于在短时间段内(例如,在系统使用率非常高时)禁用复制的设施。这带来了在主服务器发生故障时验证复制状况的问题。如果复制状况是“启用”,那么能够迅速安全地执行故障转移。然而,如果复制状况是“禁用”,那么故障转移将不被允许,直至未经复制的事务得到处理为止。
24.一些旧式架构无权对故障服务器的复制状况进行远程访问。此外,为了通过对软件打补丁或者安装新软件来解决这一问题,可能需要重启。对于大型数据库系统而言,完全重启可能要用一小时或更长时间,对于高可用性系统而言是不能这样做的。
25.所公开的技术提供了对这一问题的解决方案,其利用了被植入到域名服务器组件当中的预先存在的钩子(hook)特征。这样做的一个特别的优点在于,一旦系统处于运行当中,就不需要在启动时用于适当系统配置的域名服务器来处理例行的数据库查询。因此,在不中断对数据库查询的例行处理的情况下,域名服务器的重启能够启动新的ha/dr脚本而且能够在不做完全重启的情况下执行。在一些示例中,新ha/dr脚本能够对目前主服务器的复制状况进行日志记录,该复制状况能够使用预先存在的服务被拷贝到远程位置(例如,中央主机计算机的共享路径)。在主服务器发生故障之时,能够通过中央主机计算机访问复制状况的远程副本,并且能够容易地验证故障时的复制。在确认发生故障之时复制是启用的之后,能够迅速、安全并且自动地执行故障转移。
26.尽管所公开的实施例是在ha/dr数据库环境的语境下描述的,但是不是要求。所公开的技术能够被用到其他ha/dr应用当中,诸如电信、石油天然气测井或者运输系统或公用事业管理。所公开的技术还可以被用到其他大型数据库环境当中,从而在无需数小时之长的停机时间的情况下执行软件更新,即使没有ha/dr要求这一点也是合乎需要的。在包括石油天然气、数据挖掘应用、商业交易和某些专有数据仓库在内的很多领域内都会遇到100tb数据库。一些网站分析、互联网安全和时间序列数据库超过了1pb。
27.将通过下文描述的示例揭示所公开技术的特征。
28.术语
[0029]“激活”一词是指将新软件程序引入到计算环境中,从而使该新软件程序可被一个或多个预先存在的软件程序使用或者与之集成。在一些示例中,新激活的软件程序可以被作为运行中的进程启动,但这不是要求。在其他示例中,新激活的软件程序可以被添加至注册表,其在该处能够被其他预先存在的软件调用或启动。
[0030]“主机代理”是目标计算系统上的软件组件,其能够代表远程主机计算系统对该目标系统执行动作或监测。本文描述的一些主机代理提供诊断能力,但这不是要求,并且主机
代理能够支持针对目标计算机系统的其他功能。
[0031]“应用程序”或者“软件应用程序”是为一个或多个客户端执行功能的计算机可执行程序,并且可以有别于操作系统、软件库、测试套件或者开发环境。此外,一些应用程序能够在无客户端的情况下操作,例如,由进程管理程序或者另一应用程序启动,从而自动或者按照事件驱动模式执行任务。应用程序可以包括可执行指令(被称为“代码”或“程序代码”)和非可执行数据(被称为“应用数据”或“程序数据”)。应用程序可以具有执行该应用程序的工作(例如,执行底层数据操作,保持状态,生成或响应请求等)的一个或多个引擎(被称为“后端”)并且能够为客户端或用户提供一个或多个界面(被称为“前端”,有时被称为“用户界面”或“ui”)。本文描述的一些数据库实例可以包括多个应用程序。索引服务器可以是使用web浏览器前端的应用程序(对于一些客户端),并且可以由各种后端支持,如下文在图6的语境下所述。
[0032]“客户端”是使用由另一硬件或软件计算实体(被称为“服务器”)提供的资源的硬件或软件计算实体。
[0033]“组件”一词是指计算环境中的任何软件程序项(例如,应用程序、模块、库函数或服务)。“辅助组件”是数据库环境中的一个组件,在运行中的数据库环境下不需要将该组件用来处理普通数据库查询,而且该组件也不是此类所需组件的副本。也就是说,辅助组件可以提供特殊服务,例如,启动时的,或者支持监管、诊断、维护或管理功能的。在一些示例中,域名服务器被用作辅助组件,但这不是要求,可以使用其他辅助组件。
[0034]“守护进程”是计算机系统中的后台进程。在本公开中感兴趣的是能够监测系统软件的健康,执行看门狗或心跳功能或者跨越计算系统拷贝状态的指示符的守护进程。在一些示例中,守护进程能够周期性地向ha/dr脚本请求状况,并且能够在ha/dr脚本指明状况值已经改变时将该状况值写入到远程计算机。
[0035]
不加修饰的“数据”一词是指任何的信息数字表示。
[0036]“数据库”(db)是保持在计算机可读介质上的并且可通过一个或多个处理器处的指令执行来访问的有组织数据集合。数据库可以是关系数据库、存储器内或磁盘上数据库、分层或非分层数据库或者任何其他类型的数据库。数据库可以存储一个或多个数据项的原件或原本。
[0037]“数据库实例”(有时称为“数据库系统”或“数据库环境”)是一个或多个数据库与用于处理查询的额外软件应用程序的组合。在各种示例中,数据库实例还可以执行分析,能够为各种形式的存储数据提供后端支持,或者能够为用户和管理员提供不同的前端支持,下文将在图6的语境下对其中的一些予以描述。单个数据库实例可以跨越多个服务器计算机分布,尽管这不是要求。在一些所描述的示例中,数据库实例可以具有位于主数据库服务器计算机上的主数据库以及位于副本数据库服务器上的副本数据库。当数据库实例能够接收、处理和响应来自客户端的数据库查询时,认为该数据库实例是可操作的。本文描述的一些数据库环境可以包括存储器内数据库,然而这不是要求。
[0038]“故障转移”是将对软件应用程序的控制从第一计算机转移到第二计算机的过程,一旦在第一计算机上发生了软件或硬件故障、例外或者警报就可以执行故障转移。可以保持第二计算机作为第一计算机的副本(有时称为热备份),因而故障转移对于客户端而言是透明的。本公开中感兴趣的一些故障转移是在主服务器出现硬件故障的情况下从主数据库
服务器向副本数据库服务器的移转。
[0039]“故障”是指计算机系统的不正常运行,并且可能出于各种原因,诸如计算硬件、计算软件或辅助子系统的不正确行为或其任何组合。然而,故障未必要求处理器停止或者计算结果未必错误:在一些示例中,即使没有发生错误或停止也可能将警报(诸如温度过高、声学噪声、冷却或网络警报状况——其可能是其他更严重的紧急错误的警告)视为故障。在本公开中我们尤其感兴趣的是数据库服务器的硬件故障,在这种情况下本地存储在故障计算机上的状态信息可能变得不可访问。
[0040]“函数”是一种可执行软件模块,其在被执行时取得一个输入并且可选地生成对应输出。输入和输出可以具有相同或不同数据类型,这些数据类型可以是简单或复杂数据类型或其任何组合。
[0041]“高可用性/灾难恢复”(或简称为“ha/dr”)是指计算环境的用于提供(a)超过某一给定服务水平的系统正常运行时间或者(b)紧随灾难之后服务连续性的硬件或软件组件。由于类似的特征(例如,复制)能够支持高可用性和灾难恢复二者,因而这两个词往往一起使用。为了进行举例说明,99.9%的可用性要求每星期不到10分钟或者每年不到9小时的非计划中停机时间。作为对比,大型存储器内数据库系统可能要用多个小时来完成完全重启。作为另一例示,灾难恢复可能适用于能够中断或毁坏计算系统或数据中心的灾难,诸如火灾、地震或者其他事件。
[0042]“钩子”是指一种设施,其用以使现有软件程序链接到或者执行新软件程序而不对现有软件程序做出任何修改。在一些所公开示例中,域名服务器能够结合预先存在的钩子,借助于它,域名服务器的重启能够使得新引入脚本的初始化函数被执行,继而引起该脚本的激活或启动。
[0043]“主机”是指处于目前计算系统外或者不同于目前计算系统的计算系统,其能够被耦接为向目前计算系统提供某种服务或设施。为了进行举例说明,本公开中的一些数据库服务器可以包括主机代理,这是一种起着外部主机计算机的代理的作用的本地软件组件,诸如,编排器。作为另一个例示,本公开中的一些数据库服务器可以耦接至主机服务器,该主机服务器能够为目前数据库服务器的复制状况的远程拷贝的检索提供存储位置和软件。
[0044]“安装”一词是指准备新软件程序,以供在软件环境中使用。
[0045]
作为动词,“日志记录”是指持续地存储计算环境中的某种活动的状况、状态或记录的动作。作为名词,“日志”是指持续存储的一个或多个项的容器。在本公开中感兴趣的是对主数据库服务器的复制状况的日志记录。在一些示例中,将日志保持为json(javascript object notation)文件,但这不是要求,可以使用其他形式的数据存储。在一些示例中,数据库实例可以具有在多个计算系统(例如,主数据库服务器和副本服务器)之间共享的单个日志文件,但这不是要求,在其他示例中,每一数据库服务器计算机可以保持其自身的日志文件。在其他示例中,在复制状况发生变化之时,复制状况可以被重写或者被附加至日志文件。在一些示例中,远程编排器能够检查数据库服务器的日志文件(通过该数据库服务器上的主机代理),例如,每两秒钟检查一次。没有响应可以向该编排器警示该数据库服务器存在故障可能性。
[0046]“保持”一词是指通过借助于一次或多次更新修改数据项、数据结构、数据库或其他数据集合而使数据保持当前状态。在本公开中,可以按照各种方式保持状况值、状态指示
符、数据项或数据库。
[0047]“域名服务器”是数据库环境或其他软件环境中的软件组件,其能够提供拓扑和分布信息或者其他配置信息,从而使该软件环境能够在所有组件都相对于彼此并且相对于该软件环境的永久性存储数据得到了正确配置的情况下启动。在一些示例中,能够在不到一分钟的时间内执行域名服务器重启。
[0048]“编排器”一词是指一种系统管理软件,其相对于正接受管理的一个或多个计算系统处于外部或者远程位置。编排器可以跨越多个所管理系统监测活动、状态或系统健康;能够接收来自所管理系统的通知;或者能够启动或控制对所管理系统的监管行动或过程。编排器可以直接由系统管理员操作,或者可以被编程为自动执行任务。在一些所描述的示例中,编排器能够将软件加载到目标系统上,能够发起完全或部分重启,能够通过主机代理监测目标系统,能够接收系统故障的通知,能够检查或改变目标系统的复制状态,或者能够发起故障转移。编排器不是所管理的系统的客户端或对等体。
[0049]“数据库查询”(或简称为“查询”)是对数据库执行操作的请求。查询能够对底层数据或数据库表格执行读取、写入或修改或其任何组合。也就是说,一些查询能够请求根据指定条件从数据库返回数据而不对该数据做出任何改变,而其他查询则能够增添新的数据项(例如,新表格或现有表格中的新的行),并且另一些查询能够更新(例如,修改或者重写)数据库中的一个或多个现有数据值。查询还能够请求对一个或多个数据项的删除或者数据的重新组织(例如,排序)。
[0050]
词语“接收”和“发送”是指通过网络进行的通信,其可以具有消息的形式。通信可以是电磁的,例如,通过有线、无线或光学媒介,但这不是要求。
[0051]“复制”是指将第一计算环境中的事务转移到第二计算环境,从而能够使第二计算环境处的某一软件和/或数据保持在与第一计算环境相同的状态中。第一计算环境可以被指定为“主环境”。在一些所公开的数据库示例中,第一环境可以是主数据库服务器计算机(或简称为“主数据库服务器”),并且能够接收客户端查询,执行所请求的行动,并且返回适当的响应。第二计算环境可以是“副本环境”或者更具体而言可以是副本数据库服务器计算机(或者简称为“副本服务器”)。主数据库服务器和副本服务器可以是单个数据库实例的部分,但这不是要求。
[0052]“复制状况”是指在特定计算环境中复制被启用还是禁用。在示例中,复制状况可以具有两个值,本文表示为“启用”和“禁用”。在复制状况为启用时,主环境处的事务被发送至副本服务器并且在该副本服务器处执行,从而使该副本服务器能够保持在与主环境相同的状态(例如,数据库状态)中。在复制状况为禁用时,不在副本服务器处复制主环境事务。尽管所公开的示例采用了启用和禁用状况值,但是还可以使用复制状况的额外值。在一些示例中,不同状况值可以用于复制的计划或非计划停用。计划停用的示例可以发生在系统管理员暂停复制以实现性能的临时增强的时候,而非计划停用的示例则可能是因网络停供而发生的。在其他示例中,当复制状况的改变正处于待决当中时可以使用额外的状况值。
[0053]“请求”是指一个消息,期待对该消息做出实质性的响应(“响应”),即超越确认的响应。请求还可以是一种消息,其中,期望该消息的接收方采取指定的行动。相反,“通知”不需要接收实质性响应,也不导致任何特定行动。
[0054]“重启”是指终止一个软件程序(例如,进程、服务或应用程序)并且再次启动同一
程序(或者同一程序的更新版本)的操作。
[0055]“脚本”是具有源代码的形式的软件程序,其适于由计算机上的解释程序处理。一些所公开的示例使用python脚本,然而这不是要求,也可以使用bash、perl或者其他脚本语言。
[0056]“服务器”是被实施为在上面执行软件的硬件的计算机,其为至少一个客户端并且往往为多个客户端提供服务或者对资源的访问。由于服务器功能既需要硬件组件又需要软件组件,因而本文对服务器的描述不构成限制,并且可以包括任一种组件或者两种组件。在涉及到区分的情况下,有时将诸如“服务器软件”、“服务器服务”或者“服务器程序”的更加精确的术语用于软件组件,而“服务器计算机”则有时被用于硬件组件。尤其是,服务器计算机可以实施多个服务器程序,并且一些服务器程序可以跨越多个服务器计算机分布,而在其他情况下,在服务器程序和服务器计算机之间可以存在1:1关系。在本公开中,服务器可以实施软件应用程序、数据库、前端或后端逻辑、服务、用户界面或者可以提供其他功能。
[0057]“共享文件系统路径”是使两个或更多个计算机共享存储资源的设施。在一些示例中,被一个计算机写给共享存储设备的数据可以被另一计算机读取,反之亦然,而在其他示例中,对共享资源上的文件或其他数据对象的许可可以是不对称的。在单个共享存储资源上,从一个文件或数据对象到另一个文件或数据对象,许可可以发生变化。共享资源可以是存储器(例如,随机存取存储器:主存储器或高速缓存)或者永久性存储介质(例如,硬盘、闪存驱动器或光盘)。
[0058]“软件”是指计算机可执行程序或指令以及相关联的数据结构。软件可以处于活动或静默状态。在活动状态中,软件可以被加载到存储器当中,或者可能正在经历一个或多个处理器的执行。在静默状态中,软件可以被存储到计算机可读介质上,等待传输或执行。
[0059]“时间戳”是对于数据库事务相关联的时间的指明。给定的事务可以与多个时间相关联,例如,客户端发出发起目前事务的查询的源时间、在数据库实例处接收到该客户端查询的接收时间或者该事务被提交给底层数据库的提交时间。在所公开的示例中,可以单独或者以组合方式使用这些时间标记或者其他时间标记中的任何时间标记。
[0060]“数据库事务”(或简称为“事务”)是数据库中的改变,诸如新数据的插入、现有数据的删除、对现有数据值的修改、对数据的重新组织(例如,排序)或者数据库元数据的改变。
[0061]“触发器”一词是指引起第二动作的发生的第一动作。在一些示例中,编排器可以向数据库服务器发送对域名服务器重启(第二动作)的请求(第一动作)。
[0062]
第一示例软件架构
[0063]
图1是能够实施所公开技术的示例的第一软件架构的框图100。在这一架构中,客户端-服务器数据库环境由编排器管理并且用主机服务器强化。为了促进描述,在图1中将软件实体示为具有圆角的矩形,而硬件实体则被示为具有方角的矩形。本领域技术人员将认识到,就本公开而言,软件实体可以被实施到底层计算机硬件上,而硬件实体则可以存储或运行软件,以提供所描述的功能。例如,客户端160可以被实施到客户端硬件(未示出)上,而副本服务器150则可以结合操作系统、数据库应用程序或通信软件(未示出)。此外,有时使用方向性箭头指示信息流的主方向;底层通信也可以包括相反方向内的确认、通知或者其他消息或请求。
[0064]
在图1中,客户端160与数据库实例130之间的交互能够提供所例示的架构的主要功能。客户端160能够向数据库实例130发出数据库请求,并且接收返回的响应。数据库实例130可以跨越多个服务器(包括一个主服务器140和至少一个副本服务器150)分布。主服务器140可以处理来自客户端160的查询。在启用复制时,主服务器140上的事务可以被传输至副本服务器150,以供在副本服务器150上执行,从而使副本服务器150能够保持数据库实例130的与主服务器140管理的数据库状态匹配的状态。主机服务器120可以耦接至主服务器140。主机服务器120和主服务器140两者都可以由编排器110管理。
[0065]
主服务器140可以具有所安装的辅助组件146(aux.component),并且可以被配置为使得辅助组件146的重启能够在数据库实例130的其他数据库组件(包括主服务器140上的组件)保持可操作的同时执行。主服务器140还可以具有本地存储的新的灾难支持恢复程序(ha/dr program)143,其可以在辅助组件146重启时被激活。
[0066]
数据库实例130可以具有预先存在的ha/dr设施,其用来出于一些原因(诸如性能增强或维护)禁止复用。也就是说,主服务器140的复制状况可以要么为启用要么为禁用,这样的状况被本地存储在主服务器140上。因而,在ha/dr程序143激活之前,一旦主服务器140发生故障,那么本地存储的复制状况可能丢失。尽管编排器110能够检测主服务器140的故障(例如,通过发现主服务器140无响应),但是编排器110可能无法在发生故障时确定主服务器140的复制状况。在不知道主服务器140的复制状况的情况下,编排器不能自动触发数据库实例130的向副本服务器150的故障转移,并且数据库实例130的可用性可能下降到预定阈值以下。
[0067]
一旦被激活,ha/dr程序143就能够使本地存储的复制状况被拷贝到主机服务器120,在主服务器140发生故障的情况下复制状况可以被编排器110在主机服务器120处检索到。由此,在主服务器140发生故障或者变得无响应时,编排器110能够从主机服务器120无疑义地确定主服务器140的复制状况。如果发现复制状况为启用,那么编排器110能够安全并且自动地触发故障转移,允许数据库实例130以最短的停机时间平顺地继续操作。
[0068]
可以实施所例示的架构的很多变化或扩展。在一些示例中,编排器110可以被实施到主机服务器上。在其他示例中,所例示的组件的基数(cardinality)可以存在变化。多个数据库实例130可以共享主机服务器120或编排器110。一个数据库实例130可以具有多个副本服务器150。多个客户端可以被耦接为查询数据库实例130。ha/dr程序123可以向ha/dr程序143提供互补功能。也就是说,ha/dr程序143能够使主服务器140的复制状况被存储到主机服务器120处,ha/dr程序123能够用于响应于远程编排器110的请求而读取并提供这一复制状况。
[0069]
在其他示例中,ha/dr程序143能够将主服务器140的复制状况本地存储到第一存储位置上,例如,存储到json文件中,从该处ha/dr守护进程(未示出)能够将这一复制状况拷贝到主机服务器120。可以在第二存储位置处保持复制状况的该副本,该第二存储位置可被主机服务器120访问并且在主机服务器140发生了故障的情况下仍保持可被其访问。例如,该第二存储位置可以位于不相对于主服务器140处于本地的共享文件系统路径上,并且既可被主机服务器120访问又可被ha/dr守护进程访问。在一些示例中,ha/dr守护进程可以是预先存在的组件,其被配置为监测在主服务器140上是否已经发生了故障并且向主机服务器120提供心跳信号,而在其他示例中,ha/dr守护进程可以是ha/dr程序143的部分。
[0070]
响应于主服务器140的故障,所例示的系统可以被配置为检查主服务器140的复制状况,例如,通过对主机服务器120的请求。一旦确定在主服务器140发生故障时复制状况为启用,那么该系统可以被配置为执行数据库实例130的向副本服务器150的故障转移。该故障转移可以是自动执行的。编排器110可以自动执行下述操作中的一者或多者:检测主服务器140故障;检查主服务器140的复制状况;或者发起故障转移。
[0071]
由于副本服务器在功能上可以是主服务器140的副本,因而能够与主服务器140交换职责,目前的方法(包括操作变化或扩展)还可以用于激活副本服务器上的ha/dr程序143的在另一个副本。
[0072]
第一示例方法
[0073]
图2是第一方法的流程图200。在这一方法中,在加载和激活脚本的同时,数据库环境保持可操作。参考图1,该数据库环境可以与主服务器140类似并且可以是与130类似的数据库实例的部分。该第一方法可以在主服务器140处执行。
[0074]
在过程块210中,脚本被存储到数据库环境中。该脚本能够在该数据库环境中提供特征增强。在一些示例中,该数据库环境可以是ha/dr环境,并且该特征增强能够提供将被拷贝到远程位置的该数据库环境的复制状况,一旦该数据库环境发生了故障,该复制状况可在该远程位置处受到访问。
[0075]
在过程块220中,该脚本可以通过重启数据库环境中的预先存在的辅助组件而被激活,借此该数据库环境在辅助组件重启和脚本激活期间保持可操作,以接收和处理客户端查询。
[0076]
可以实施该第一方法的很多变化或扩展。该辅助组件可以是域名服务器。由于只在数据库环境的启动时涉及该域名服务器,在服务于客户端数据库查询时则不涉及该域名服务器,因而该域名服务器的重启能够允许查询处理不受中断地进行,即便是在域名服务器终止和重启时。该辅助组件能够结合预先存在的钩子设施,从而在重启时执行一个或多个钩子功能,并且这些钩子功能中的一个识别出该新脚本,并且引起该脚本内的初始化函数的执行,从而引起该脚本的激活。尤其是,激活可以通过各种方式包括在该数据库环境中启动一个针对的该脚本的进程,或者对该脚本进程注册,使得该数据库环境中的其他软件组件能够发现并调用该脚本。该脚本能够允许在两个或更多个截然不同的服务器上保持该数据库环境的复制状况,服务器之一可以是在上面运行该数据库环境或者作为该数据库环境的部分的服务器,并且另一服务器可以是托管共享文件系统路径的服务器。复制状况可以包括指示复制状况为启用、禁用或者其他定义状况的类别变量。复制状况可以被存储到日志文件中,该日志文件还可以包括该数据库环境中的最新数据库事务的时间戳。主服务器140上的日志文件的全部或部分可以被拷贝到共享文件系统路径或者另一远程位置。
[0077]
除了来自客户端的数据库查询之外,数据库环境还可以接收并处理管理命令或请求,诸如,来自外部编排器的。这些请求中的某些可能通过该数据库环境中的主机代理指向新激活的脚本。在一些示例中,编排器可以请求当前复制状况,可以请求对复制状况的未来变化的通知,可以请求改变或设置复制状况,或者可以管理脚本进程。此外,在脚本激活之前,编排器能够触发块210或块220的执行。此外,在该脚本激活之后并且在该数据库环境发生故障之时,该编排器能够检测到故障,能够向共享文件系统路径请求复制状况的副本,并且能够验证故障之时复制状况为启用。一旦确定复制状况为启用,对该数据库实例的主要
控制就可以被转移至其副本服务器。
[0078]
响应于数据库环境故障,第二服务器可以接收编排器的对数据库环境复制状况的请求,可以检索故障时的最新近数据库环境复制状况,并且可以响应于该编排器的请求将这一状况提供给该编排器。该方法可以扩展至在第二服务器上安装第二脚本来支持这一功能。
[0079]
第二示例方法
[0080]
图3是第二方法的流程图300。这一方法可以部分地在与主服务器140类似的第一服务器302处执行,并且部分地在与主机服务器150类似的第二服务器304处执行。在第一服务器302处,该方法激活一个脚本,以跨越服务器302、304发起对服务器302的复制状况的共享。晚些时候,当第一服务器302已经发生了故障时,即使存在该故障,第二服务器304也能够检索第一服务器302的复制状况,以作为执行故障转移的先决条件。
[0081]
在过程块310中,存储脚本。该脚本接收自一个编排器或者另一外部来源,并且被存储到第一服务器302处。在过程块302处,可以重启辅助组件。该辅助组件可以是第一服务器302处的域名服务器。在过程块323处,该辅助组件可以在其重启时执行钩子,钩子能够检测到在块310中存储的脚本。在过程块326处,利用所述的钩子机制,该脚本内的初始化函数能够被调用。在一些示例中,在块320、323、326的持续时间内其他应用程序能够保持可操作。在块326之后,该初始化的脚本可以是可用的并且被集成到服务器302的软件环境内,并且能够要么在初始化之时自动启动,要么以后响应于命令(诸如,来自编排器的)启动。
[0082]
之后,随着脚本运行,能够在过程块330中在第二服务器304上保持第一服务器302的复制状况。在一些示例中,该脚本能够将该复制状况本地写入到第一服务器302处,并且预先存在的守护进程能够将复制状况拷贝至服务器302外的共享文件系统路径,其中,第二服务器304能够访问该复制状况,即使第一服务器302经历了完全故障。在其他示例中,该脚本能够直接向共享文件系统路径写入,而不牵涉守护进程。
[0083]
可选地在复制状况中的偶然切换(从启用到禁用或反之)的情况下第一服务器302能够继续操作。例如,可以禁止复制,从而释放服务器302处的计算资源,并且提供性能的暂时提升。在其他示例中也可以禁用复制,例如,当在副本服务器上计划了维护时,或者在服务器302与副本服务器交换职责的短持续时间内,这些也可能是在程序控制下(即在没有任何故障指示的情况下)发生的。
[0084]
随着第一服务器302继续操作,能够在判定块340中对其健康进行监测。如果未检测到故障,那么该方法遵循n(否)分支返回至块340继续进行监测。然而,在检测到故障的情况下,该方法可以遵循y(是)分支进行至块350。在一些示例中,块340能够部分地在第一服务器302本身处执行,例如,通过执行心跳服务的守护进程或者通过主动检查软件故障状况的设施。在一些示例中,块340能够部分地或者完全地在服务器302外执行,例如,通过监测来自服务器302的心跳信号或其他活动信号。第二服务器或编排器能够监测302的故障或健康状况。
[0085]
转到第二服务器304,并且响应于在块340中检测到的故障,可以在块350中接收到对服务器302的复制状况的请求。可以在块353中检索到复制状况并将其提供给请求者。可以在不同于第一服务器302的第二服务器304处执行块350、353。块350中的请求可以是从编排器接收的。
[0086]
在判定块360中,可以进行在发生故障时复制状况是否是启用的检查。如果复制状况不是启用,该方法可以从块360遵循n分支在块399中终止。可以通知管理员,使其进行调查并且采取进一步的行动。然而,如果复制状况为启用,那么该方法可以遵循n分支到达块370,在该块中,对软件环境的控制可以被自动转移至副本服务器,并且能够保持高可用性。在一些示例中,块360、370可以由编排器(其也可以是块350中的请求的发起者)执行,而在其他示例中,块360、370可以在第二服务器304内部执行(如虚线306所指示的)。也就是说,块350、360可以由第二服务器304上的ha/dr脚本响应于ha/dr监督程序同样在第二服务器304上运行来执行。ha/dr监督程序也可以执行块360、370。
[0087]
第三示例方法
[0088]
图4是根据所公开技术的第三方法的流程图400。在这一方法中,数据库实例的应用程序在脚本被激活的同时保持可操作。参考图1,该数据库实例可以与数据库实例130类似,并且可以在与主服务器140类似的服务器上运行。该第三方法可以是由与110类似的编排器执行的。
[0089]
在过程块410中,脚本被可以被传输至数据库实例。该脚本可以提供对该数据库实例的特征增强。在一些示例中,该数据库实例可以支持ha/dr,并且该特征增强能够提供将被拷贝到远程位置的该数据库实例的复制状况,一旦该数据库环境发生了故障,该复制状况可在该远程位置内受到访问。
[0090]
在块420中,可以触发该数据库实例中的预先存在的辅助组件的重启。该重启能够使得该脚本被激活,与此同时该数据库实例在辅助组件重启和脚本激活的整个过程中仍然可进行操作以服务于客户端数据库查询。
[0091]
可以实施该第三方法的很多变化或扩展。在一些示例中,该脚本可以是第一脚本,并且该方法可以包括在与该数据库实例分开的第二服务器处安装第二脚本。在一些示例中,第二脚本的安装和激活可以遵循用于第一脚本的激活的技术。在其他示例中,在第二服务器上可以不存在数据库应用程序或域名服务器组件,或者第二服务器可以不受到高可用性要求,并且可以采用其他技术安装该第二脚本,包括第二服务器的完全重启。
[0092]
第一脚本可以被配置为存储该数据库实例的状态的指示符,而第二脚本则可以被配置为检索该状态指示符。状态指示符可以传达关于复制状况、利用系数、系统健康(硬件或软件)、通知或警报或者其他状态信息的信息。在各种示例中,第二脚本可以从与该数据库实例分开的共享系统文件路径或者从第二服务器处的本地存储设备检索状态指示符。该方法可以包括响应于该数据库实例的故障对第二脚本进行查询以检索该数据库实例状态指示符,以及引起该数据库实例向副本服务器的故障转移。该第三方法可以被体现为计算机可读介质上的可执行指令,使得指令的执行引起上述操作或过程块被执行。该计算机可读介质还可以存储第一脚本或第二脚本,使得这些脚本在数据库实例的服务器或者第二服务器上的执行引起被编码到相应脚本中的行动的执行。
[0093]
第二示例软件架构
[0094]
图5是能够实施所公开技术的示例的第二软件架构的框图500。图5-7遵循与图1类似的约定。在图5中,一个或多个客户端设备560可以被配置为向在主数据库服务器540上运行的数据库实例535发送查询以及接收来自其的响应。主数据库服务器540还可以耦接至:能够保持数据库535的副本的副本服务器550;能够为主数据库服务器540并且可选地为其
他数据库服务器570提供支持或监管服务的中央服务器520;以及如图所示能够为服务器520、540并且还可选地为副本服务器550和其他数据库服务器570(在图5中未示出它们的与编排服务器510的通信路径)提供管理功能的编排服务器510。编排服务器510可以通信耦接至服务器520、540上的主机代理521、541,从而使编排器软件或编排服务器510能够分别对服务器520、540远程执行管理行动。例如,主机代理521、541可以通过分别与ha/dr脚本523、543通信而请求服务器540的复制状况的本地副本。主数据库服务器540可以结合本地文件系统路径,主数据库服务器540中的各种其他组件可以通过该路径相互通信耦接或者通信耦接至本地存储设备。一旦受到激活,ha/dr脚本543就能够在状况指示符548a中保持主数据库服务器540的复制状况。如本文所讨论的,ha/dr脚本543可以通过域名服务器546的重启激活。
[0095]
守护进程547能够在主数据库服务器540上提供监测或看门狗功能,并且能够将状况指示符548a拷贝到共享文件系统路径525上的第二存储位置以作为状况指示符548b。也就是说,守护进程547能够保持状况指示符548b,其为由ha/dr脚本543保持的初始状况指示符548a的最新副本。在其他示例中,可以省略状况指示符548a并且状况指示符548b可以被直接写入到共享文件系统路径525。在各种示例中:ha/dr脚本543能够将状况指示符推送给守护进程547,以供传输并且被存储为状况指示符548b;ha/dr脚本543能够直接写指示符548b(通信路径未示出);或者守护进程547能够对ha/dr脚本543进行状况值的轮询并且能够将该值存储为状况指示符548b。在一些示例中,守护进程547可以是预先存在的软件组件,并且在ha/dr脚本543被激活之后,预先存在的状况指示符548a、548b可以被扩大一个字段,该字段用于主数据库服务器540的复制状况。在其他示例中,ha/dr脚本543的激活可以伴随守护进程547的安装、替换或升级,以支持ha/dr脚本543。
[0096]
中央服务器520不限于仅支持主数据库服务器540,而是还对一个或多个额外的数据库服务器570提供类似支持,额外数据库服务器的每者可以具有其自己的域名服务器576、ha/dr脚本573和可选的本地状况指示符578a。额外数据库服务器可以被按照与主数据库服务器540类似的方式受到管理:域名服务器576的重启可以激活ha/dr脚本573而不对在服务器570上运行的应用程序造成干扰;并且可以通过共享文件系统路径525拷贝本地复制状况578a并且将其存储为复制状况指示符578b。该共享文件系统路径525被例示为位于中央服务器520内,但这不是要求。在其他示例中,共享文件系统路径525可以是远程的,但是可由服务器520、540两者访问。
[0097]
第一示例数据库系统
[0098]
图6是能够实施所公开技术的第一示例数据库系统的框图600。在数据库实例630中,索引服务器644提供用于处理来自客户端660、662的查询的中央功能。标准客户端660能够支持数据库查询语言,诸如sql(结构化查询语言)或mdx(多维表达式),并且能够直接与索引服务器644通信,而web客户端662则可以利用集成在数据库实例630内的web服务器664。web服务器664还可以支持额外的基于web的工具666,从而为数据库实例630提供监管或管理功能。索引服务器644还可以支持外部的工作室软件668,该软件还可以提供用于管理数据库实例630的一个或多个客户端侧工具。索引服务器继而可以依赖于如图所示的其他软件组件:扩展库服务器651能够支持在多个库的范围内分布的数据库表格;数据供应服务器653能够使用预建适配器或自定义适配器支持对来自混合来源的数据的整合;di(部署
基础设施)服务器655能够支持最终用户应用程序或复杂数据对象的部署;并且流式集群模块657能够支持被配置为处理流式数据的服务器计算机的集群。如组件653、657下面的省略号所指示的,这些后端组件只是对可能存在于数据库系统内的大量组件的举例说明。域名服务器646能够为数据库实例630管理拓扑和分布信息,从而在启动时能够针对该数据和服务器架构正确地配置数据库实例630的其他组件的每者。
[0099]
第二示例数据库系统
[0100]
图7是第二示例数据库系统的框图700,其示出了与所公开技术的一些示例有关的某些组件。在数据库实例730中,一个或多个索引服务器744能够处理客户端数据库查询,对底层数据库表格执行对应动作,并且将对应响应发送给接收到的查询所来自的客户端。域名服务器746可以管理数据库系统的拓扑和分布信息748,该信息可以包括定义数据库表格的分割方式以及它们位于何处的信息。一般而言,索引服务器744能够通过域名服务器746在启动时获得必要的拓扑和分布信息748。在启动之后,能够在不求助于域名服务器746或者拓扑和分布信息748的情况下处理客户端查询。因此,域名服务器746的重启可以在不影响数据库实例730或索引服务器744所处理的例行查询处理的情况下执行。
[0101]
一般化计算机环境
[0102]
图8示出了适当计算系统800的一般化示例,能够在其中根据所公开的技术实施所描述的示例、技巧和技术,包括辅助组件、日志文件、诊断或ha/dr服务的构建、部署、操作和维护。计算系统800无意暗示对本公开的使用范围或功能的任何限制,因为可以在多种多样的通用或专用计算系统中实施所述创新。
[0103]
参考图8,计算环境810包括一个或多个处理单元822以及存储器824。在图8中,这一基本配置820包含在虚线内。处理单元822执行计算机可读指令,诸如,用于实施本文描述的用于在没有应用程序中断的情况下更新、激活或引入软件、检测故障计算系统的状况以及执行故障转移的方法或目的中的任何方法或目的;或者执行本文描述的各种各样的其他架构、软件组件、处理程序、管理程序、模块或服务。处理单元822可以是通用中央处理单元(cpu)、专用集成电路(asic)中的处理器或者任何其他类型的处理器。在多重处理系统中,多个处理单元执行计算机可读指令,以提高处理能力。计算环境810还可以包括图形处理单元或者协处理单元830。有形存储器824可以是可被处理单元822、830访问的易失性存储器(例如,寄存器、高速缓存或ram)、非易失性存储器(例如,rom、eeprom或闪速存储器)或其某种组合。存储器824可以按照适合于由(多个)处理器单元822、830执行的计算机可执行指令的形式存储实施本文描述的一种或多种创新的软件880。存储器824还可以存储数据库软件组件、脚本、钩子函数、状况或状态指示符、日志文件、处理程序、配置数据;包括数据表格的数据结构、工作表格、变化日志、输出结构、数据值、索引或标志以及其他操作数据。
[0104]
计算系统810可以具有额外特征,诸如存储装置840、输入设备850、输出设备860或通信端口870中的一者或多者。诸如总线、控制器或网络的互连机制(未示出)对计算环境810的硬件组件进行互连。典型地,操作系统软件(未示出)为在计算系统810中运行的其他软件提供操作环境,并且协调计算系统810的硬件和软件组件的活动。
[0105]
有形存储设备840可以是可移除或不可移除的,并且包括磁盘、磁带或磁带盒、cd-rom、dvd或者任何其他能够用于以非易失方式存储信息并且能够在计算环境810中被访问的介质。存储设备840存储实施本文描述的一种或多种创新的软件880的指令(包括指令和/
或数据)。
[0106]
(多个)输入设备850可以是机械、触摸感测或接近感测输入设备,诸如键盘、鼠标、触笔、触摸屏、跟踪球、语音输入设备、扫描设备或者其他向计算环境810提供输入的设备。(多个)输出设备860可以是显示器、打印机、扬声器、光盘写入器或者其他提供来自计算环境810的输出的设备。
[0107]
(多个)通信端口870能够实现通过通信媒介与其他计算设备的通信。通信媒介在调制数据信号中传达诸如计算机可执行指令或其他数据的信息。调制数据信号是指使其特性中的一者或多者以使得能够在信号中编码信息的方式设置或改变的信号。作为示例而非限制,通信媒介可以使用电、光、rf、声或其他载波。
[0108]
在一些示例中,计算机系统800还可以包括在其中执行实施所公开的技术的全部或部分的指令的计算云890。可以使用存储器824、存储装置840和计算云890的任何组合存储所公开技术的软件指令或数据。
[0109]
当前的创新可以是在计算机可执行指令(诸如,包括在程序模块中的那些)的一般语境下描述的,指令在目标实际或虚拟处理器上的计算环境中执行。一般而言,程序模块或软件组件包括执行任务或者实施特定抽象数据类型的例程、程序、库、软件、对象、类、数据结构等。在各种实施例中,可以根据预期对程序模块的功能进行组合或者在程序模块之间对功能进行拆分。程序模块的计算机可执行指令可以在本地或分布式计算系统中执行。
[0110]
词语“系统”、“环境”和“设备”在本文中可互换使用。这些词语中的任何词语都不暗示对计算系统、计算环境或计算设备的类型的任何限制,除非上下文做出的另外的明确指示。一般而言,计算系统、计算环境或计算设备可以是本地的或分布式的,并且可以包括专用硬件和/或通用硬件和/或虚拟化硬件的任何组合以及实施本文描述的功能的软件。“计算机”一词偶尔用于指计算系统。虚拟处理器、虚拟硬件和虚拟化设备最终体现在硬件处理器或者其他形式的物理计算机硬件当中,因而既包括与虚拟化相关联的软件又包括底层硬件。
[0111]
示例云计算环境
[0112]
图9示出了可以实施所描述的技术的示例云计算环境900。云计算环境900包括含有资源并且提供服务的计算云990。计算云990可以包括各种类型的云计算资源,诸如计算机服务器、数据存储库、联网资源等。计算云990可以是中心定位的(例如,由商业或组织的数据中心提供)或者可以是分布式的(例如,由位于不同地点(诸如,不同数据中心)和/或位于不同城市或国家的各种计算资源提供)。
[0113]
计算云990可以操作连接至各种类型的计算设备(例如,客户端计算设备),诸如计算设备912、914和916,并且可以为其提供一定范围的计算服务。计算设备912、914和916中的一者或多者可以是计算机(例如,服务器、虚拟机、嵌入式系统、桌上型或膝上型计算机)、移动设备(例如,平板计算机、智能电话或者可穿戴设备)或者其他类型的计算设备。计算云990与计算设备912、914和916之间的通信链路可以经由有线链路、无线链路、光学链路或其任何组合,并且可以是短期或长期的。通信链路可以是连续的或不定时发生的。这些通信链路可以是静止的或者可以随着时间的推移而移动,其通过各种变化的路径实施并且在每一端具有变化的附接点。计算设备912、914和916也可以相互连接。
[0114]
计算设备912、914和916可以利用计算云990获得计算服务并且执行计算操作(例
如,数据处理、数据存储等)。尤其是,用于执行所描述的创新技术的软件980可以驻留在计算云990、计算设备912、914和916或者云和计算设备的分布式组合当中或者可以在计算云990、计算设备912、914和916或者云和计算设备的分布式组合中执行。
[0115]
一般考虑事项
[0116]
如本公开中所用,单数形式“一(a)”“一(an)”以及“该(the)”包括复数形式,除非上下文明确地做出了另外的指示。此外,词语“包括(include)”和“结合”是指“包含(comprise)”。此外,词语“耦接”或“附接”包含将物项耦接到一起的机械方式、电学方式、磁方式、光学方式以及其他实际方式,并且不排除在耦接物项之间存在中间元件。此外,如本文所用,词语“或”以及“和/或”是指该短语中的各个项当中的任何一个或者它们的组合。
[0117]
尽管为了便于介绍按照特定的次序描述了所公开的方法中的一些的操作,但是应当理解,这种方式的描述包含重新布置,除非下文阐述的具体措辞要求特定的排序。例如,顺次描述的操作在一些情况下可以重新布置或者同时执行。此外,为了简单起见,附图并未示出可以将所公开的事物和方法与其他事物和方法结合使用的各种方式。此外,描述有时使用诸如“激活”、“调用”、“改变”、“配置”、“拷贝”、“确定”、“禁用”、“启用”、“评估”、“执行”、“故障转移”、“生成”、“处理”、“指示”、“初始化”、“发起”、“安装”、“调用”、“发出”、“启动”、“日志记录”、“保持”、“管理”、“匹配”、“修改”、“通知”、“输出”、“执行”、“处理”、“提供”、“查询”、“读取”、“接收”、“识别”、“复制”、“请求”、“响应”、“重启”、“返回”、“检索”、“保存”、“服务”、“维护”、“设置”、“存储”、“转移”、“传输”、“触发”、“更新”、“使用”或“写入”的词语来指示计算机系统中的计算机操作。这些词语表示由计算机执行的实际操作。对应于这些词语的实际操作将根据特定实施方式而变化,并且可容易地被本领域技术人员辨别。
[0118]
为了达到更好的理解的目的,提供了关于本公开的设备或方法的操作原理、科学理论或者本文介绍的其他理论描述,但是其并非意在限制范围。所附权利要求中的设备和方法不限于这些按照通过此类操作原理描述的方式起作用的设备和方法。
[0119]
所公开的方法中的任何方法可以被实施成存储在一种或多种计算机可读存储介质(诸如,有形非暂态计算机可读存储介质)上并且在计算设备(例如,任何可用计算设备,包括平板计算机、智能电话或者其他包括计算硬件的移动设备)上执行的计算机可执行指令或者计算机程序产品。有形计算机可读存储介质是能够在计算环境内访问的任何可用有形介质(例如,诸如dvd或cd的一种或多种光学介质盘、易失性存储器组件(诸如dram或sram)或者非易失性存储器组件(诸如闪速存储器或硬盘驱动器))。作为示例并且参考图8,计算机可读存储介质包括存储器824和存储装置840。词语“计算机可读介质”和“计算机可读存储介质”不包括信号和载波。此外,词语“计算机可读介质”和“计算机可读存储介质”不包括通信端口(例如,870)或通信媒介。
[0120]
用于实施所公开技术的计算机可读指令中的任何指令以及在所公开实施例的实施期间创建和使用的任何数据都可以存储在一种或多种计算机可读存储介质上。计算机可执行指令可以是(例如)专用软件应用程序或者经由web浏览器访问或下载的软件应用程序或者其他软件应用程序(诸如,远程计算应用程序)的部分。这样的软件可以(例如)在单个本地计算机(例如,任何适当的商业可用计算机)上执行或者可以使用一个或多个网络计算机在网络环境内(例如,经由因特网、广域网、局域网、客户端-服务器网络、云计算网络或其他此类网络)执行。
[0121]
为了清楚起见,仅描述了基于软件的实施方式的某些选定方面。省略了本领域公知的其他细节。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以是由软件实施的,软件是由abap、adobe flash、angular、c、c++、c#、curl、dart、fortran、go、java、javascript、julia、lisp、matlab、octave、perl、python、r、ruby、sas、spss、webassembly、它们的任何衍生产物、任何其他适当编程语言或者某些示例中的标记语言(诸如html或xml)或者适当语言、库和包的任何组合编写的。类似地,所公开的技术不限于任何特定计算机或任何特定类型的硬件。适当的计算机和硬件的某些细节是公知的,在本公开中不需要对其详细阐述。
[0122]
此外,可以通过适当的通信手段上载、下载或者远程访问基于软件的实施例(例如,包括用于使计算机执行所公开的方法中的任何方法的计算机可执行指令)中的任何实施例。例如,此类适当通信手段包括因特网、万维网、内联网、软件应用程序、线缆(包括光缆)、磁通信、电磁通信(包括rf、微波、红外和光学通信)、电子通信或者其他此类通信手段。
[0123]
不应将所公开的方法、设备和系统解释为以任何方式构成限制。相反,本公开涉及各种所公开实施例的所有新颖的和不明显的特征和方面,其可以单独的,也可以采取相互的各种组合和子组合的形式。所公开的方法、设备和系统不限于任何具体的方面或特征或其组合,所公开的实施例也不要求呈现任何一个或多个具体优点或者解决任何一个或多个具体问题。可以使来自任何示例的技术与在其他示例中的任何一者或多者当中描述的技术相结合。
[0124]
鉴于所述的可以应用所公开的本发明的原理的很多可能的实施例,应当认识到所例示的实施例只是本发明的优选示例,并且不应被理解为限制本发明的范围。相反,本发明的范围由下述权利要求限定。因此,我们主张的本发明的范围包括落入到这些权利要求的范围和实质内的全部内容。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1