CN117234697B - 一种保守时间同步并行事件调度计算架构和方法 - Google Patents
一种保守时间同步并行事件调度计算架构和方法 Download PDFInfo
- Publication number
- CN117234697B CN117234697B CN202311526240.0A CN202311526240A CN117234697B CN 117234697 B CN117234697 B CN 117234697B CN 202311526240 A CN202311526240 A CN 202311526240A CN 117234697 B CN117234697 B CN 117234697B
- Authority
- CN
- China
- Prior art keywords
- event
- time
- kafka
- model
- module
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000004088 simulation Methods 0.000 claims abstract description 86
- 238000012545 processing Methods 0.000 claims abstract description 37
- 238000013523 data management Methods 0.000 claims abstract description 22
- 238000013439 planning Methods 0.000 claims description 19
- 230000008569 process Effects 0.000 claims description 19
- 238000004364 calculation method Methods 0.000 claims description 16
- 238000007781 pre-processing Methods 0.000 claims description 14
- 230000003993 interaction Effects 0.000 claims description 12
- 238000005111 flow chemistry technique Methods 0.000 claims description 8
- 230000003068 static effect Effects 0.000 claims description 4
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 7
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000005192 partition Methods 0.000 description 3
- 238000011144 upstream manufacturing Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请涉及一种保守时间同步并行事件调度计算架构和方法。所述架构包括:数据管理模块、Flink流处理平台和多任务并行计算模块,Flink流处理平台中包括事件调度模块和时间同步模块。通过数据管理模块使得Flink流处理平台从Kafka外部消息系统中获取事件流,以及将所述Flink流处理平台更新得到的事件流转发至Kafka外部消息系统,其次,根据各个时间推进请求分别计算对应的允许推进时间,然后事件调度器将对应事件队列中时间戳不大于相应允许推进时间的事件作为待执行事件,协调多个事件调度器之间一致运行。采用本发明能够大大提高仿真运行效率。
Description
技术领域
本申请涉及仿真技术领域,特别是涉及一种保守时间同步并行事件调度计算架构和方法。
背景技术
仿真引擎主要驱动构造模型的高速解算和调度公共服务并行计算,在可用IT资源受约束的条件下,通过并行仿真和动态负载均衡算法创新,实现整体IT资源有效利用率和仿真运行效率的最大化。在仿真业务中,对仿真模型规模、数据的实时性和仿真运行速度等因素具有较高的要求。现在大部分仿真软件仅支持使用单机硬件资源,限制了模型实体规模大、模型交互频繁和超实时仿真等应用场景的计算需求。当仿真业务要求支撑大体量的复杂计算、以毫秒级别的速度执行实时数据、实现高吞吐,低延迟的的计算能力时,传统的仿真技术无法满足仿真运行效率的最大化。
发明内容
基于此,有必要针对上述技术问题,提供一种保守时间同步并行事件调度计算架构和方法,能够支撑大体量的复杂计算,并确保计算的实时性,提高仿真运行效率。
一种保守时间同步并行事件调度计算架构,所述架构包括:
数据管理模块、Flink流处理平台和多任务并行计算模块;Flink流处理平台中包括事件调度模块和时间同步模块;
数据管理模块用于使Flink流处理平台从Kafka外部消息系统中获取事件流,以及将Flink流处理平台更新得到的事件流转发至Kafka外部消息系统;事件流中包括多个事件队列;
事件调度模块用于构建多个事件调度器;每一事件调度器对应一个仿真模型,一个仿真模型对应一个事件队列;在事件队列中,每一事件对应一个时间戳;事件为规划事件或交互事件;时间戳表示事件的执行时间;
事件调度器用于从Kafka外部消息系统中读取上一轮次更新得到的对应的事件队列,再分别取各自的事件队列中的最小时间戳向时间同步模块提交当前轮次仿真周期的时间推进请求;
时间同步模块用于构建时间同步核;时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,然后事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件,并驱动对应的仿真模型执行待执行事件,然后将已执行的事件从事件队列中删除,并将仿真模型在执行过程中产生的新事件插入对应的事件队列中来更新事件队列,然后将更新后的事件队列发送至外部Kafka消息系统;
Flink流处理平台将事件调度器和时间同步模块构成的算子任务发送至多任务并行计算模块,多任务并行计算模块将算子任务分解为多个子任务并分布在多个线程中,当需要子任务执行事件流时,检测子任务对应的空闲线程,并采用空闲线程执行事件流。
一种保守时间同步并行事件调度计算方法,方法包括:
获取模型实体列表;模型实体列表是在第一轮仿真周期中加载并解析Kafka外部消息系统发送的想定消息而得到的;
构建事件调度模块和时间同步模块;事件调度模块中包括多个事件调度器;每一事件调度器对应一个仿真模型,一个仿真模型对应一个动态的事件队列;在事件队列中,每一事件对应一个时间戳,事件为规划事件或交互事件;时间戳表示事件的执行时间;时间同步模块包括时间同步核;
通过各个事件调度器从Kafka外部消息系统中读取上一轮次更新得到的对应的事件队列,再分别取各自的事件队列中的最小时间戳向时间同步模块提交当前轮次仿真周期的时间推进请求;
采用时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件;
采用事件调度器驱动对应的仿真模型执行待执行事件,然后将已执行的事件从事件队列中删除,并将仿真模型在执行过程中产生的新事件插入对应的事件队列中来更新事件队列,然后将更新后的事件队列发送至Kafka外部消息系统。
上述一种保守时间同步并行事件调度计算架构和方法,首先,通过数据管理模块,使得Flink流处理平台从Kafka外部消息系统中获取事件流,以及将所述Flink流处理平台更新得到的事件流转发至Kafka外部消息系统,如此实现Kafka和FLink之间的流数据源源不断地产生和输出,实现一个闭环的数据流流转。其次,时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,然后事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件,以此协调多个事件调度器之间一致运行;第三,根据并行度将事件调度模块和时间同步模块拆分为多个子任务,每个子任务分布在多个线程中,当上游任务产生的事件流需要这些子任务执行时,会检测空闲的线程,事件流由分布在空闲线程上的子任务执行,实现了多线程并发执行提高了任务的处理速度。 综上,本申请处理海量数据时,能够支撑大体量的复杂计算,并通过分布式并行处理极大地提高了数据的处理速度,充分利用计算机的计算资源,高效地实现事件调度和时间同步的并行计算。
附图说明
图1为一种保守时间同步并行事件调度计算架构的概括示意图;
图2为数据管理模块的工作流程示意图;
图3为事件调度模块的工作流程示意图;
图4为多任务并行计算模块的工作流程示意图;
图5为事件预处理模块的工作流程示意图;
图6为时间同步模块的工作流程示意图;
图7为保守时间同步并行事件调度计算架构的具体示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种保守时间同步并行事件调度计算架构的概括示意图,该架构包括:
数据管理模块、Flink流处理平台和多任务并行计算模块,其中,Flink流处理平台中包括事件调度模块和时间同步模块。
数据管理模块用于使Flink流处理平台从Kafka外部消息系统中获取事件流,以及将Flink流处理平台更新得到的事件流转发至Kafka外部消息系统。其中,事件流中包括多个事件队列。数据管理模块用于流数据的持续获取和输出。Flink流处理平台和Kafka外部消息系统相结合,消息系统承担消息事件的存储转发角色,Flink流处理平台既可以作为消费者不断地消费Kafka外部消息系统的消息,又可以作为生产者不断地向Kafka外部消息系统生产消息。在本方案中,消息和流数据是指事件流。数据管理模块使用Flink流处理平台从外部消息系统Kafka中获取连续的数据流,实时地对该输入执行一些流处理计算,并生成连续数据流输出到Kafka的主题中,Flink的并行度和Kafka的分区机制深度结合,能够有效提高数据流的读取率和写入效率。
事件调度模块用于构建多个事件调度器;每一事件调度器对应一个仿真模型,一个仿真模型对应一个事件队列;在事件队列中,每一事件对应一个时间戳;事件为规划事件或交互事件;时间戳表示事件的执行时间。
事件调度器用于从Kafka外部消息系统中读取上一轮次更新得到的对应的事件队列,再分别取各自的事件队列中的最小时间戳向时间同步模块提交当前轮次仿真周期的时间推进请求。
时间同步模块用于构建时间同步核;时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,然后事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件,并驱动对应的仿真模型执行待执行事件,然后将已执行的事件从事件队列中删除,并将仿真模型在执行过程中产生的新事件插入对应的事件队列中来更新事件队列,然后将更新后的事件队列发送至外部Kafka消息系统。
Flink流处理平台将事件调度器和时间同步模块构成的算子任务发送至多任务并行计算模块,多任务并行计算模块将算子任务分解为多个子任务并分布在多个线程中,当需要子任务执行事件流时,检测子任务对应的空闲线程,并采用空闲线程执行事件流。
其中,多任务并行计算模块是在Flink服务端完成的,Flink程序作业在本地设置FLink的并行度和各算子的并行度。Flink服务端接收到Flink程序作业后,会根据并行度把一个算子复制到多个节点(线程),当数据到来时可以到其中任何一个节点上执行,从而实现并行计算。
在一个实施例中,数据管理模块还用于在第一轮次仿真周期中输入字符串类型的想定消息至外部Kafka消息系统中;外部Kafka消息系统中包括Kafka集群;Kafka集群中包括多个Kafka主题;
以及,使得Flink流处理平台从外部Kafka消息系统中读取想定消息并对想定消息进行序列化,得到以事件基类为模板的事件基类对象实例;事件基类包括事件的发送者模型ID、发送者模型实体ID、接收者模型ID、接收者模型实体ID、当前时间戳、事件时间戳、是否是当前轮次将要执行的事件标识符;
以及,将更新后的事件队列反序列化为字符串并发送至对应的Kafka主题中。
其中,Kakfa集群为主从分布式架构,用于公布订阅消息类。使用Zookeeper管理集群各节点的状态和配置信息,包括集群节点的ID、端口号和IP。创建集群主题后,配置集群主题的分区个数和副本,使数据均匀分布在集群主题的各个分区,保证数据量大时,能实现Kakfa集群的磁盘读写效率和高可用性,以及消息系统的高吞吐性能。
数据管理模块,首先启动Kafka并在搭建的Kafka集群主题中通过Shell命令行输入字符串类型的想定信息到Kafka消息系统中。Flink程序作业中创建KafkaSource对象,将输入的字符串通过KafkaSource序列化为符合要求的BaseEvent对象。然后,Flink创建本地执行执行环境,配置与Kakfa相同的主题和监听Kakfa的通信端口,保证Kakfa通过广播的方式发送消息,Flink作为消费者能准确接收。最后,Flink调用执行环境的fromSource()读取KafkaSource返回的序列化对象,并将序列化对象作为事件流发送给下游Flink内部端做任务处理。Flink内部端对数据进行计算后调用KafkaSink继续把计算后的数据结果反序列化并发送到Kafka消息系统,保证Kafka消息系统和Flink流处理平台之间数据能持续输送。
如图2所示,数据管理模块的工作流程如下:
201. Kafka环境配置,Zookeeper注册节点信息。Kafka集群搭建和配置,同时向Zookeeper注册Kafka集群节点信息;
202. Kafka服务端接收消息。启动Kafka服务端,向Kafka的集群主题中发送一条字符串数据类型的想定信息;
203.创建kafkaSource,配置kafka客户端信息。Flink作为消费者创建Kafka连接器KafkaSource;
204.方法对消息序列化。调用setValueOnlyDeserializer()方法对消息进行序列化,返回以BaseEvent事件类为模板的事件类实例;
205.创建Flink执行环境,配置Flink执行环境信息;
206.获取Kafka发送的消息事件。Flink调用fromSource()方法读取KafkaSource返回的BaseEvent类实例事件;
207.对事件进行计算。Flink内部端的Transformation(转换)操作对事件进行计算;
208.把计算后的结果序列化为字符串并继续发送到Kafka消息系统。调用KafkaSink把计算后的结果序列化为字符串并继续发送到Kafka消息系统Flink作为生产者创建Kafka连接器KafkaSink,把计算后的结果反序列化为字符串;Flink调用SinkTo()方法把序列化后的计算结果发送到Kafka外部消息系统。
在一个实施例中,事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件,并驱动对应的仿真模型执行待执行事件,包括:
事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件并发送至事件调度模块;事件调度模块根据待执行事件的接收者模型ID调用对应的仿真模型处理待执行事件。
流入事件调度模块的事件流是事件调度器中事件时间小于等于时间同步核允许推进的事件,该输入事件流需要在本轮周期内通过事件调度模块驱动仿真模型执行事件。具体地,事件调度模块每次执行输入的事件流时,首先需要取出待执行事件的相关信息,包括事件的发送方模型、发送方模型实体、接收方模型、接收方模型实体、事件时间和事件所携带的相关参数,需要根据事件的接收方模型调用对应的仿真模型处理待执行的事件;仿真模型在运行过程中将不断产生新的规划事件或交互事件,这些事件将被分发到对应模型实体所属的事件调度器中。每轮周期的kafkasource输入事件流都是上一轮周期经过筛选后满足条件的事件,这些满足条件的事件的标识符为true,即表示是本轮周期要执行的事件。而本轮周期在事件执行过程中,有可能产生新的事件,这些新事件的标识符为false,表示在本轮周期内不会执行这些事件,只有它满足条件事件时间小于等于允许推进时间才设置为true,并发送到kafkasink到下一轮周期执行这些事件。
如图3所示,事件调度模块的工作流程如下:
301.获取上游任务中每个事件流的相关信息,包括事件的发送方和事件的接收方等;
302.调用事件对应的目标仿真模型执行输入的事件流。具体可通过execEvent()方法来执行;
303.仿真模型将模型自身产生的规划事件和向其他模型发送的交互事件插入到HashMap的事件队列中。仿真模型产生的规划事件和模型给其他模型发送的交互事件,使用sendEvent()方法插入到HashMap<String,List<BaseEvent>>对应目标模型的inputEventList事件队列中;
304.事件队列按事件时间戳从小到大排序获得顺序性的事件队列。取哈希表中各事件调度器的事件队列,时间戳按从小到大排序生成顺序性的事件队列inputEventList;
305.每个事件调度器取事件队列的最小时间戳向时间同步模块申请推进时间。调用requestSynTime()方法取事件队列中的最小时间戳向时间同步核请求运行推进的时间syn_time;
306.删除事件队列中在本轮周期内已经执行完的事件,并更新哈希表中每个仿真模型对应的事件队列;
307.获取最新的哈希表,输出事件队列中事件时间小于等于推进时间的事件,进入下一轮仿真周期。各事件调度器获取最新的inputEventList,把事件队列中事件时间小于等于时间同步核返回的推进时间syn_time的事件发送到下游任务,等待下一轮仿真周期内的执行附和条件的事件流。
在一个实施例中,数据管理模块中包括Kafka发送端接口,即KafkaSource,以及Kafka接收端接口,即KafkaSink;
Flink流处理平台中包括Flink发送端接口和Flink接收端接口;
数据管理模块使Flink流处理平台通过Flink发送端接口从Kafka外部消息系统的Kafka发送端接口获取事件流,以及将Flink流处理平台更新得到的事件流从Flink接收端接口转发至Kafka外部消息系统的Kafka接收端接口。
KafkaSource和KafkaSink是Kafka与Flink连接的重要通道,需要通过KafkaSource从Kafka外部消息系统Kafka服务端读取消息,通过KafkaSink向Kafka服务端发送消息,这两个重要接口可以使Kafka和Flink做到数据流的持续闭环连通。
KafkaSource从Kafka中读取的消息是字符串类型的,使用序列化功能将字符串类型的消息转换为自定义的数据结构java Bean类,并对自定义的Java类进行加载并初始化,即在KafkaSource阶段已经获取到了本方案的初始数据流且通过数据流加载到了LoadEvent类并对该类做了初始化。反之使用KafkaSink将自定义的java类转换为字符串形式。对KafkaSource和KafkaSink添加序列化和反序列化能满足Kafka和FLink读取的消息类型一致,且能根据业务场景的需求实现更多具体的功能。所以KafkaSuorce不仅起到了Kafka与Flink的数据通道作用,还对输入和输出的数据流做了格式转换,转换成符合业务场景需要的数据格式。
在一个实施例中,Flink流处理平台中还包括:事件预处理模块;
事件预处理模块用于在第一轮次仿真周期中加载并根据事件基类对象实例解析Kafka外部消息系统发送的想定消息得到模型实体列表;其中模型实体列表中包括仿真模型ID、加载的模型对象以及模型实体个数;
加载并初始化各个模型对象,生成模型对象实例;
根据模型实体个数构建模型实体,并对模型实体进行初始化得到初始化模型实体,初始化模型实体分别调用自身的仿真模型构建初始规划事件,并由初始规划事件构成各自的初始事件队列,保证仿真运行过程的事件预处理模块获得一定数量的初始规划事件,事件预处理模块将这些规划事件作为待执行的事件流发送到下游任务。如果不是第一轮次仿真周期,事件预处理模块不会对输入的事件流做任何操作,直接把输入的事件流发送到下游任务。
多任务并行计算模块把Flink内部端的FlatMap()算子操作重构为各个模块,当Flink执行以上模块的算子操作时并没有立即执行,而是把这些算子操作添加到流执行环境的转换操作数组中。当所有的算子操作都添加到env时,流执行环境会调用execute()方法执行Flink程序作业。Flink客户端把程序作业提交给Flink服务端。Flink服务端是一个分布式的主从架构,包括作业管理器JobManager和任务管理器TaskManager,一个JobManager拥有一个或多个TaskManager。JobManager按照并行度把程序作业Job拆分成多个算子子任务subTask,并把subTask分配到多个TaskManager的任务槽Task Slot上。TaskManager的主要作用是在Task Slot中执行subTask。每个TaskManager代表一个进程Progress,TaskManager下面的每个Slot代表一个线程Thread。所以,Flink在执行过程中,一个算子任务subTask能够被拆分成多个并行的算子子任务,每个subTask分发到不同的节点中,即不同的线程或不同的物理机中完全独立的进行,可以高效地实现并行计算;
如图4所示,多任务并行计算模块的工作流程如下:
401.添加各模块的算子操作到执行环境的转换操作数组中;
402执行Flink程序作业,并把该作业提交到Flink客户端,客户端再发送给服务端。具体可调用env.execute()来执行;
403.作业管理器按照并行度将作业拆分为多个算子子任务,并把算子子任务分配到任务管理器进程中。Flink服务端的JobManager按照并行度把各模块的算子任务拆分为多个并行的算子子任务,并把算子子任务平均分配到TaskManager的各JVM进程中;
404.任务管理器把算子子任务分配到各进程的任务槽线程中。TaskManager给每个算子子任务分配一个任务槽,即算子子任务拥有一个独立的线程;
405.事件流执行算子子任务时,选择空闲的任务槽线程执行。当事件流需要各模块的算子任务执行时,会选择空闲的任务槽线程Thread执行事件。
多任务并行计算模块会根据Flink设置的并行度将事件预处理模块、事件调度模块和时间同步模块拆分为多个并行的算子任务,每个模块构成的算子任务可以分发到不同的节点、线程、物理机或不同的容器中完全独立的执行,当事件流要进入模块执行任务时,会选择空闲的线程所在的算子中去处理,从而实现流式计算的并行处理。
如图5所示,事件预处理模块的工作流程如下:
501.判断事件基类对象实例是否是初始Kafka发送的想定文件信息。判断BaseEvent对象实例是否是第一轮周期内的想定信息,如果是第一轮周期,输入的事件流是原始的想定消息,如果不是,直接进入步骤506;
502.获取想定文件的模型实体列表。通过BaseEvent对象实例获取想定消息的模型实体列表baseEvent.getScenario().getLoadEntityList();
503.加载模型实体列表的模型,并对模型的构造函数进行初始化,获取模型对象实例baseModel;
504.加载模型实体列表的模型实体个数baseEvent.getNum(),创建模型实体modelEntity;
505模型实体初始化构建规划事件,baseModel.initObject(modelEntity)。模型实体初始化,baseModel调用initObject()为每个模型实体创建初始规划事件;
506.事件流发送到下游事件调度模块。事件预处理模块处理的事件流发送到下游任务。
在一个实施例中,时间同步核根据各个时间推进请求分别计算对应的允许推进时间,具体包括:
时间同步模块接收当前轮次仿真周期所有事件调度器提交的时间推进请求并存放至请求数组中,并为每一事件调度器分配一个允许推进的最大时间戳并存放至时间戳数组中,以及为每一事件调度器设置前瞻量;
若事件调度器的时间戳数组值大于请求数组值和对应前瞻量之和,则将请求数组值和对应前瞻量之和作为事件调度器的更新时间戳数组值,若事件调度器的请求数组值大于对应的更新时间戳数组值,则将对应的时间戳数组值作为事件的更新请求数组值,将更新请求数组值作为对应事件调度模块的允许推进时间。
时间同步模块支持多个事件调度器的并行时间同步,保证仿真时间一致性,确保事件的时间逻辑有序。在仿真开始时,根据所有事件调度器发送的时间推进请求对各个事件调度器计算当前轮次的允许推进时间,计算完成后将所述推进时间发送给对应的事件调度器,协调多个事件调度器之间一致运行。
哈希表的多个键值对应的事件队列会统一向时间同步模块请求推进时间,由时间同步模块统一计算最小时戳下限和允许推进的时间syn_time。各事件调度器维护的事件队列会取出当前事件队列中最小时间戳向时间同步模块请求时间,时间同步模块首先会接收所有事件调度器的时间请求存放到数组rTime中,并为每个事件调度器分配一个最大的时间戳DOUBLE_MAX并存放到数组lbts。时间同步模块主要是针对各事件调度器进行两轮计算,第一轮更新每个事件调度器的lbts值,如果当前事件调度器的lbts值大于其他事件调度器的请求时间rTime和前瞻量的和,则更新当前事件调度器的lbts该计算结果值。第二轮更新每个事件调度器的请求时间rTime值,如果当前事件调度器的rTime值大于lbts值,则更新rTime值为lbts。直到所有的事件调度器进行了两轮计算后,时间同步模块把rTime作为运行推进的时间syn_time返回给事件调度模块的各事件调度器;
如图6所示,时间同步模块的工作流程如下:
601.每个事件调度器用最小时间戳向时间同步模块发送时间推进请求。开始时,等待事件调度模块向时间同步模块发送时间推进请求TimeAdvanced();
602.保存并设置每个事件调度器的请求信息,包括前瞻量lookhead、请求推进的时间rTime、最大推进时间lbts。在每轮时间同步核收到事件调度器的时间推进请求后,保存请求时间的信息,包括设置前瞻量lookHead、请求推进的时间存放到rTime数组、设置允许推进的最大时间节点为DOUBLE_MAX存放到数组lbts数组;
603.如果最大推进时间lbts.get(i)>请求推进的时间rTime.get(j) +前瞻量lookHead.get(j),则更新最大推进时间lbts。lbtsget(i)= rTime.get(j) +lookHead.get(j);
604.如果请求推进的时间rTime.get(i)>最大推进时间lbts.get(i) ,则更新请求推进的时间rTime.get(i) =最大推进时间lbts.get(i) ;
605.各事件调度器发起请求且两轮计算完成后,时间同步核返回计算的请求推进的时间rTime值为允许推进的时间。时间同步模块计算本轮各事件调度器的允许推进时间rTime后,更新返回计算结果syn_time = rTime为允许推进的时间给事件调度模块。
在一个实施例中,事件调度模块中包括静态的哈希表;哈希表中,每一键值对表示各个模型实体及其所属的事件队列;
当向事件队列中插入新事件时,若新事件对应的模型实体对应的Key值已存储在哈希表中,则直接将新事件插入对应模型实体的事件队列中,若键值对新事件对应的模型实体对应的Key值尚未存储在哈希表中,则使用put()方法将新事件对应的键值对<发送者模型ID,事件队列>插入至哈希表中。
具体为:在事件调度模块创建静态的哈希表<String,List<BaseEvent>>,其中每个键值对表示对应模型实体所属的事件队列inputEventList,用事件调度器管理和维护该事件队列。每次向inputEventList中插入事件时,首先会判断模型Key是否已经存储在哈希表中,如果不存在Key值,使用put()方法将键值对<SendModelId(), inputEventList>插入到哈希表中,如果已经存在键值,则直接把事件插入到对应模型的事件队列inputEventList的后面。
事件调度模块构建哈希表,用哈希表存储每个仿真模型的事件队列,事件调度器会管理和维护每个仿真模型的事件队列,保证每个仿真模型只对应一个事件队列。每轮仿真周期内事件调度模块都会输入待执行的事件流,事件调度模块会驱动仿真模型执行输入的事件流,仿真模型在运行过程中将不断产生新的规划事件或交互事件。事件调度模块需要将这些已执行的事件和新产生的事件分发到目标模型的事件调度器对应的事件队列中。
事件调度器维护的事件队列包括已执行的事件和仿真模型新产生的事件,需要对这些事件按照事件时间戳进行插入、删除和排序等操作,最终获得一个按时间戳从小到大排序的顺序性的事件队列。每个事件队列中最小时间戳的事件向时间同步模块请求推进的时间,时间同步模块返回运行推进时间后,事件队列会通过remove()方法直接在哈希表的inputEventList中删除在本轮周期内已执行的事件,并把事件队列中小于同步核返回的运行推进时间的事件发送到下游任务,保证下一轮仿真周期内事件调度模块会继续执行满足条件的事件。
如图7所示,提供保守时间同步并行事件调度计算架构的具体示意图。由于本方案要求一个数据流经过算子操作后能获得一个或多个新的数据流,而FlatMap正好符合我们的要求。所以本方案的Transformation操作由三个FlatMap算子重构,每个算子部分分别是自己设计的事件预处理模块、事件调度模块和时间同步模块,三个模块的共同组成才实现了流式计算的保守时间同步并行事件调度的功能逻辑。
上述基于流式计算的保守时间同步并行事件调度计算架构,首先在数据管理模块中使用字符串的方式将想定消息写入外部消息系统Kakfa中,Flink流处理平台作为消费者从Kafka外部消息系统中获取字符串类型的详细信息,通过反序列化方法将外部消息系统Kafka的字节流转换得到自定义的类对象;基于事件预处理模块获取数据管理模块发送的自定义类对象的数据流,通过加载解析该数据流获得想定消息的模型实体列表,根据模型实体个数创建一定数量的模型实体,并为每个模型实体调用自身模型创建规划事件,事件预处理模块生成的事件作为事件流继续发送到下游任务事件调度模块;事件调度模块调用接收者模型执行输入的事件流,并且构建哈希表用于存储和管理每个仿真模型产生的新的规划事件和交互事件,将这些事件插入到哈希表键值对应的事件队列中。对事件队列进行插入和删除等操作,得到一个按时间戳从小到大排序的事件队列。在每个仿真步长开始时,事件调度器取最小时间戳向时间同步模块发送时间推进请求,时间同步模块接收到所有事件调度器的时间请求后,进行时间同步核内部的逻辑计算后,返回给每个事件调度器允许推进的时间;多任务并行计算模块设置整个Flink程序作业的并行度,根据并行度将事件调度模块和时间同步模块拆分为多个子任务,每个子任务分布在多个线程中,当上游任务产生的事件流需要这些子任务执行时,会检测空闲的线程,事件流由分布在空闲线程上的子任务执行,实现了多线程并发执行提高了任务的处理速度;当Flink流处理平台执行完事件调度模块和时间同步模块后,获得符合仿真需求的事件流。最后,在数据管理模块中Flink流处理平台作为生产者将这些事件流跨平台发送到Kafka外部消息系统中,通过序列化方法将自定义的类对象转换成字符串便于Kafka外部消息系统的存储和转发,从而实现跨平台、跨数据类型的数据交换和存储;本申请处理海量数据时,能够支撑大体量的复杂计算,并通过分布式并行处理极大地提高了数据的处理速度,充分利用计算机的计算资源,高效地实现事件调度和时间同步的并行计算。
在一个实施例中,提供了一种保守时间同步并行事件调度计算方法,方法包括:
获取模型实体列表;模型实体列表是在第一轮仿真周期中加载并解析Kafka外部消息系统发送的想定消息而得到的;
构建事件调度模块和时间同步模块;事件调度模块中包括多个事件调度器;每一事件调度器对应一个仿真模型,一个仿真模型对应一个动态的事件队列;在事件队列中,每一事件对应一个时间戳,事件为规划事件或交互事件;时间戳表示事件的执行时间;时间同步模块包括时间同步核;
通过各个事件调度器从Kafka外部消息系统中读取上一轮次更新得到的对应的事件队列,再分别取各自的事件队列中的最小时间戳向时间同步模块提交当前轮次仿真周期的时间推进请求;
采用时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件;
采用事件调度器驱动对应的仿真模型执行待执行事件,然后将已执行的事件从事件队列中删除,并将仿真模型在执行过程中产生的新事件插入对应的事件队列中来更新事件队列,然后将更新后的事件队列发送至Kafka外部消息系统。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (7)
1.一种保守时间同步并行事件调度计算架构,其特征在于,所述架构包括:
数据管理模块、Flink流处理平台和多任务并行计算模块;所述Flink流处理平台中包括事件调度模块和时间同步模块;
所述数据管理模块用于使Flink流处理平台从Kafka外部消息系统中获取事件流,以及将所述Flink流处理平台更新得到的事件流转发至Kafka外部消息系统;所述事件流中包括多个事件队列;
所述事件调度模块用于构建多个事件调度器;每一事件调度器对应一个仿真模型,一个仿真模型对应一个事件队列;在事件队列中,每一事件对应一个时间戳;所述事件为规划事件或交互事件;所述时间戳表示事件的执行时间;
所述事件调度器用于从Kafka外部消息系统中读取上一轮次更新得到的对应的事件队列,再分别取各自的事件队列中的最小时间戳向时间同步模块提交当前轮次仿真周期的时间推进请求;
所述时间同步模块用于构建时间同步核;所述时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,然后事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件,并驱动对应的仿真模型执行所述待执行事件,然后将已执行的事件从事件队列中删除,并将所述仿真模型在执行过程中产生的新事件插入对应的事件队列中来更新事件队列,然后将更新后的事件队列发送至所述Kafka外部消息系统;时间同步核根据各个时间推进请求分别计算对应的允许推进时间,具体包括:时间同步核接收当前轮次仿真周期所有事件调度器提交的时间推进请求并存放至请求数组中,并为每一事件调度器分配一个允许推进的最大时间戳并存放至时间戳数组中,以及为每一事件调度器设置前瞻量;若当前事件调度器的时间戳数组值大于其它事件调度器的请求数组值和对应前瞻量之和,则将请求数组值和对应前瞻量之和作为当前事件调度器的更新时间戳数组值,若当前事件调度器的请求数组值大于对应的更新时间戳数组值,则将对应的时间戳数组值作为当前事件调度器的更新请求数组值,将所述更新请求数组值作为当前事件调度模块的允许推进时间;所述Flink流处理平台将所述事件调度器和所述时间同步模块构成的算子任务发送至所述多任务并行计算模块,所述多任务并行计算模块将所述算子任务分解为多个子任务并分布在多个线程中,当需要子任务执行事件流时,检测子任务对应的空闲线程,并采用空闲线程执行事件流。
2.根据权利要求1所述的架构,其特征在于,所述数据管理模块还用于在第一轮次仿真周期中输入字符串类型的想定消息至外部Kafka消息系统中;所述外部Kafka消息系统中包括Kafka集群;所述Kafka集群中包括多个Kafka主题;
以及,使得Flink流处理平台从所述外部Kafka消息系统中读取所述想定消息并对所述想定消息进行序列化,得到以事件基类为模板的事件基类对象实例;所述事件基类包括事件的发送者模型ID、发送者模型实体ID、接收者模型ID、接收者模型实体ID、当前时间戳、事件时间戳、是否是当前轮次将要执行的事件标识符;
以及,将更新后的事件队列反序列化为字符串并发送至对应的Kafka主题中。
3.根据权利要求1所述的架构,其特征在于,事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件,并驱动对应的仿真模型执行所述待执行事件,包括:
事件调度器将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件并发送至事件调度模块;
事件调度模块根据所述待执行事件的接收者模型ID调用对应的仿真模型处理所述待执行事件。
4.根据权利要求2所述的架构,其特征在于,所述数据管理模块中包括Kafka发送端接口和Kafka接收端接口;
所述Flink流处理平台中包括Flink发送端接口和Flink接收端接口;
所述数据管理模块使Flink流处理平台通过Flink发送端接口从Kafka外部消息系统的Kafka发送端接口获取事件流,以及将所述Flink流处理平台更新得到的事件流从Flink接收端接口转发至Kafka外部消息系统的Kafka接收端接口。
5.根据权利要求2所述的架构,其特征在于,所述Flink流处理平台中还包括:事件预处理模块;
所述事件预处理模块用于在第一轮次仿真周期中加载并根据所述事件基类对象实例解析Kafka外部消息系统发送的想定消息得到模型实体列表;其中模型实体列表中包括仿真模型ID、加载的模型对象以及模型实体个数;
加载并初始化各个模型对象,生成模型对象实例;
根据模型实体个数构建模型实体,并对所述模型实体进行初始化得到初始化模型实体,所述初始化模型实体分别调用自身的仿真模型构建初始规划事件,并由初始规划事件构成各自的初始事件队列。
6.根据权利要求1所述的架构,其特征在于,所述事件调度模块中包括静态的哈希表;所述哈希表中,每一键值对表示各个模型实体及其所属的事件队列;
当向事件队列中插入新事件时,若新事件对应的模型实体对应的Key值已存储在哈希表中,则直接将所述新事件插入对应模型实体的事件队列中,若键值对新事件对应的模型实体对应的Key值尚未存储在哈希表中,则使用put()方法将新事件对应的键值对<发送者模型ID,事件队列>插入至哈希表中。
7.一种保守时间同步并行事件调度计算方法,其特征在于,所述方法包括:
获取模型实体列表;所述模型实体列表是在第一轮仿真周期中加载并解析Kafka外部消息系统发送的想定消息而得到的;
构建事件调度模块和时间同步模块;所述事件调度模块中包括多个事件调度器;每一事件调度器对应一个仿真模型,一个仿真模型对应一个动态的事件队列;在事件队列中,每一事件对应一个时间戳,所述事件为规划事件或交互事件;所述时间戳表示事件的执行时间;所述时间同步模块包括时间同步核;
通过各个事件调度器从Kafka外部消息系统中读取上一轮次更新得到的对应的事件队列,再分别取各自的事件队列中的最小时间戳向时间同步模块提交当前轮次仿真周期的时间推进请求;
采用所述时间同步核根据各个时间推进请求分别计算对应的允许推进时间,并返回给对应的事件调度器,将对应的事件队列中时间戳不大于相应的允许推进时间的事件作为待执行事件;采用所述时间同步核根据各个时间推进请求分别计算对应的允许推进时间,具体包括:采用时间同步核接收当前轮次仿真周期所有事件调度器提交的时间推进请求并存放至请求数组中,并为每一事件调度器分配一个允许推进的最大时间戳并存放至时间戳数组中,以及为每一事件调度器设置前瞻量;若当前事件调度器的时间戳数组值大于其它事件调度器的请求数组值和对应前瞻量之和,则将请求数组值和对应前瞻量之和作为当前事件调度器的更新时间戳数组值,若当前事件调度器的请求数组值大于对应的更新时间戳数组值,则将对应的时间戳数组值作为当前事件调度器的更新请求数组值,将所述更新请求数组值作为当前事件调度模块的允许推进时间;
采用所述事件调度器驱动对应的仿真模型执行所述待执行事件,然后将已执行的事件从事件队列中删除,并将所述仿真模型在执行过程中产生的新事件插入对应的事件队列中来更新事件队列,然后将更新后的事件队列发送至所述Kafka外部消息系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311526240.0A CN117234697B (zh) | 2023-11-16 | 2023-11-16 | 一种保守时间同步并行事件调度计算架构和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311526240.0A CN117234697B (zh) | 2023-11-16 | 2023-11-16 | 一种保守时间同步并行事件调度计算架构和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117234697A CN117234697A (zh) | 2023-12-15 |
CN117234697B true CN117234697B (zh) | 2024-02-06 |
Family
ID=89097114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311526240.0A Active CN117234697B (zh) | 2023-11-16 | 2023-11-16 | 一种保守时间同步并行事件调度计算架构和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117234697B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117472517B (zh) * | 2023-12-28 | 2024-03-08 | 广州睿帆科技有限公司 | 一种基于Flink分布式处理FTP文件的方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2856356A2 (en) * | 2012-06-04 | 2015-04-08 | Google, Inc. | Systems and methods of increasing database access concurrency using granular timestamps |
CN104866374A (zh) * | 2015-05-22 | 2015-08-26 | 北京华如科技股份有限公司 | 基于多任务的离散事件并行仿真及时间同步方法 |
CN113742331A (zh) * | 2021-10-11 | 2021-12-03 | 浙江数智交院科技股份有限公司 | 数字孪生船舶驱动方法和装置 |
US11327790B1 (en) * | 2018-07-03 | 2022-05-10 | Synopsys, Inc. | Event-level parallel simulation using dynamic synchronization |
CN114528066A (zh) * | 2021-12-24 | 2022-05-24 | 北京航天测控技术有限公司 | 适用于离散事件系统仿真的并行时序推进方法及电子设备 |
CN115186518A (zh) * | 2022-09-09 | 2022-10-14 | 中国电子科技集团公司第十五研究所 | 一种仿真并行推进方法、服务器以及存储介质 |
CN115994190A (zh) * | 2023-03-23 | 2023-04-21 | 中国科学院空间应用工程与技术中心 | 一种航天海量数据的分布式实时处理方法及系统 |
CN116414581A (zh) * | 2023-03-20 | 2023-07-11 | 中国人民解放军国防科技大学 | 基于线程池和Avl树的多线程时间同步事件调度系统 |
CN116528149A (zh) * | 2023-05-17 | 2023-08-01 | 中国电信股份有限公司 | 融合定位方法、系统、电子设备及存储介质 |
CN116775420A (zh) * | 2023-04-28 | 2023-09-19 | 中国人寿保险股份有限公司上海数据中心 | 基于Flink流计算的信创云平台资源展示和预警方法及系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7376733B2 (en) * | 2003-02-03 | 2008-05-20 | Hewlett-Packard Development Company, L.P. | Method and apparatus and program for scheduling and executing events in real time over a network |
US20220014555A1 (en) * | 2015-10-28 | 2022-01-13 | Qomplx, Inc. | Distributed automated planning and execution platform for designing and running complex processes |
US20220215948A1 (en) * | 2021-01-07 | 2022-07-07 | Abiomed, Inc. | Network-based medical apparatus control and data management systems |
-
2023
- 2023-11-16 CN CN202311526240.0A patent/CN117234697B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2856356A2 (en) * | 2012-06-04 | 2015-04-08 | Google, Inc. | Systems and methods of increasing database access concurrency using granular timestamps |
CN104866374A (zh) * | 2015-05-22 | 2015-08-26 | 北京华如科技股份有限公司 | 基于多任务的离散事件并行仿真及时间同步方法 |
US11327790B1 (en) * | 2018-07-03 | 2022-05-10 | Synopsys, Inc. | Event-level parallel simulation using dynamic synchronization |
CN113742331A (zh) * | 2021-10-11 | 2021-12-03 | 浙江数智交院科技股份有限公司 | 数字孪生船舶驱动方法和装置 |
CN114528066A (zh) * | 2021-12-24 | 2022-05-24 | 北京航天测控技术有限公司 | 适用于离散事件系统仿真的并行时序推进方法及电子设备 |
CN115186518A (zh) * | 2022-09-09 | 2022-10-14 | 中国电子科技集团公司第十五研究所 | 一种仿真并行推进方法、服务器以及存储介质 |
CN116414581A (zh) * | 2023-03-20 | 2023-07-11 | 中国人民解放军国防科技大学 | 基于线程池和Avl树的多线程时间同步事件调度系统 |
CN115994190A (zh) * | 2023-03-23 | 2023-04-21 | 中国科学院空间应用工程与技术中心 | 一种航天海量数据的分布式实时处理方法及系统 |
CN116775420A (zh) * | 2023-04-28 | 2023-09-19 | 中国人寿保险股份有限公司上海数据中心 | 基于Flink流计算的信创云平台资源展示和预警方法及系统 |
CN116528149A (zh) * | 2023-05-17 | 2023-08-01 | 中国电信股份有限公司 | 融合定位方法、系统、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117234697A (zh) | 2023-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117234697B (zh) | 一种保守时间同步并行事件调度计算架构和方法 | |
CN103279390B (zh) | 一种面向小作业优化的并行处理系统 | |
CN108564164B (zh) | 一种基于spark平台的并行化深度学习方法 | |
WO2020233584A1 (zh) | 混合语言任务执行方法、装置及集群 | |
US20190213040A1 (en) | Workflow scheduling system, workflow scheduling method, and electronic apparatus | |
CN114610474A (zh) | 一种异构超算环境下多策略的作业调度方法及系统 | |
CN111258707A (zh) | 一种基于dds服务封装的分布式仿真方法和系统 | |
CN110569113A (zh) | 分布式任务的调度方法及系统、计算机可读存储介质 | |
CN112099930A (zh) | 一种量子计算机集群分布式队列调度方法 | |
CN110134506A (zh) | 基于处理器内核动态的实时动态关键路径多核调度方法 | |
CN112463340A (zh) | 基于tensorflow的多任务弹性调度方法及系统 | |
WO2023160418A1 (zh) | 资源处理方法及资源调度方法 | |
CN116582407A (zh) | 一种基于深度强化学习的容器化微服务编排系统及方法 | |
Hu et al. | Requirement-aware strategies with arbitrary processor release times for scheduling multiple divisible loads | |
CN114996299A (zh) | 分布式数据库的计划执行方法、装置和系统 | |
WO2016186531A1 (en) | System and method for synchronizing distributed computing runtimes | |
CN110750362A (zh) | 生物信息的分析方法、装置和存储介质 | |
Cicirelli et al. | A control framework for model continuity in JADE | |
CN112416539B (zh) | 面向异构众核处理器的多任务并行调度方法 | |
Cicirelli et al. | Agent-Based Control Framework In Jade. | |
US20240127034A1 (en) | Apparatus and method for distributed processing of neural network | |
CN116594784B (zh) | 一种边边调度方法、装置、系统和可读存储介质 | |
Chen et al. | Scheduling of job combination and dispatching strategy for grid and cloud system | |
Liang et al. | A visual mapreduce program development environment for heterogeneous computing on clouds | |
CN116521389A (zh) | 面向大规模并行调试器的通信方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |