随着国家对ETC的大力推广,大家大多少都安装了ETC,在使用中大家会发现,ETC的扣款需要等上几天才会出来,如果需要发票更是麻烦,还得到现场去打印,为什么
现在ETC系统基本全国联网,并且和全国多家银行,微信,支付宝连接进行扣款支付,是一个典型的分布式系统。
我们从分布式系统架构的角度来进行分析为什么ETC不实时扣款。一个分布式系统最多只能同时满足强一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。如下图所示
对于一般的高并发,高可用的分布式系统,如全国联网的ETC系统,一般满足可用性和最终一致性,具体的做法是用户车辆通过收费站时,ETC车道设备通过无线设备将用户车牌及费用信息发给ETC联网平台,ETC联网系统中心首先追加日志log,然后通过消息队列异步来处理支付扣款(通知银行或者微信,支付宝扣款,然后短信通知用户),通常这个异步操作延时较长,且存在失败的可能,所以不建议实时并发同时操作。另外,对于按月或者其它时间段扣款的用户,通常是跑一个离线的mapreduce或者spark任务去聚合日志,得到每个用户这个月的总费用,然后同样通过消息队列异步来处理支付扣款。