转载:什么是MES?MES对数据存储系统的性能要求是怎样的

作者:木头龙
链接:www.zhihu.com/question/464268985/answer/1934776483

其实关于这个问题,已经有我国动力电池某龙头企业对现实案例的总结[1]。我个人作为一个技术爱好者,没有接触到具体产品,没有一线数据,所能做的是对于这份案例进行一个科普性的解读,帮助大家更好的理解企业的需求和新技术对业务的推动。

什么是MES?MES对数据存储系统的性能要求是怎样的?

MES,Manufacturing Execution System,制造执行系统,是制造业中很常见的信息系统,用于跟踪和记录从原材料到产品的转化过程。 企业内部管理系统,大家听得最多的应该是ERP(Enterprise Resource Planning,企业资源计划)。不过大部分ERP的核心业务模块是进销存,其它模块如人员管理、财务管理、客户管理、供应商管理等等,都是为了进销存这个核心提供服务或者功能上的外延。而进销存的一个特点是商品在整个系统中并没有发生变化,进货之后要么存放要么销售出去(顶多再加一个报废)。而MES则是需要实现在制造型企业中,各种原材料通过一系列生产工序转化为最终产品的整个流程的数据记录。不同于ERP系统更侧重于整个企业的计划制定、执行和管理,MES的重点在生产车间的制造和执行层面,制定生产工序,从生产线采集各种生产数据以实现生产管控、产品朔源等目标。大部分中大型的制造型企业都部署了MES,相当比例的小微型制造企业也都部署有类似功能的管理系统,例如含有简单MES模块的ERP。MES的核心功能借用网上的一张图来解释[2]

MES核心功能架构,来源:公众号甲子光年,参考资料2


现代MES系统对存储系统性能的挑战。 早期的MES系统,数据通常使用关系型数据库记录,使用IO性能相对较低的磁记录存储介质。对于早期的人工录入生产数据方式,数据写入时间为上百毫秒甚至秒级的IO性能还是可以接受的。而随着固态硬盘的普及,关系型数据库的数据写入时间可以缩短到毫秒级甚至只有数百微秒,IO性能提升了上千倍,对于传统制造企业来说,这个性能非常充裕了。然而,随着工业4.0的提出,对于大型制造型企业来说,闪存存储的性能并不能完全满足企业的需要。因为随着生产规模的扩张,MES与其它系统的信息整合,以高度自动化的生产设备、智能车间、智能仓储、智能物流等技术为核心的智能车间,都会使得MES系统需要记录更多的数据,同时需要应对更大量更频繁的查询请求。

内存数据库在MES的应用。 为了满足大型制造企业中的MES系统对IO系统的性能要求,部分MES方案提供商采用了内存数据库来存储MES的数据。例如SAP ME,从15.1开始,允许用户从Oracle/MS SQL Server迁移到自家的内存数据库SAP HANA。SAP HANA就是一个面向列的关系型内存数据库,在SAP刚刚推出HANA的时候,根据某些SAP的客户反馈,迁移到SAP HANA的系统,以前可能需要十数个小时才能完成的分析报表,可以在数秒钟内返回分析结果[3]——这个结果听上去似乎有点夸张,不过如果原系统是采用单次IO延迟数毫秒甚至数十毫秒的磁盘存储(在HANA推出的2012~2013年,企业尚未采用闪存存储很正常),又需要分析大量数据的话也不奇怪。如果30小时的分析在3秒内完成,性能提升3.6万倍;而内存的访问延迟在百纳秒级,机械硬盘的IO延迟在十毫秒级,相差了5个量级,性能差异可以达到10万倍。

和使用磁存储、闪存存储作为数据库的存储介质相比,内存数据库虽然可以提供微秒级的IO性能,但是最常见的内存介质——DRAM是一种易失性存储,断电后数据会丢失。因此几乎所有的内存数据库都有额外的数据持久化机制——例如定时把内存中的数据快照写入到硬盘中。此外,DRAM的价格远高于闪存存储,对于大型制造企业以TB为单位甚至可能高达数PB的数据容量来说,成本极其高昂。而整个系统中,需要频繁访问的数据可能不到15%,使用高昂的DRAM存储访问频率较低的温数据甚至几乎不再访问的冷数据,显然是极大的浪费。就SAP HANA来说,从SP9开始提供动态数据分层(Dynamic Tiering),允许用户把数据表存储在磁盘中,仅仅把分析所需要的热数据保留在内存中。除了SAP HAHA外,其它内存数据库通常也有类似的持久化和分层方案。

