仿真4. 仿真平台架构设计

背景:

1. 业务背景:我司对仿真系统的需求日渐增加,比如道路交通的仿真、船舶港口仿真、车联网(ad hoc)仿真、以及运营商承载网的仿真等;

2. 回顾“什么是仿真时钟”:用于描述仿真时间的变化。在连续系统中,仿真时间的变化基于仿真时钟步长的确定,比如CPU按固定的步长持续推进时间。在离散事件系统中,引起系统状态变化的事件是随机发生的,因而仿真时钟的步长也是随机的,从一个事件发生时刻推进到另一个事件发生时刻具有跳跃性和随机性(比如短信协议的解析,不同的网络环境、不同运营商、不同的设备解析同一条短信息的耗时是不同的,且具有随机性);

目的:

基于事件调度法,设计一个仿真事件(仿真任务的基本模型单元)的调度和运行平台(简称“平台”),以支撑上层仿真任务的开发。

目标用户:

基于该“平台”,开发仿真任务的开发者。

“平台”需要具备的能力:

1. 提供仿真内核的基本能力:仿真事件的调度和执行能力、仿真时钟(区别于CPU时钟和实际时间)、仿真时钟的推进能力(每次仿真事件的执行消耗一定长的仿真时间);

2. 支持目标用户使用原生java语言编码,不改变用户编程习惯(面向对象),对用户编程基本无约束,运行于标准JVM上;

3. 客户程序中,用户设计的java对象(代表了真实世界中的某个待仿真的实际存在)即为仿真实体。仿真实体间的每一次方法调用对应着“平台”内一个待处理的仿真事件。“平台”需要具备将“客户程序的方法调用”转换为平台内“仿真事件”的能力,且用户程序可以设置该方法调用(事件执行)需要消耗的时间(这里的时间是仿真时间,不是实际时间);

4. 16U32G配置下,支持百万节点仿真,百万节点单个步长推进(即百万个事件处理)耗时不超过1s;

5. 当前版本不支持单个仿真任务拆分执行,后续考虑单个仿真任务分布式在多个仿真平台上拆分执行,提高执行效率;

6. 后续版本待完善:随机事件发生器,用于模拟真实世界的随机事件(比如网络仿真中的丢包事件、道路交通仿真中的随机车祸事件等);

约束:

1. 对于客户程序的约束:基于仿真平台开发仿真任务,需要区分普通的java类和作为仿真实体的java类,属于仿真实体的java类均需要实现“平台”提供的接口(“平台”会据此识别是否需要将方法调用转化为仿真事件);

2. 当前版本客户程序和仿真平台的代码需要在同一服务内编译运行,后续版本考虑分开;

上下文:

仿真平台是仿真任务的执行底座,其关系可以类比于“操作系统”和“系统应用”。

仿真平台只与仿真任务存在相互调用关系,如下图。

仿真4. 仿真平台架构设计_第1张图片

关键用例:

1. 仿真平台对外暴露“启动仿真”接口,即仿真任务的运行入口。启动仿真后,调用方同步等待仿真执行的返回结果(后续版本可以增加异步执行能力),并进行后续处理;仿真任务启动后,在平台内部,先将仿真任务内部实体间的方法调用转换成仿真事件,再调度&执行转换而来的仿真事件;

2. 仿真平台对外暴露“终止仿真”接口,可以终止正在进行的仿真任务;

3. 仿真平台提供对仿真时钟进行操作的接口,客户程序可以通过调用该接口推进仿真时钟(模拟执行某方法消耗了X秒时间);

4. 产生随机事件(后续版本完成),随机增加或删除仿真事件,模拟现实中随机发生的事件;

仿真4. 仿真平台架构设计_第2张图片

领域建模:

如下图,根据“事件风暴法”,罗列出仿真平台相关事件,并根据事件间的相关性做聚合,抽象出仿真平台应包含的子领域。

由于整个仿真平台是一个服务,故下图中的每个子领域的存在形式是“包”或者“模块”。

仿真4. 仿真平台架构设计_第3张图片

逻辑视图: 

根据以上子领域的划分,可以初步确定仿真平台的逻辑视图,如下:

仿真4. 仿真平台架构设计_第4张图片

至此,仿真平台的逻辑架构已经基本清晰,每个模块内部的细粒度设计&开发运行部署等视图待后续更新。

 

你可能感兴趣的:(离散事件仿真,系统架构,仿真,java)