夏日是一个热力四射和充满活力的季节。各种海边音乐节、野外烧烤大会、河边花火表演,闹市里的美食夜市,每一个瞬间都伴随着现金、二维码、信用卡、储值卡等各种不同的支付方式。在这些大量人群聚集的交易场景下,高并发的支付请求往往如潮水般涌入各个支付公司,严重考验着支付公司应对短暂高峰的能力。
星辰大海支付公司通过支付通道连接小岛信用卡公司,完成与信用卡相关的支付请求处理。但是,小岛信用卡公司因为本身支付通道入口资源的限制,只能提供给星辰大海支付公司每秒钟同时处理2笔交易(2TPS)的支付通道。这就像把一条大河的水流导入一根细小的管道,对星辰大海支付公司的产品技术来说,这是一项不可能完成的任务。那么应该怎么做才能完成这项不可能完成的任务呢?
异步处理是这种情况下的首选。如果说打电话是同步的话,微信聊天就是异步。打电话需要在一方说完话之后,另外一方立即回答。微信聊天可以是一方发出消息,另一方根据重要性和紧急程度(优先级),隔几分钟甚至更久才做出响应。由此也能看到,打电话基本上只能是同一个时间处理一件事,而发微信可以一次与N个人同时进行对话处理N件事,两者在并发性、吞吐量和处理能力上高下可见。
异步模式是一种计算和设计模式,其中操作的执行不会立即返回结果,而是在操作启动后的某个时间点完成。异步的关键思想是允许系统在等待某个长时间操作完成时继续进行其他任务,从而提高系统的整体效率和响应性。异步模式涉及到在不等待完成的情况下启动操作,并在稍后的时间点获取结果。这通常可以通过回调、事件、承诺(promises)、未来(futures)、可观察(observables)等机制来实现。诸如文件读写、网络请求等I/O操作是异步编程的经典应用,因为这些操作通常需要比CPU操作耗费更长的时间。UI和图形编程也经常使用异步模式,以确保用户界面始终保持响应状态,而不会被长时间操作所阻塞。具体的异步处理模式包括 NIO、消息队列、事件驱动等很多种,如下表所示:
在异步处理模式的众多选择中,NIO最常见。在高并发场景中,NIO的设计模式不可小觑。它使用Selector监控多个Channel,以事件驱动的方式通知我们,哪些Channel已经准备好可以进行I/O操作。这使得单一线程可以管理成千上万的连接。最为适用的应用场景是Web前端应用。
-----------------------------------
想要了解更多关于支付的故事,请阅读《一本书读懂支付》---扫描下方↓二维码,即可获得!
-----------------------------------