使用内存数据库的MES系统的IO瓶颈

虽然内存数据库可以提供非常高的性能,然而大型MES还是需要有高性能的存储设备提供强大的IO性能。因为:

  1. 内存数据持久化: DRAM的易失性,为了避免意外断电导致数据丢失,需要定期把内存中的数据写入非易失性存储。
  2. 数据库日志: 不同于其它业务系统,业务数据丢失可以通过重做业务补回,MES所记录的数据是生产线上的数据,某些产生数据的设备本身并没有数据存储功能,难以通过简单的业务重做来补回丢失的数据。因此某些数据的更新操作,必须先写入存放在非易失性存储介质上的日志后才能进行。
  3. 冷热数据转换: 数据分层的“冷数据”、“温数据”和“热数据”只是一个相对概念,实际上并没有明确的划分标准。而且不同时间、不同任务会导致同一份数据在冷热数据之间转换,因此在MES系统中,依然会有大量的IO读写操作。而常见的闪存存储系统所能提供的IO性能,并不一定能满足某些大型制造企业的需求。

在参考案例[1]中就提到:

性能的提升,或者说操作时延的缩短只是XXXX核心数据库面临的挑战之一,可靠性是它另一个需要重点关切的指标。毕竟,该系统面临着实实在在的海量数据处理的挑战,其每日单表会新增 1 亿 - 2 亿条记录,而所有表每日新增条目超过 10 亿条,同时计算量超过百亿条。超短的处理时延与海量的计算和存储压力叠加,再考虑到关键数据不容有失,这就对 MES 的基础设施性能和可靠性都提出了非常严苛的挑战,XXXX亟需为之引入更先进、更适配内存数据库特点和需求的数据处理及存储方案。

为此,该企业引入了Intel的傲腾PMem,来解决MES的存储系统性能瓶颈。

Intel的傲腾PMem(中文全称:英特尔® 傲腾™ 持久内存)介绍

Intel在2017年上市的傲腾,是基于3D Xpoint技术的存储介质。不同于DRAM采用MOSFET-电容作为存储单元,也不同于闪存使用浮栅晶体管作为存储单元,3D Xpoint是一种全新的存储介质,使用可变电阻材料作为存储单元,并通过可堆叠的交叉网络(这也是3D X的含义——这里X读作Cross)访问这些存储单元。

和DRAM相比,3D Xpoint存储的数据是持久的,断电不会丢失数据;而且结构相对更为简单,可以实现更大容量的同时,单位存储成本更为便宜。缺点则是性能相对较低。根据美国加州大学NVSL实验室的一份基于傲腾PMem 100的评测报告[4],访问延迟方面,和DRAM可以达到50~100ns相比,傲腾PMem大概在300ns左右。带宽方面,单通道的DRAM接近20 GB/s,傲腾PMem大概是读带宽6.6 GB/s,写带宽2.3 GB/s。根据Intel的产品参数[5],第二代的傲腾PMem 200,带宽最高可以达到读 8.1 GB/s,写3.15 GB/s。

傲腾PMem与DRAM的基础性能对比,来源:参考资料4

和主流的以NAND Flash为代表的闪存存储相比,3D Xpoint无需先擦除(Erase)再编程(Program),可以直接改写存储单元上的数据。所以3D Xpoint没有NAND Flash一系列的FTL(Flash Translation Layer,闪存翻译层)重映射、垃圾回收、重新擦除等额外操作。此外3D Xpoint类似于DRAM按位访问,NAND Flash则是按页(Page)读写,按块(Block)擦除,所以3D Xpoint可以作为内存介质而NAND Flash不可以。性能方面,傲腾PMem数百纳秒的访问延迟比NAND Flash的数十微秒要高2个数量级,单通道的傲腾PMem带宽和目前性能最快的PCIe 4.0 x4的TLC NAND Flash相近。在目前唯一支持傲腾PMem的至强可扩展(第二代或更新)平台上,傲腾PMem可以配置为6通道/插槽,单插槽带宽提升接近6倍,如果采用双路甚至八路系统,则可以提供更高的带宽;当然,基于PCIe的NAND闪存也可以通过类似Intel的VROC(Virtual RAID Over CPU,CPU虚拟阵列)技术来获得更高带宽。缺点在于3D Xpoint的产品目前单位成本比TLC NAND Flash贵不少,以戴尔官网的服务器定制页面为例,128 GB的傲腾PMem单根报价约1.6万元,而800 GB的企业级SAS NAND Flash报价为1.76万元,单位容量采购成本相差5倍以上。

