现状一现有MES系统不堪重负


随着企业规模的扩大,生产线数量快速扩张(从40条生

产线扩展到未来的1000多条), 同时传感器和检测系统

每天产生大量的数据,如果仍然采用原有的架构将不堪

重负(。 性能和吞吐量等非功能性需求开始超越功能性

需求,成为决定软件架构的关键性驱动力量。

为了应付未来公司业务规模的高速扩展,必须作出具有

前瞻性的设计。

问题


大数据建设的关键,是解决系统的关键性非功能需求,

尤其是下面的四个方面:


吞吐量(扩 展性)         高性能

海量存储                   高可用


以交通运输系统来比喻:吞吐量可类比道路的车道数量

可容纳多少辆车同时跑(而不用显著降低车辆的行

驶速度) ;高性能可类比车辆的速度一每辆车 可以跑

得多快;海量存储可类比停车场一可以容纳多 少辆车

同时停放;高可用意味着道路上一-直有车在跑,一两辆

车的故障不会使整个运输系统失效。

解决问题


解决方案由两部分组成:


大数据基础设施建设,主要解决吞吐量(扩展性)、 海

量存储和高可用问题,并部分解决性能问题;


业务设计和代码重构,主要解决性能问题。


为了实现上面的四个非功能性需求,以及异构集成的需

求,我们设计了新的大数据平台架构,整体架构如图

数据分流


结构化数据(生产和生产支持)存储在关系数据库(MySQL和

Greenplum)上, 半结构化数据(传感器和检测)存储在

HBase上,非结构化数据(图片、 视频和文件)存储在TFS上。


主数据作为全局表,存储于所有的MySQL分片服务器上;事务

性数据分片存储到不同的MySQL分片服务器上。


实时数据存储于MySQl数据库和HBase上,历史数据和统计性

数据存储于Greenplum上。


所有的数据最终汇聚到Greenplum,用于永久存储和数据分析。

数据分流


通过将非结构化数据和历史数据分别分流到HBase、Greenplum和TFS, MySQL

中只储存主数据和在制品(正在制造,未交付给客户的产品)的事务性数据,已经

大大减少生产数据库MySQL要存储的数据量。但是,为了进-步提高性能和吞吐

量,我们还需要使用MyCAT对MySQL进行分片。


分片决策:


分片的最高原则是:绝不允许跨分片关联(例如分片A中的一行数据的一个外键列关联到分片B中的一-行数据的主键列),但允许跨分片聚合(从多个分片中获取数据,聚合为- 个总数据集返回给用户)


暂定以生产单元(各个生产公司)作为分片依据。如果每个公司的规模不均匀,可能要选择其他的分片字段,例如产品条码。


主数据存储于每台分片服务器上,不同生产单元的事务性数据保存在不同的分片服务器上。因为事务性数据关联主数居,这样的设计可以使得关联可以局限在分片内部。


主从表(例如订单表和订单条目表)中的数据行必须划分到同一个分片,以消除跨分片关联的需要。


分片中最重要的决策是为每个数据表选择分片字段。在不允许跨分片关联的前提下,让数据尽可能均匀地分布在多个分片服务器上,而且当未来数据规模增长时,能够比较容易地通过增加更多的分片服务器来扩展系统的存储能力。

集群和高可用


每个MySQL分片用三台服务器做主-从-备配置,以保证高可用

和数据安全。


部署4个MyCAT集群服务器,以保证高可用和高并发。


LVS服务器采用主/备方式保证高可用。


HBase采用标准的集群和高可用方案,消除单点失败的可能。


TFS采用主/备方式部署Master节点,通过数据节点冗余备份。

计算


1 应用服务器集群和负载均衡

2 缓存服务器Redis

3 用全文检索代替大表模糊查询

4 SQL重构

5 用响应式编程取代触发器

6 并发、并行和异步编程

接入


Netty

Netty是一个高性能高并发的Socket通信设施。

在卓越制造平台中建立Netty高性能Socket通信服务器,接收传感

器和检测系统发送过来的海量数据。Netty可充分应对这方面的高

并发需求。未来的产线系统也通过Netty将产线系统的数据上报到

卓越制造平台。


ActiveMQ

ActiveMQ用于在卓越制造系统和ERP、OA等第三方系统之间的通

信上。另外,卓越制造平台也通过ActiveMQ向产线系统下发生产

指令。


WebSocket

WebSocket接受系统中产生的事件,向分布在各厂区的电子显示

屏广播,例如呈现传感器的时间序列数据。

总结


改进建议总结如下:


将单一数据库拆分为物料、库存、设备、工艺、品质和生产五个独立的

数据库以降低并发压力。提供自动化封装,使得分库对开发入员透明。


将单一数据库拆分为物料、库存、设备、工艺、品质和生产五个独立的

数据库以降低并发压力。提供自动化封装,使得分库对开发人员送明。


对生产数据库中的大表进行分片以降低并发压力。建议按产品码分片。


冗余存储关联表的不安字段。


冗余存储计算字段。


通过全文检索,根据要宣询的关联表的字段反宣到其ID,然后根据这个

ID在当前表中进行单表查询。


根据外键D,全文检索到关联表的其他字段,呈现给用户。


用全文检索取代模糊查询。


通过缓存加速查询速度。


用事件驱动的方式处理大粒度事务。


离线报表用Hive + Spark实现。


实时报表用Spark即时计算出来。