具体实施方式
容易理解,如在本文附图中一般性描述和说明的,本发明的部件可以以各种不同的配置来布置和设计。因此,如附图中所表示的方法、装置、非暂时性计算机可读介质和系统中的至少一个的实施例的以下详细描述不旨在限制如所要求保护的应用的范围,而仅仅是所选实施例的代表。
在一个或多个实施例中,可以以任何适当的方式组合本说明书中描述的本特征、结构或特性。例如,在整个说明书中,短语“示例实施例”、“一些实施例”或其它类似语言的使用指的是结合实施例描述的特定特征、结构或特性可以被包括在至少一个实施例中的事实。因此,在整个说明书中出现的短语“示例实施例”、“在一些实施例中”、“在其它实施例中”或其它类似语言不一定全部指代同一组实施例,并且所描述的特征、结构或特性可以以任何合适的方式组合在一个或多个实施例中。
另外,虽然在实施例的描述中使用了术语“消息”,但是本申请可以应用于许多类型的网络数据,例如分组、帧、数据报等。术语“消息”还包括分组、帧、数据报及其任何等效物。此外,虽然在示例性实施例中可以描述某些类型的消息和信令,但是它们不限于某些类型的消息,并且应用不限于某些类型的信令。
示例实施例提供了方法、系统、非瞬时计算机可读介质、设备和/或网络,其提供了评估区块链请求(例如,交易等)内的时间戳信息以得到伪造的时间戳的区块链网络。此外,区块链网络可修改伪造的时间戳信息,并基于校正的时间戳信息存储交易。在一些实施例中,网络可以减少伪造时间戳的对等节点的信誉,使得当提交新的交易时和/或当背书由其他对等节点提交的交易时,该对等节点被网络高度审查。
分散数据库是包括彼此通信的多个节点的分布式存储系统。区块链是分散数据库的一个示例,其包括仅附加的不可改变的数据结构,类似于能够维护相互不受信方之间的记录的分布式分类账。不受信方在这里被称为对等方或对等节点。每个对等方都维护数据库记录的副本,并且在分布式对等方之间没有达成共识的情况下,没有单个对等方可以修改数据库记录。例如,对等方可以执行共识协议以验证区块链存储交易,将存储交易分组为区块,并在区块上构建散列链。该过程通过根据需要对存储交易进行排序以便保持一致性,从而形成分类帐。在公共或无许可的区块链中,任何人都可以在没有特定身份的情况下参与。公共区块链通常涉及本地加密货币并使用基于工作证明(PoW)的共识。另一方面,许可的区块链数据库提供了一种系统,该系统可确保共享共同目标但不完全信任彼此的一组实体之间的交互,诸如交换资金、商品、信息等的企业。
区块链操作任意的、可编程逻辑,该可编程逻辑被修改成分散存储方案并且被称为“智能合同”或“链码”。在某些情况下,可能存在被称为系统链码的用于管理函数和参数的专用链码。智能合同是利用区块链数据库的防篡改特性和节点之间的底层协议的可信分布式应用,底层协议被称为背书或背书策略。通常,区块链交易通常必须在被提交给区块链之前被“背书”,而未被背书的交易则被忽略。典型的背书策略允许链码以背书所必需的对等节点集合的形式指定交易的背书者。当客户端将交易发送到背书策略中指定的对等方时,执行交易以验证交易。在验证之后,交易进入排序阶段,在该排序阶段中使用共识协议来产生被分组成区块的背书交易的有序序列。
节点是区块链系统的通信实体。“节点”可以执行逻辑功能,其意义在于不同类型的多个节点可以在同一物理服务器上运行。节点被分组在受信域中,并且与以各种方式控制它们的逻辑实体相关联。节点可包括不同类型,诸如向背书者(例如,对等方)提交交易调用并向排序服务(例如,排序节点)广播交易提案的客户端或提交客户端节点。另一种类型的节点是对等节点,其可接收客户端提交的交易、确认交易并维护区块链交易的分类账的状态和副本。对等方也可以具有背书者的角色,尽管这不是必需的。订购服务节点或订购者是为所有节点运行通信服务的节点,并且当确认交易并修改区块链世界状态时,其实现递送保证,例如广播到系统中的每个对等节点,这是初始区块链交易的另一名称,其通常包括控制和设置信息。
分类账是区块链的所有状态转换的排序的、防篡改的记录。状态转换可以由参与方(例如,客户端节点、排序节点、背书者节点、对等节点等)提交的链码调用(即,交易)产生。交易可以导致一组资产键-值对被提交给分类账作为一个或多个操作数,诸如创建、更新、删除等。分类账包括用于以区块存储不可改变的有序记录的区块链(也称为链)。分类账还包括维护区块链的当前状态的状态数据库。通常每个通道有一个分类帐。每个对等节点为它们是其成员的每个通道维护分类账的副本。
链是交易日志,其被构造为散列链接(hash-linked)的区块,并且每个区块包含N个交易的序列,其中N等于或大于1。区块头包括区块交易的散列,以及前一区块头的散列。以这种方式,可以对分类账上的所有交易进行排序并且将其加密地链接在一起。因此,在不破坏散列链接的情况下,不可能篡改分类账数据。最近添加的区块链区块的散列表示在其之前到来的链上的每个交易,使得可以确保所有对等节点处于一致且受信的状态。该链可被存储在对等节点文件系统(即,本地、附加存储、云等)上,从而高效地支持区块链工作负载的仅附加性质。
不可变分类账的当前状态表示包括在链交易日志中的所有键的最新值。因为当前状态表示通道已知的最近的键值,所以它有时被称为世界状态。链码调用针对分类账的当前状态数据执行交易。为了使这些链码交互作用有效,可将键的最新值存储在状态数据库中。状态数据库可以简单地是链的交易日志中的索引视图,因此可以在任何时间从链中重新生成。在对等节点启动时,并且在接受交易之前,可以自动恢复(或者如果需要的话,可以生成)状态数据库。
当交易或其它请求(处理、存储等)由诸如集中式数据库的单个系统处理时,系统可以基于集中式系统何时接收到请求来顺序地处理每个订单以遵守时间优先级。然而,在并行处理系统中,请求可由多个系统并行处理,在此期间订单顺序可改变。这种并行性可能导致在市场实践中不可接受的不公平性。为了确保公平性,应该基于应用接受订单的时间来对订单进行排序。
然而,在诸如区块链之类的分布式分类账技术(DLT)中难以确保应用的时间戳的正确性,因为对等节点(即,客户端应用程序、对等(背书者)和订购者等)并行地异步地工作。此外,每个节点可以属于不同的组织。结果,时间戳可能被伪造或以其他方式错误地生成。例如,应用程序(客户端节点)可能对交易放置任意不正确的时间戳,以便对交易具有较高的时间优先级。作为另一个例子,背书者对等方可以延迟对来自其他对等方的交易提案的响应,以便在由与该对等方在同一组织中的应用程序发出的交易上获得相对的优势。
示例实施例通过提供评估区块链请求(例如,交易等)内的时间戳信息以得到伪造的时间戳的区块链网络来克服这些缺点。此外,区块链网络可修改伪造的时间戳信息,并基于校正的时间戳信息存储交易。在一些实施例中,网络可以减少伪造时间戳的对等节点的信誉,使得当提交新的交易时和/或当背书由其他对等节点提交的交易时,该对等节点被网络高度审查。如本文所述,伪造的时间戳可以指故意添加到请求的不正确的时间戳,或者它可以包括已经被故意延迟的消息以创建太晚并因此不公平的实际时间戳。
这里描述和描绘的本解决方案的一些益处包括对分布式分类账技术中的交易给出的定时(时间戳)的准确性的改进。在这样做时,即使当分类账具有诸如区块链中的非受信成员时,系统也创建顺序的公平性。可以通过背书对等节点来监视和评估时间戳信息。如果背书节点确定时间戳值已被提交节点伪造,则背书节点可将时间戳值改变为校正值。背书节点可基于在背书节点和提交对等节点之间测量的网络延迟来确定时间戳是否被伪造。此外,背书节点可基于网络延迟确定交易的建议时间戳,并将该值与提交节点提供的时间戳进行比较。如果建议时间戳和提交时间戳相差大于阈值,则背书节点可以将时间戳值改变为建议时间戳。
区块链与传统数据库的不同之处在于,区块链不是中央存储,而是分散的、不可变的和安全的存储,其中节点必须共享对存储中的记录的改变。区块链中固有的并且帮助实现区块链的一些属性包括但不限于不可改变的分类账、智能合同、安全性、隐私、分散、共识、背书、可访问性等,其在本文中被进一步描述。根据各个方面,使用区块链的背书、共识和分布式属性来实现时间戳公平性,这些属性对于区块链是固有且唯一的。特别地,该系统不仅仅依赖于由背书对等节点进行的意见/确定。相反,提交对等节点可以接收修改后的时间戳,并且当提交对等节点确定背书对等节点已经将不正确的时间戳添加到交易时,生成背书对等节点的信誉值。这可以确保背书对等节点和提交对等节点之间的平衡。
此外,提交对等节点可将包括在区块链内的交易传输到排序节点。排序节点可评估提交节点提供的原始时间戳、背书节点提交的修改的时间戳、背书节点的信誉等,并确定交易的最终时间戳。在一些实施例中,排序节点可基于由背书对等节点和/或提交对等节点提供的时间戳的加权平均或加权组合来生成最终时间戳。最终时间戳可以用于对具有数据区块中的一组交易的交易进行排序。
存在区块链平台采用的多种共识机制。所提出的解决方案是在诸如HyperdigramFabric的共识机制等的共识机制之上设计的,其中区块链网络包括客户端应用、对等节点和排序服务节点。客户端应用是向区块链网络提交请求的前端服务。对等节点是管理分布式分类账的副本的节点。一些对等节点被称为背书节点(或背书对等方),其从客户端应用接收请求,验证该请求,并将其背书返回给客户端应用。每个背书是数字签名的消息,其包括原始请求、由背书节点确认的有效性、以及任何其他信息。排序服务节点是负责对区块链网络中的请求进行统一排序的特殊节点。客户端应用和对等方中的每一个属于作为区块链网络参与者的组织(或实体)之一。
在Hyperdigram Fabric的机制中,以下面的方式达成共识。首先,客户端应用程序向一个或多个背书节点发送请求,并接收背书。背书策略是针对每种类型的请求预定义的,以确定请求有效需要来自哪个组织的多少请求。因此,客户端应用程序从属于一个或多个组织的一个或多个背书对等方收集足够数量的背书。其次,在收集了足够的背书之后,客户端应用程序将该请求连同所收集的背书一起提交给排序服务。第三,排序服务节点接收来自多个客户端应用程序的请求,以统一的方式对它们排序,并传递到对等节点。第四,然后每个对等节点接收请求并将其存储到分布式分类账的其自己的副本中。该机制确保请求在区块链网络中的对等方的所有副本中以相同的顺序被完全排序。
在Hyperdigram Fabric的原始共识机制中,背书对等方仅负责评估交易内容并导出产生的读写集合,而排序对等方负责以公平的方式对交易排序。所提出的想法扩展了当前的共识机制,使得以分散的方式做出关于交易到达定时的共识。它还考虑到通过遵守区块链的分散性质,每个背书对等方和提交对等方(例如,客户端应用程序等)可能表现得不诚实的可能性。本文的系统改进了区块链内的交易的时间顺序。
图1示出了根据示例实施例的用于区块链交易的时间戳协定的区块链网络100。参照图1,区块链网络100包括多个对等节点120和123以及排序节点130,它们经由诸如因特网、专用网等的网络140通信。这里,对等节点120和123可以对应于不同的非受信实体,但是实施例不限于此。每个对等节点120-123能够充当提交节点(客户端节点),用于提交交易以存储在区块链上。区块链可被存储在分布式分类账内,分布式分类账在所有对等节点120-123之间被复制。对等节点120-123中的每一个也能够充当背书节点。
在图1的示例中,客户端110向对等节点123提交交易请求,以在由区块链网络100管理的区块链内执行和存储。该交易可以被转发到背书对等节点120和121,这可以由一个或多个背书策略来预定义。交易从对等节点123提供给背书对等节点120和121,并且包括表示交易何时被提交给对等节点123的时间戳。然而,如果对等节点123不诚实地行为,则对等节点123可以减少时间戳(即,减少时间等)以改进客户端交易的顺序,使得其在时间上更早,从而提供在与区块链上存储的相同项目或资产相关联的另一提交的交易之前跳出或到来的可能性。
因此,背书对等节点120和121中的每一个可评估由对等节点123添加的时间戳。例如,对等节点120-123可各自包括监视线程,该监视线程例行地测量各个对等节点120-123之间的网络延迟值。因此,每个对等节点可维护区块链网络中相应的对等节点和其他对等节点之间的网络延迟值表。网络延迟值可以基于线程随机地、周期性地等被更新,以反映随着时间的当前和更新的网络条件。基于背书对等节点(例如,对等节点120)和提交节点123之间的网络延迟,背书对等节点可确定其自己的关于交易何时被客户端110提交给提交对等节点123的建议时间戳。换言之,背书对等节点可基于当前网络延迟条件来检查由提交对等节点123添加的时间戳是否准确。如果原始时间戳偏离建议时间戳,则背书对等节点可以确定原始时间戳是无效的、不正确的、伪造的、错误的等等。在任何情况下,背书对等节点可修改时间戳、背书该交易、并将该交易发送回提交对等节点123。该过程可以由所有背书对等节点(例如120和121)为每个交易执行。
对等节点123可以检测时间戳是否已经被背书对等节点120和/或121修改。在时间戳已被修改的情况下,对等节点123可以基于时间戳值的变化来确定背书对等节点120和121的信誉值。在一个背书对等节点正有不诚实行为的情况下,其它对等节点将可能具有与提交对等节点123所提供的原始时间戳类似的时间戳值。然而,如果提交对等节点123正有不诚实行为,则来自背书对等节点的所有时间戳值将被修改。因此,当最终交易提案被发送到排序节点130时,排序节点130可容易地确定由提交对等节点123提供的时间戳是否应被给予更大的权重,或者由背书节点120和121提供的时间戳是否应被给予更大的权重。在一些情况下,排序节点可给予每个时间戳权重,并基于来自提交对等节点123以及背书对等节点120和121的时间戳的加权组合来确定最终时间戳。这里,可以为每个节点120、121和123赋予不同的相应权重。
在一些实施例中,当清楚提交对等节点已经篡改了时间戳(即,所提出的时间戳与原始时间戳显著不同)时,背书对等节点可以拒绝背书交易。
图2A示出了根据示例实施例的区块链结构配置200。参考图2A,区块链架构200可包括某些区块链组件,例如,一组区块链节点202。区块链节点202可包括一个或多个节点204-210(这四个节点仅通过示例来描述)。这些节点参与多个活动,诸如区块链交易增加和验证过程(共识)。区块链节点204-210中的一个或多个可基于背书策略背书交易,并可为架构200中的所有区块链节点提供排序服务。区块链节点可启动区块链认证并设法写入存储在区块链层216中的区块链不可变分类账,其副本也可存储在基础物理基础设施214上。区块链配置可包括一个或多个应用程序224,其链接到应用编程接口(API)222以访问和执行存储的程序/应用程序代码220(例如,链码、智能合同等),其可根据参与者所寻求的定制配置来创建,并且可维护其自己的状态、控制其自己的资产、以及接收外部信息。这可以被部署为交易,并且经由附加到分布式分类账而被安装在所有区块链节点204-210上。
区块链基础或平台212可包括区块链数据、服务(例如,加密信托服务、虚拟执行环境等)的各层,并支持可用于接收和存储新的交易并提供对试图访问数据条目的审核器的访问的物理计算机基础设施。区块链层216可展示提供对处理程序代码和参与物理基础设施214所必需的虚拟执行环境的访问的接口。加密信托服务218可用于验证诸如资产交换交易等交易并保持信息私密。
图2A的区块链架构配置可经由区块链平台212所暴露的一个或多个接口以及所提供的服务来处理和执行程序/应用程序代码220。代码220可以控制区块链资产。例如,代码220可以存储和传送数据,并且可以由节点204-210以具有条件或服从执行的其它代码元素的智能合同和关联链码的形式执行。作为非限制性示例,可以创建智能合同以执行提醒、更新和/或改变、更新等的其他通知。智能合同本身可以用于识别与分类账的授权和访问要求以及使用相关联的规则。例如,读集合226可由区块链层216中包括的一个或多个处理实体(例如,虚拟机)处理。写集合228可以包括对键值的改变。物理基础设施214可以用于检索本文所述的任何数据或信息。
在链码内,智能合同可以经由高级应用和编程语言来创建,并且然后被写入区块链中的区块。智能合同可以包括向区块链(例如,区块链对等方的分布式网络)注册、存储和/或复制的可执行代码。交易是智能合同代码的执行,其可以响应于与智能合同相关联的条件被满足而被执行。智能合同的执行可以触发对数字区块链分类账的状态的可信修改。由智能合同执行引起的对块链分类账的修改可以通过一个或多个共识协议在整个区块链对等方的分布式网络中自动复制。
智能合同可以以键-值对的格式将数据写入区块链。此外,智能合同代码可以读取存储在区块链中的值,并在应用操作中使用它们。智能合同代码可以将各种逻辑操作的输出写入区块链中。该代码可用于在虚拟机或其它计算平台中创建临时数据结构。写入到区块链的数据可以是公共的和/或可以被加密并被维护为私有的。由智能合约使用/生成的临时数据由所提供的执行环境保持在存储器中,然后一旦区块链所需的数据被识别就被删除。
链码可以包括具有附加特征的智能合同的代码解释。如这里所述,链码可以是部署在计算网络上的程序代码,其中它在共识过程期间由链式验证器一起执行和验证。链码接收散列并从区块链检索与通过使用先前存储的特征提取器创建的数据模板相关联的散列。如果散列标识符的散列与从所存储的标识符模板数据创建的散列匹配,则链码向所请求的服务发送授权密钥。链码可以向区块链写入与加密细节相关联的数据。
图2B示出了根据示例实施例的区块链的节点之间的交易流250的示例。参考图2B,交易流可包括由应用客户端节点260发送到背书对等节点281的交易提案291。背书对等方281可以验证客户端签名并执行链码函数以发起交易。输出可以包括链码结果、在链码中读取的一组键/值版本(读集合)以及在链码中写入的一组键/值(写入集)。如果批准,则将提案响应292连同背书签名一起发送回客户端260。客户端260将背书组装成交易有效载荷293,并将其广播到排序服务节点284。然后,排序服务节点284将排序的交易作为区块在通道上递送给所有对等方281-283。在提交到区块链之前,每个对等方281-283可以验证交易。例如,对等方可以检查背书策略以确保指定对等方的正确分配已经签署了结果并对照交易有效载荷293来认证签名。
客户端节点260可以通过构造请求并将其发送到作为背书者的对等节点281来发起交易291。可以有多于一个背书者,但是为了方便起见,这里示出了一个。客户端260可包括利用诸如NODE、JAVA、PYTHON等支持软件开发工具包(SDK)的应用程序,它利用可用的API来生成交易提案。交易提案291是调用链码函数的请求,以便可以将数据读取和/或写入分类账(即,写入资产的新键值对)。SDK可以用作填补将交易提案封装为适当的架构化格式(例如,远程过程调用(RPC)上的协议缓冲区),并采用客户端的加密证书来产生交易提案的唯一签名。
作为响应,背书对等节点281可以验证(a)交易提案形成得很好,(b)交易在过去尚未提交(重放攻击保护),(c)签名有效,(d)提交者(在该示例中为客户端260)被正确授权在该通道上执行所建议的操作,以及(e)原始时间戳有效,或者以其他方式将时间戳修改为正确。背书对等节点281可以将交易提案输入作为所调用的链码函数的自变量。然后,对照当前状态数据库执行该链码,以产生包括响应值、读集合和写集合的交易结果。然而,此时不对分类账进行更新。在292,该组值连同背书对等节点281的签名一起作为提案响应292被传递回客户端260的SDK,该SDK解析应用程序要消耗的有效载荷。
作为响应,客户端260的应用程序检查/验证背书对等方签名,并比较提案响应以确定提案响应是否相同。如果链码只查询分类帐,则该应用程序将检查查询响应,并且通常不向排序节点服务284提交交易。如果客户应用程序想要将该交易提交给排序节点服务284以更新分类账,则该应用程序确定在提交之前是否已经满足了指定的背书策略(即,该交易所必需的所有对等节点是否背书了该交易)。这里,客户端可以仅包括交易的多方中的一方。在这种情况下,每个客户端可以具有它们自己的背书节点,并且每个背书节点将需要背书该交易。该体系结构使得即使应用程序选择不检查响应或以其它方式转发未背书的交易,背书策略仍将由对等方实施并在提交确认阶段得到支持。
在成功检查之后,在步骤293中,客户端260将背书汇集到交易中,并在交易消息内将交易提案和响应广播到排序节点284。交易可以包含读/写集合、背书对等方签名和通道ID、以及这里描述的时间戳信息和信誉信息。排序节点284不需要检查交易的整个内容以便执行其操作,而是排序节点284可以简单地从网络中的所有通道接收交易,确定每个交易的最终时间戳,按通道按时间顺序对它们排序,并且按通道创建交易区块。
交易区块在通道上从排序节点284被递送到所有对等节点281-283。验证区块内的交易294,以确保满足任何背书策略,并且确保自从由交易执行生成读集合以来,读集合变量的分类账状态没有改变。区块中的交易被标记为有效或无效。此外,在步骤295中,每个对等节点281-283将区块附加到通道的链上,并且对于每个有效交易,将写集合提交给当前状态数据库。发出事件,以通知客户端应用程序该交易(调用)已经被不可变地附加到链上,以及通知该交易是有效还是无效。
图3示出了许可的区块链网络300的示例,其特征在于分布式、分散式对等架构,以及管理用户角色和许可的证书授权机构318。在该示例中,区块链用户302可向许可的区块链网络310提交交易。在该示例中,交易可以是部署、调用或查询,并且可以通过利用SDK的客户端侧应用程序、直接通过REST API等来发出。受信商业网络可以提供对诸如审计方(例如,美国权益市场中的证券交易委员会)的监管方系统314的访问。同时,节点308的区块链网络运营商系统管理成员权限,诸如将监管方系统310登记为“审核员”并且将区块链用户302登记为“客户端”。审核员可能只限于查询分类帐,而客户端可以被授权部署、调用和查询某些类型的链码。
区块链开发者系统316编写链码和客户端应用程序。区块链开发者系统316可通过REST接口将链码直接部署到网络。为了在链码中包括来自传统数据源330的凭证,开发者系统316可以使用带外连接来访问数据。在该示例中,区块链用户302通过对等节点312连接到网络。在进行任何交易之前,对等节点312从证书授权机构318检索用户的登记和交易证书。在一些情况下,区块链用户必须拥有这些数字证书以便在许可的区块链网络310上交易。同时,可能需要试图驱动链码的用户验证他们在传统数据源330上的证书。为了确认用户的授权,链码可以通过传统的处理平台320使用带外连接到该数据。
图4A示出了根据示例实施例的背书对等节点修改时间戳的过程400A。参考图4A,客户端对等节点A 410从客户端提交交易供对等节点B 420和对等节点C 430背书。作为响应,每个背书对等方(例如,对等节点A 420和对等节点B 430等)可执行以下步骤以尝试背书交易提案txi。例如,每个对等方可以通过使用其他手段(例如,ICMP等)来测量相应的对等方与对等节点A 410(即,La-pj)之间的网络延迟,每个对等方可以在背书对等方接收到交易提案txi时记录时间戳rji。然后计算rji-ai作为客户端对等节点A 410与其自身之间的估计网络延迟。这里,如果估计的网络延迟大于预测量的网络延迟,并且差值大于可接受的误差(即rji-ai-La-pj>err),则相应背书对等方可确定对等节点A 410已经对交易施加了伪造的时间戳。作为响应,在422和432,背书对等方可基于所提议的新时间戳来校正或修改时间戳,和/或在424和434,可通过背书或不背书来确定是否拒绝交易提案。
在图4A的例子中,背书对等节点B 420和背书对等节点C 430分别在424和434中确定背书该交易。在背书交易之前,背书对等方可以确定提议的或修改的时间戳。为了确定修改的时间戳,背书对等方可以基于接收到背书请求时创建的其自己的时间戳减去网络延迟(即i.e.,pji=rji-La-pj)来估计对等节点A处txi的正确时间戳。在执行链码之后,对等方将估计的时间戳(pji)附加到背书,并将背书转发回客户端节点A 410。
根据各种实施例,每个背书者可以考虑网络延迟,因为每个背书者直接从生成该交易的对等节点接收客户端应用程序的交易,使得其可以(并且旨在)评估客户端应用程序的时间戳的正确性。因此,为了准确,有必要考虑客户端应用程序和背书对等方之间的网络延迟。另一方面,一些对等方可能不公平并且试图延迟一些客户端应用程序的交易。订购者(图4C所示)试图通过考虑背书对等方的信誉来避免这种情况。在一些实施例中,网络延迟可以由背书对等方本身来确定。例如,可以实现新的网络延迟监视线程,其通过使用ICMP协议(即ping)来定期测量背书对等方与网络的其他对等节点之间的网络延迟并将其存储在例如内存存储器或文件中。
在一些实施例中,每个背书对等方可以定义时间戳偏差的阈值。作为非限制性的假设示例,阈值可以是10秒。在该示例中,背书对等方(i)如果时间戳的偏差大于10秒,则可以拒绝背书,否则(ii)固定时间戳。实际上,(i)可以是可选的,并且对等方可以总是固定时间戳。但是对等方具有(i)选项的原因可能是当对等方确定客户端应用程序正放置伪造的时间戳并且表现不公平时。
图4B示出了根据示例实施例的客户端节点A410生成信誉值的过程400B,并且图4C示出了根据示例实施例的排序节点确定最终时间戳的过程400C。在该示例中,背书节点B420和背书节点C 430两者都背书了由客户端节点A 410提交的具有在相应节点处计算出的修改后的时间戳的交易。作为响应,客户端节点A 410可以识别修改的时间戳,并且为每个背书节点生成信誉值。例如,客户端节点A 410可以确定背书对等方在背书中的估计时间戳(pji)和应用程序的时间戳(ai)不同,并且它们的差(pji–ai)大于阈值。在这种情况下,客户端节点A 410可以生成并向该交易附加背书对等方412和414的否定信誉。同样,当背书被错误地拒绝时,客户端节点410A可以附加对等方的否定信誉。
包括对等方A、B和C的区块链网络的背书策略定义了提交每个交易需要多少背书。因此,如果客户端节点A 410接收到足够的背书,甚至排除了任何拒绝背书的对等方,则它仍然可以将交易提交给排序节点440,如图4C所示。然后排序节点440可基于时间戳对交易排序,并生成具有已排序交易的数据区块。此外,排序节点440可以将具有已排序交易的区块递送到每个对等方(A、B和C等)以便存储在分布式分类账上。则每个对等方将根据背书策略检查每个交易是否具有足够的背书,并将该交易提交给分类帐。
再次参考图4B,客户端节点A 410可以确定各个背书对等方A 420和B 430的每一个的信誉,并将其发送到排序节点440,该排序节点可以使用对等方信誉来确定最终时间戳442。在一些实施例中,为了在对等方之间共享信誉,信誉可被存储在分类账数据中,该分类账数据将被自动传播到具有相同分类账的所有对等方。
客户端节点A 410可以通过比较客户端节点A 410在txi(ai)上的时间戳与背书对等方的时间戳(诸如对等节点A 420和对等节点B 430)之间的差来决定每个对等方的誉。当时间戳差异大于所有对等方的平均值时,客户端节点A 410可以向对等方指派较低的信誉。在该示例中,当计算平均值时,客户端节点A 410可以忽略与客户端节点A 410的时间戳相比时间戳差值大于可允许误差的对等方。
以下是由客户端节点A 410计算信誉的示例步骤。(这只是一个示例,其它方法也是可能的)
设repj是peerj的声誉,由0和1之间的数字表示(即,1是最高的)。令err为容许误差。在移除所有pji之后,但在(pji–ai)>err的情况下,获得作为对等方pj(j=1…k)对txi的时间戳的平均值的pi-ave。获得s作为pj(j=1…k)的标准偏差,但是在去除所有pji之后,其中(pji–ai)>err。如果repi<0,则repj=1-(pji–pi-ave)/s,然后repi=0。
图4C示出了根据示例实施例基于组444中的交易的修改的最终时间戳值排序节点440确定最终时间戳442并且来布置组444中的交易的过程400C。在图4C的示例中,排序节点440可以确定其自己的txi的时间戳oi。在该示例中,排序节点440可将其时间戳oi计算为客户端节点A 410的时间戳ai和背书对等方的时间戳(p1i,p2i,…)的加权平均,其中权重是从每一对等方的信誉确定的。可以存在多种类型的信誉,包括每个交易的对等方rj的信誉(repj)和累积信誉(REPj)。排序节点440可对从客户端节点发送的交易给予惩罚,该客户端节点属于与具有差信誉的对等方相同的组织。惩罚可以作为对应用程序的时间戳的很小权重来给出。
订购者可以根据oi订购或以其他方式安排交易。(具有较小oi的交易将被放置在队列中的较早位置)。在该示例中,排序节点440可以基于由客户端节点A 410提供的原始时间戳与由排序节点440创建的最终时间戳442之间的差,将交易从其原始顺序中移出,并移入新的修改后的顺序,如框444所示。排序节点440可以通过计算应用程序和对等方的时间戳的平均值来获得时间戳Oi。订购者还可以使用每个对等方的信誉作为权重,因此,具有较低信誉的对等方的时间戳对平均值具有较小的影响。以下是计算时间戳Oi的示例步骤(这仅仅是一个示例,并且其他方法是可能的)。获得pi-ave作为对等方pj(j=1…k)对txi的时间戳的平均。令ni为向txi提供背书的对等方的数量。
Oi=pi-ave+(Σk j=1(pji–pi-ave)*repi*REPi)/ni。
图5A示出了根据示例实施例的基于时间戳背书区块链交易的方法510。例如,方法510可由区块链网络内的客户端应用程序执行。参考图5A,在511中,该方法可包括从客户端(也称为客户端对等节点或客户端节点)接收区块链请求。例如,区块链请求可包括将由区块链网络内的一个或多个对等节点背书的交易。在512,该方法可包括基于客户端应用(或托管客户端应用的系统)和背书节点之间的网络路径,确定提交交易的客户端应用和执行该方法的背书节点之间的网络延迟。这里,网络延迟可通过在背书对等节点上运行的监视线程来测量,该监视线程周期性地或随机地测量背书节点和区块链网络中的其它对等节点之间的网络延迟,并将延迟值存储在背书对等节点的存储器内所维护的表或文件中。
在513,该方法可包括从区块链请求提取时间戳。例如,时间戳可以被包括在区块链消息的头或数据段内,并且可以由提交交易以用于背书的对等节点添加到消息。在514,该方法可以包括基于客户端应用程序和背书节点之间的网络延迟来确定所述提取的时间戳是否无效。此外,在515,该方法可包括响应于确定时间戳有效,生成区块链请求的背书并将背书传送到客户端应用程序。在一些实施例中,响应于确定时间戳是无效的,该方法还可以包括拒绝背书区块链请求。在一些实施例中,所述方法还可以包括模拟区块链请求,并且响应于时间戳被确定为有效并且所述区块链请求被成功模拟而生成所述背书。
根据各种实施例,确定所提取的时间戳是否无效可以包括基于网络延迟来估计区块链请求的时间戳,并且确定所提取的时间戳是否在所估计的时间戳的预定义阈值内。在一些实施例中,确定所提取的时间戳是否无效可以包括确定所提取的时间戳是否太早。
图5B示出了根据示例实施例的修改区块链交易的时间戳的方法520。例如,方法520可由区块链网络内的背书对等节点执行。参考图5B,在521,所述方法可包括从托管在客户端系统上的客户端应用程序接收区块链请求。例如,区块链请求可包括由被称为客户端节点的另一对等节点提交的交易。在522,该方法可包括从区块链请求中提取时间戳。这里,时间戳可以由向背书对等节点提交交易的客户端应用程序添加到交易。
在523,该方法可包括基于由客户端应用程序在客户端应用程序和背书节点之间确定的网络延迟来确定所提取的时间戳是否不正确。此外,响应于确定所提取的时间戳不正确,在524,所述方法可包括确定所述区块链请求的正确时间戳,通过用正确时间戳替换所提取的时间戳来修改区块链请求,以及将具有正确时间戳的区块链请求传送到客户端应用程序。在一些实施例中,该方法还可包括基于对等节点和背书节点之间的网络路径来确定客户端应用程序和背书节点之间的网络延迟。在一些实施例中,确定所提取的时间戳是否不正确可以包括基于网络延迟来估计区块链请求的时间戳,并且确定所提取的时间戳是否在所估计的时间戳的预定义阈值内。在一些实施例中,修改可以包括用估计的时间戳替换提取的时间戳。在一些实施例中,该方法可以包括确定所提取的时间戳是否不正确包括确定所提取的时间戳是否太早。
图5C示出了根据示例实施例的基于有效性信息修改交易的原始时间戳的方法530。例如,方法530可由区块链网络的排序节点执行。参考图5C,在531,该方法可包括从区块链网络中的客户端应用程序接收区块链请求。例如,该请求可以包括由客户端节点提交的并由一个或多个其他背书节点背书的交易。在532,方法可包括从区块链网络中的一个或多个背书节点接收包括在区块链请求中的时间戳的有效性信息。例如,有效性信息可包括由一个或多个背书对等节点提出的区块链请求的不同提议的时间戳。在一些实施例中,有效性信息还可以包括关于背书对等节点的信誉信息,用于向所提议的时间戳赋予权重。
在533,该方法可包括基于从一个或多个背书节点接收的有效性信息来修改包括在区块链请求中的时间戳。修改可以包括生成交易的最终时间戳值,该最终时间戳值不同于由向区块链网络提交交易的客户端应用添加到交易的原始时间戳。例如,修改可包括响应于有效性信息指示时间戳在时间上太早,将附加时间添加到包括在区块链请求中的时间戳。
在534,所述方法可包括基于相对于一组区块链请求中的其它区块链请求的时间戳的修改的时间戳,在该组区块链请求之间排序区块链请求。例如,区块链交易可以基于时间戳值被排序或以其他方式插入具有其他交易的队列中。这里,与原始时间戳相比,修改的时间戳可以改变区块链交易在队列中被插入、排列或排序的定位。队列可被用于存储一组区块链交易,该组区块链交易将被存储在区块链的数据区块中。在535,该方法可包括将排序的一组区块链请求存储在数据区块的散列链接链中的数据区块内。在一些实施例中,该方法还可包括将数据区块发送到对等节点和一个或多个其他对等节点以存储在区块链中。
图5D示出了根据示例实施例的基于时间戳的加权平均来确定交易的最终时间戳的方法540。例如,方法540可由区块链网络的排序节点执行。参考图5D,在541,所述方法可包括从区块链网络的多个背书节点接收区块链请求(例如,交易、存储请求等)的多个背书。根据各种实施方式,多个背书可以包括由多个背书节点为区块链请求提议的不同时间戳。例如,每一背书可包括背书对等节点所提议的时间戳,该时间戳指示客户端对等节点上的客户端应用生成交易的时间点。
在542,该方法可包括基于多个背书节点的先前时间戳信息将权重应用于由多个背书节点给出的不同时间戳。权重可基于区块链网络内由其他背书节点确定的背书节点的准确度来确定。在一些实施例中,多个对等节点中的每个背书节点可包括基于先前时间戳准确度的准确度值。在543,该方法可包括基于多个对等节点的加权时间戳来确定区块链请求的最终时间戳,并且在544,基于最终确定的时间戳将区块链请求安排在数据区块中。在一些实施例中,所述安排可包括基于相对于队列中的区块链请求的时间戳最终确定的时间戳,将区块链请求插入到区块链请求的排序队列中。在一些实施例中,该方法还可包括将包括区块链请求的数据区块存储在数据区块的散列链接链内。
图5E示出了根据示例实施例的确定对等节点的信誉值的方法550。例如,方法550可由向区块链网络、客户端设备等提交交易的客户端应用(客户端节点)执行。参考图5E,在551,方法可包括接收区块链请求,其包括由包括在区块链网络内的一个或多个背书节点添加的时间戳。这里,时间戳可以是由至少一个背书对等节点添加到区块链请求的时间戳。时间戳可以是客户端节点生成交易的提议时间。在552,该方法可包括识别由一个或多个背书节点中的背书节点添加的时间戳是对由客户端应用程序提供的先前添加的时间戳的修改。即,客户端应用可以确定背书节点已经改变了由客户端应用程序最初添加的时间戳。
在553,该方法可以包括基于由背书节点添加的时间戳与由计算节点提供的先前添加的时间戳之间的差来确定背书节点的信誉值。在一些实施例中,信誉值可以基于从包括由背书节点添加的时间戳的先前的区块链请求确定的信誉值的累积来确定。在554,该方法可进一步包括将确定的背书节点的信誉值传送到区块链网络内的排序节点。在一些实施例中,该方法还可包括基于先前添加的时间戳与由对等节点添加的时间戳之间的时间差来确定由背书节点添加的时间戳具有太多延迟。
在一些实施例中,553中的确定可以包括响应于由背书节点添加的时间戳与先前添加的时间戳之间的差大于区块链网络上的多个背书节点之间的平均差,向背书节点分配较低的信誉值。作为另一示例,553中的确定可以包括响应于由背书节点添加的时间戳与先前添加的时间戳之间的差小于区块链网络上的多个背书节点之间的平均差,向背书节点分配较高的信誉值。在一些实施例中,该方法还包括忽略由背书节点添加的时间戳,并将区块链请求与先前添加的时间戳一起提交给排序节点。
图5F示出了根据示例实施例的基于加权信誉确定最终值的方法560。例如,方法560可由区块链网络的排序节点执行,该排序节点接收区块链交易和区块链交易的背书,并对交易进行排序以存储在区块链上的数据区块中。参考图5F,在561,该方法可包括接收对区块链的区块链请求。存储请求可包括交易,该交易包括由区块链网络的多个背书节点提议的多个不同值(例如,时间戳、财务、意见、医疗诊断等)。这里,每个背书对等节点可以建议要应用于交易的值,该值不同于由提交(客户端)节点添加的原始值。例如,不同的时间戳可以表示客户端向区块链网络提交存储请求的估计时间。然而,这些值不限于时间戳。
在562,该方法可包括基于多个背书节点的相应信誉使用不同值的加权组合来确定区块链请求的最终值。例如,该确定可以包括将较高权重应用于由具有较高信誉的背书节点提议的值,并且将较低权重应用于由具有较低信誉的不同背书节点提议的不同值。在563,该方法可包括基于确定的最终值在一组区块链请求内对区块链请求排序。在564,该方法可以包括将排序的该组存储请求存储在数据区块的散列链接链中的数据区块内。
图6A示出了被配置为根据示例实施例的一个或多个示例操作方法在区块链上执行各种操作的示例物理基础设施。参考图6A,示例配置600A包括具有区块链620和智能合同640的物理基础设施610,其可以执行包括在任何示例实施例中的任何操作步骤612。步骤/操作612可包括在一个或多个流程图和/或逻辑图中描述或描绘的一个或多个步骤。这些步骤可以表示输出或写入的信息,该信息是从驻留在计算机系统配置的物理基础设施610上的一个或多个智能合同640和/或区块链620写入或读取的。数据可以从执行的智能合同640和/或区块链620输出。物理基础设施610可以包括一个或多个计算机、服务器、处理器、存储器和/或无线通信设备。在一些实施例中,也可以执行被称为链码的智能合同640,以从区块链通知板检索区块链资源信息。
图6B图示了根据示例实施例的合同订约方和被配置成在区块链上实施智能合同条款的中介服务器之间的示例智能合同配置。参考图6B,配置650B可以表示由明确标识一个或多个用户设备652和/或656的智能合同640驱动的通信会话、资产转移会话或过程或规程。智能合同执行的执行、操作和结果可以由服务器654管理。智能合同640的内容可能需要由作为智能合同交易各方的实体652和656中的一个或多个进行数字签名。智能合同执行的结果可作为区块链交易被写入区块链。
图6C图示了根据示例实施例的合同订约方和被配置成在区块链上实施智能合同条款的中介服务器之间的示例智能合同配置。参考图6C,配置650可以表示由明确标识一个或多个用户设备652和/或656的智能合同630驱动的通信会话、资产转移会话或过程或规程。智能合同执行的执行、操作和结果可以由服务器654管理。智能合同630的内容可能需要由作为智能合同交易各方的实体652和656中的一个或多个进行数字签名。智能合同执行的结果可以作为区块链交易被写入区块链620。智能合同630驻留在区块链620上,区块链620以驻留在一个或多个计算机、服务器、处理器、存储器和/或无线通信设备上。
图6D示出了根据示例实施例的用于访问区块链的逻辑和数据的公共接口。参考图6D的示例,应用编程接口(API)网关662提供用于访问区块链逻辑(例如,智能合同630或其他链码)和数据(例如,分布式分类账等)的公共接口。在该示例中,API网关662是用于通过将一个或多个实体652和656连接到区块链对等方(即,服务器654)来在区块链上执行交易(调用、查询等)的公共接口。服务器654是区块链网络对等方组件,其保存世界状态的副本和分布式分类账,允许客户端652和656查询世界状态上的数据以及将交易提交到区块链网络中的分布式分类账,其中,取决于智能合同630和背书策略,背书对等方将运行智能合同630。
图7A示出了根据示例实施例的被添加到分布式分类账720的新区块730的过程700,并且图7B示出了根据示例实施例的用于区块链的区块结构730的内容。参照图7A,客户端(未示出)可以向区块链节点711、712和/或713提交交易。客户端可以是从任何源接收的指令,以在区块链上制定活动。作为示例,客户端可以是应用程序(基于SDK),该应用程序代表诸如设备、人或实体之类的请求者行事以提案对区块链的交易。多个区块链对等方(例如,区块链节点711、712和713)可维护区块链网络的状态和分布式分类账720的副本。
在区块链网络中可以存在不同类型的区块链节点/对等方,包括模拟并背书由客户端提出的交易的背书对等方,以及验证背书、验证交易并将交易提交给分布式分类帐720的提交对等方。在该示例中,区块链节点711、712和713可以执行背书者节点、提交者节点或两者的角色。
分布式分类账720包括以区块存储不可改变的有序记录的区块链722,以及维护块链722的当前状态(键值)的状态数据库724(当前世界状态)。每个通道可以存在一个分布式分类账720,并且每个对等方为其成员的每个通道维护其自己的分布式分类账720的副本。区块链722是交易日志,其被构造为散列链接区块,其中每个区块包含N个交易的序列。框(例如,区块730)可以包括诸如图7B中所示的各种组件。可以通过在当前区块的区块头内添加先前区块头的散列来产生区块的链接(图7A中的箭头所示)。这样,区块链722上的所有交易被排序并被加密地链接在一起,从而防止篡改区块链数据而不破坏散列链接。此外,由于链接,区块链722中的最新区块表示在其之前到来的每个交易。区块链722可以存储在对等文件系统(本地或附加存储)上,对等文件系统支持仅附加区块链工作负荷。
区块链722和分布式分类账720的当前状态可以被存储在状态数据库724中。这里,当前状态数据表示区块链722的链交易日志中曾经包括的所有密钥的最新值。链码调用针对状态数据库724中的当前状态执行交易。为了使这些链码交互非常有效,所有关键字的最新值都可以存储在状态数据库724中。状态数据库724可以包括区块链722的交易日志中的索引视图,并且因此可以在任何时间从链中重新生成。在接受交易之前,状态数据库724可以在对等方启动时自动恢复(或者如果需要的话生成)。
背书节点从客户端接收交易并基于模拟结果背书该交易。背书节点持有模拟交易提案的智能合同。背书交易所需的节点取决于可在链码内指定的背书策略。背书策略的一个例子是“大多数背书的对等方必须背书该交易”。不同的通道可以具有不同的背书策略。背书交易由客户端应用程序转发给排序服务710。
排序服务710接受背书交易,将它们排序成区块,并将这些区块传递给提交对等方。例如,当达到交易的阈值、定时器超时或另一条件时,排序服务710可以发起新的区块。排序服务710可基于本文所述的时间戳协议过程来操作,诸如基于来自区块链节点711-713的时间戳的加权平均值来计算每个交易的最终时间戳等。在图7A的示例中,区块链节点712是已经接收到用于存储在区块链722上的新数据区块730的提交对等方。
排序服务710可以由一组订购者组成。排序服务710不处理交易、智能合同或维护共享分类账。相反,排序服务710可接受背书的交易,确定交易的最终时间戳,并基于最终时间戳指定将这些交易提交给分布式分类账720的次序。区块链网络的体系结构可被设计成使得“排序”的特定实现(例如,Solo、Kafka、BFT等)变为可插式组件。
以一致的顺序将交易写入分布式分类帐720。交易的顺序被建立以确保对状态数据库724的更新在被提交给网络时是有效的。与通过加密难题的求解或挖掘来进行排序的加密货币区块链系统(例如Bitcoin等)不同,在该示例中,分布式分类帐720的各方可以选择最适合该网络的排序机制,诸如时间顺序排序。
当排序服务710初始化新区块730时,新区块730可被广播到提交对等方(例如,区块链节点711、712和713)。作为响应,每个提交对等方通过检查以确保读集合和写集合仍然匹配状态数据库724中的当前世界状态来验证新区块730内的交易。具体地,提交对等方可以确定在背书者模拟交易时存在的读数据是否与状态数据库724中的当前世界状态相同。当提交对等方验证交易时,交易被写入分布式分类账720上的区块链722,并且用来自读写集合的写数据更新状态数据库724。如果交易失败,即,如果提交对等方发现读写集合不匹配状态数据库724中的当前世界状态,则排序成区块的交易将仍然包括在该区块中,但它将被标记为无效,并且状态数据库724将不被更新。
参考图7B,存储在分布式分类账720的区块链722上的区块730(也称为数据区块)可以包括多个数据片段,诸如区块头732、区块数据734和区块元数据736。应当理解,各种所示的区块及其内容,例如图7B中所示的区块730及其内容,仅仅是为了示例的目的,而不是要限制示例实施例的范围。在一些情况下,区块头732和区块元数据736两者可以小于存储交易数据的区块数据734,然而这不是要求。区块730可以将N个交易(例如,100、500、1000、2000、3000等)的交易信息存储在区块数据734内。根据各种实施例,每一交易可包括由排序节点710添加的区块数据734内的最终时间戳信息735。最终时间戳信息735可以不同于(或修改)由提交节点提供的原始时间戳值。
区块730还可包括到区块头732内的(例如,图7A中的区块链722上的)前一个区块的链接。特别地,区块头732可以包括前一个区块头的散列。区块头732还可包括唯一的区块号、当前区块730的区块数据734的散列等。区块730的区块号可以是唯一的,并且以从零开始的递增/顺序次序来分配。区块链中的第一区块可以被称为创世区块(genesis block),创世区块包括关于区块链、其成员、存储在其中的数据等的信息。
块数据734可以存储记录在区块730中的每个交易的交易信息。例如,存储在区块数据734内的交易数据可以包括交易类型、版本、时间戳(例如,最终计算的时间戳等)、分布式分类帐720的通道ID、交易ID、时期、有效载荷可见性、链码路径(部署tx)、链码名称、链码版本、输入(链码和函数)、诸如公钥和证书的客户端(创建者)标识、客户端的签名、背书者的标识、背书者签名、提案散列、链码事件、响应状态、命名空间、读集合(由交易读取的密钥和版本的列表等)、写集合(密钥和值的列表等)、开始密钥、结束密钥、密钥的列表、Merkel树查询摘要等中的一个或多个。可以为N个交易中的每一个存储交易数据。
根据各种实施例,区块730的区块数据734部分可以在最终时间戳信息735内存储关于对区块链交易的时间戳的修改、更新、删除、添加或其他改变的信息。因此,对交易的时间戳信息的修改可以被存储在区块链(即,区块的散列链接的链)内。
区块元数据736可以存储元数据的多个字段(例如,作为字节数组等)。元数据字段可以包括区块创建上的签名、对最后配置区块的引用、标识区块内的有效和无效交易的交易过滤器、对区块进行排序的排序服务的最后偏移量持久保存等等。签名、最后配置区块和订购者元数据可以由排序服务710添加。同时,区块的提交节点(诸如区块链节点712)可基于背书策略、读/写集合的验证等来添加有效性/无效性信息。交易过滤器可以包括大小等于区块数据734中的交易数量的字节数组和标识交易是有效/无效的验证码。
上述实施例可以以硬件、由处理器执行的计算机程序、固件或上述组合来实现。计算机程序可以被包含在计算机可读介质上,例如存储介质。例如,计算机程序可以驻留在随机存取存储器(“RAM”)、闪存、只读存储器(“ROM”)、可擦除可编程只读存储器(“EPROM”)、电可擦除可编程只读存储器(“EEPROM”)、寄存器、硬盘、可移动磁盘、光盘只读存储器(“CD-ROM”)或本领域已知的任何其它形式的存储介质中。
示例性存储介质可耦合到处理器,使得处理器可从存储介质读取信息并向存储介质写入信息。在替代方案中,存储媒体可与处理器成一体式。处理器和存储介质可以驻留在专用集成电路(“ASIC”)中。在替代方案中,处理器和存储介质可作为离散组件而驻存。例如,图8示出了示例计算机系统体系结构800,其可以表示或集成在上述组件等中的任一个中。
图8不旨在对本文所述的应用的实施例的使用范围或功能提出任何限制。无论如何,计算节点800能够被实现和/或执行上文阐述的任何功能。例如,计算节点800可以执行参照图5A-5F示出和描述的方法510-560中的任何方法。
在计算节点800中,存在计算机系统/服务器802,其可与许多其它通用或专用计算系统环境或配置一起操作。适合与计算机系统/服务器802一起使用的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机系统、大型计算机系统、以及包括任何上述系统或设备的分布式云计算环境等。
计算机系统/服务器802可以在计算机系统可执行指令的一般上下文中描述,诸如由计算机系统执行的程序模块。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器802可以在分布式云计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质中。
如图8所示,云计算节点800中的计算机系统/服务器802以通用计算设备的形式示出。计算机系统/服务器802的组件可以包括但不限于一个或多个处理器或处理单元804、系统存储器806、以及将包括系统存储器806在内的各种系统组件耦合到处理器804的总线。
总线表示若干类型的总线结构中的任何一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线体系结构中的任何一种的处理器或局部总线。作为示例而非限制,这些体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线。
计算机系统/服务器802通常包括各种计算机系统可读介质。这样的介质可以是可由计算机系统/服务器802访问的任何可用介质,并且它包括易失性和非易失性介质、可移动和不可移动介质。在一个实施例中,系统存储器806实现其它附图的流程图。系统存储器806可包括易失性存储器形式的计算机系统可读介质,诸如随机存取存储器(RAM)810和/或高速缓存存储器812。计算机系统/服务器802还可以包括其他可移动/不可移动、易失性/非易失性计算机系统存储介质。仅作为示例,存储系统814可被提供用于从不可移动、非易失性磁介质(未示出,并且通常被称为"硬盘驱动器")读取和向其写入。尽管未示出,但是可以提供用于从可移动、非易失性磁盘(例如,"软盘")读取和向其写入的磁盘驱动器,以及用于从诸如CD-ROM、DVD-ROM或其它光学介质等可移动、非易失性光盘读取或向其写入的光盘驱动器。在这种情况下,每个都可以通过一个或多个数据介质接口连接到总线。如下面将进一步描绘和描述的,存储器806可以包括至少一个程序产品,该程序产品具有一组(例如,至少一个)程序模块,该程序模块被配置成执行本申请的各种实施例的功能。
作为示例而非限制,具有一组(至少一个)程序模块818的程序/实用程序816以及操作系统、一个或多个应用程序、其它程序模块和程序数据可被存储在存储器806中。操作系统、一个或多个应用程序、其它程序模块和程序数据或其某种组合中的每一个可包括联网环境的实现。程序模块818通常执行如本文所述的应用的各种实施例的功能和/或方法。
如本领域技术人员将理解的,本申请的各方面可以被实现为系统、方法或计算机程序产品。因此,本申请的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等)或组合软件和硬件方面的实施例的形式,其在这里可以被统称为"电路"、"模块"或"系统"。此外,本申请的各方面可以采取计算机程序产品的形式,该计算机程序产品包含在其上包含计算机可读程序代码的一个或多个计算机可读介质中。
计算机系统/服务器802还可与一个或多个外部设备820通信,诸如键盘、定点设备、显示器822等;一个或多个设备,其使得用户能够与计算机系统/服务器802交互;和/或使计算机系统/服务器802能够与一个或多个其它计算设备通信的任何设备(例如,网卡、调制解调器等)。这种通信可以经由I/O接口824发生。此外,计算机系统/服务器802可以经由网络适配器826与一个或多个网络通信,所述网络诸如局域网(LAN)、通用广域网(WAN)和/或公共网络(例如,因特网)。如所描述的,网络适配器826经由总线与计算机系统/服务器802的其他组件通信。应当理解,尽管未示出,但是可以结合计算机系统/服务器802使用其他硬件和/或软件组件。示例包括但不限于:微码、设备驱动程序、冗余处理单元、外部磁盘驱动器阵列、RAID系统、磁带驱动器和数据档案存储系统等。
尽管在附图中示出并在前述详细描述中描述了系统、方法和非瞬态计算机可读介质中的至少一个的示例性实施例,但是将理解,本申请不限于所公开的实施例,而是能够进行如所附权利要求书所阐述和定义的众多重新布置、修改和替换。例如,各附图的系统的能力可由本文描述的模块或组件中的一个或多个或以分布式架构来执行,并且可包括发射机、接收机或两者的配对。例如,由各个模块执行的所有或部分功能可以由这些模块中的一个或多个执行。此外,本文描述的功能可以在各种时间执行,并且可以与模块或组件内部或外部的各种事件相关。而且,在各种模块之间发送的信息可以经由以下中的至少一个在模块之间发送:数据网络、因特网、语音网络、因特网协议网络、无线设备、有线设备和/或经由多个协议。而且,由任何模块发送或接收的消息可以直接和/或经由一个或多个其他模块发送或接收。
本领域技术人员将理解,“系统”可以被实现为个人计算机、服务器、控制台、个人数字助理(PDA)、蜂窝电话、平板计算设备、智能电话或任何其他合适的计算设备、或设备的组合。将上述功能呈现为由“系统”执行不旨在以任何方式限制本申请的范围,而是旨在提供许多实施例的一个示例。实际上,本文公开的方法、系统和装置可以以与计算技术一致的本地化和分布式形式来实现。
应当注意,本说明书中描述的一些系统特征已经被呈现为模块,以便更具体地强调它们的实现独立性。例如,模块可以被实现为包括定制超大规模集成(VLSI)电路或门阵列、诸如逻辑芯片、晶体管或其他分立组件的现成半导体的硬件电路。模块还可以在可编程硬件设备中实现,例如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备、图形处理单元等。
模块还可以至少部分地以由各种类型的处理器执行的软件来实现。可执行代码的标识单元例如可以包括计算机指令的一个或多个物理或逻辑块,其例如可以被组织为对象、过程或函数。然而,标识模块的可执行代码不需要物理地位于一起,而是可以包括存储在不同位置的不同指令,当这些指令逻辑地结合在一起时,包括该模块并实现该模块的规定目的。此外,模块可以存储在计算机可读介质上,该计算机可读介质可以是例如硬盘驱动器、闪存设备、随机存取存储器(RAM)、磁带或用于存储数据的任何其他这样的介质。
实际上,可执行代码的模块可以是单个指令或多个指令,并且甚至可以分布在若干不同的代码段上、在不同的程序之间、以及跨若干存储器设备。类似地,操作数据可以在模块内被标识和示出,并且可以以任何合适的形式被体现并且被组织在任何合适类型的数据结构内。操作数据可以被收集为单个数据集,或者可以分布在包括不同存储设备的不同位置上,并且可以至少部分地仅作为系统或网络上的电子信号存在。
容易理解,如在本文附图中一般性描述和示出的,本申请的组件可以以各种不同的配置来布置和设计。因此,实施例的详细描述不是要限制所要求保护的本申请的范围,而仅仅是本申请的所选实施例的代表。
本领域的普通技术人员将容易理解,可以用不同顺序的步骤和/或用配置不同于所公开的配置的硬件元件来实践以上内容。因此,尽管已经基于这些优选实施例描述了本申请,但是对于本领域技术人员来说,某些修改、变化和替代构造将是显而易见的。
尽管已经描述了本申请的优选实施例,但是应当理解,所描述的实施例仅是说明性的,并且当考虑到其全部范围的等同物和修改(例如,协议、硬件设备、软件平台等)时,本申请的范围仅由所附权利要求来限定。