使用3D Xpoint技术的存储设备,除了通过内存控制器连接的傲腾PMem以外,还有通过PCIe通道连接的傲腾SSD,受限于PCIe通道的性能,访问延迟比内存形式的傲腾PMem大概要慢一个数量级,优点则是良好的应用兼容性,和主流的PCIe固态硬盘在使用上并无区别,无需特殊的操作系统、软件支持。

而傲腾PMem则有两种工作模式:

  1. 混合内存模式: 和普通内存在软件支持上一致,DRAM内存作为傲腾PMem的高速缓存使用,操作系统和应用的兼容性良好,无需针对傲腾PMem的持久特性进行优化或者改动,用户可以用相对DRAM来说非常低廉的价格构建超大内存容量的服务器配置。代价有两个方面,第一是关机或者重启后,傲腾PMem里面的数据虽然还在,但UEFI、操作系统的初始化流程会把傲腾PMem当作传统的数据易失的DRAM看待,需要重新初始化并且在初始化过程中覆盖掉上面的数据;第二则是DRAM的容量从某个角度来说则是被浪费掉。
  2. APP-Direct模式: 可以更有效的利用傲腾PMem的持久特性,有效利用DRAM容量,操作系统、软件可以直接访问作为第二层内存的傲腾PMem。而且对于大容量内存的配置,因为大部分数据存储在傲腾PMem上,可以持久保存,每次服务器开机、重启时无需重新初始化内存、花费大量时间从外部存储加载内存数据,大大缩短了因为维护、故障等原因导致的不可用时间。代价则是需要操作系统、应用软件针对傲腾PMem进行优化——如果所使用的操作系统和应用软件已经对APP-Direct模式进行了优化,就无需再额外支付这方面的代价了。

综合3D Xpoint的优缺点,以及大型企业的各种使用情景、数据访问频率、数据量需求,SAP SE在2019年的SAP HANA 2.0 SP3上,就正式提供对傲腾PMem的支持[6]。并且针对APP-Direct模式进行优化,傲腾PMem用于存放传统的“热数据”。

SAP HANA在傲腾PMem APP-Direct模式下的数据分层


采用了MES系统性能

,非常有效的提升了MES性能。具体表现有:

  • 大大缩短了IO队列。 等待队列的缩短,一方面有助于提高系统响应速度,另一方面缩短IO队列可以降低数据丢失风险。如下图所示:

采用傲腾PMem后等待队列缩短,来源见

  • 压缩MES系统重启时间。 引入傲腾PMem前,MES系统维护、升级,需要把内存中TB级的数据写入硬盘,开机后从硬盘重新加载,通常需要额外消耗数十分钟时间。引入傲腾PMem后,因为APP-Direct模式的傲腾PMem可以持久保存数据,节约了这个写入-重启-加载的过程,系统升级时间可以压缩到5~10分钟。
  • 实测性能提升6倍。 直接引用参考资料[1]结论:
通过在不同场景中的测试,双方对英特尔® 傲腾™ 持久内存在基于内存数据库的 MES 中的性能表现进行了充分评估。以 Data Merge 测试为例,如图四所示,归一化后的结果对比显示,采用英特尔® 傲腾™ 持久内存的方案比采用传统 SAS 高速固态盘的方案,在性能上提升高达 6.20 倍5,这意味着 MES 的落盘时间可以显著缩短,因各个操作互斥等待而造成系统停顿的概率也会大为降低。

采用傲腾PMem后MES系统的性能提升,来源:参考资料1