假设下面的pseudo code是一段重要的实时操作的程序:
。。。。
Begin Transaction
Call Remote Service A To Write Data in A system
Insert Record
Update Status
Call Remote Service B To insert Data in B system
Send Email To Notify User
Call Remote Service C To Update Data in C system
End Transaction
。。。。
大家都知道,上面pseudo code非常愚蠢,性能会非常差。违反了原则“事务中执行的操作越少越好”。
还有个原则大家时常用,但不一定总结出来;那就是“事务中不是万不得已,绝对禁止远程访问”。为啥?万一网络原因导致链接出问题,这个事务就可能要花时间等待远程访问结果,就会堵在哪儿。大规模系统中,事情总会是祸不单行的;由于网络原因,可能大量的事务因为这个原因而堵在那儿。数据库就会因此被搞爆掉,出大事故。
好,优化一下上面的pseudo code。得到以下的:
。。。。
Call Remote Service A To Write Data in A system
Begin Transaction
Insert Record
Update Status
End Transaction
Call Remote Service B To insert Data in B system
Send Email To Notify User
Call Remote Service C To Update Data in C system
。。。。
假设“insert Data in B system”和“Update Data in C system” 并不需要是实时的操作。如何提高性能?
不知大家有没有想到异步的方法?
对,最佳解决方案就是异步的“消息/事件订阅”。在交易系统中,所谓“消息/事件订阅”,就是将不需要实时处理的操作从主交易流程中移走,将它们变成外围服务;它们预定(Subscribe)主交易流程的消息或事件,异步的来消费主交易流程的消息/事件;从而大大提高主交易流程的性能。
主流程
。。。。
Call Remote Service A To Write Data in A system
Begin Transaction
Insert Record
Update Status
End Transaction
Push Message/Event To Queue
。。。。
外围子服务
服务1
。。。。
Subscribe Above Kind Message/Event
。。。。
Call Remote Service B To insert Data in B system
。。。。
服务2
。。。。
Subscribe Above Kind Message/Event
。。。。
Send Email To Notify User
。。。。
服务3
。。。。
Subscribe Above Kind Message/Event
。。。。
Call Remote Service C To Update Data in C system
。。。。
经过这样一改进,主流程的性能至少提高个几倍, 系统能同时处理的交易量会大大的提高。还有一个好处是主流程程序会简化很多,相关程序能够解出一些烦人的相互耦合。
分享到:
相关推荐
Informal-Discussion-on-Architecture 架构师-架构漫谈
架构漫谈(一):什么是架构? 架构漫谈(二):认识概念是理解架构的基础 架构漫谈(三):如何做好架构之识别问题 架构漫谈(四):如何做好架构之架构切分 架构漫谈(五):什么是软件 架构漫谈(六):软件架构...
系统架构设计漫谈.docx
《大型分布式网站架构设计与实践》主要介绍了大型分布式网站架构所涉及的一些技术细节,包括SOA架构的实现、互联网安全架构、构建分布式网站所依赖的基础设施、系统稳定性保障和海量数据分析等内容;深入地讲述了...
全新系统架构--基于中台和容器
高并发高可用的可伸缩的架构设计的原则 空间换时间 数据与计算 多维度可用 伸缩 优化资源利用
FPGA研发之道(7)架构设计漫谈(二)稳定压倒一切.docx
一个数据库工作人员多年的经验总结,对于刚上路的数据库设计人员有非常好的知道作用
阿里无线技术架构演进手机淘宝构架演化实践手机淘宝Android客户端架构漫谈移动应用架构设计大规模团队的Android开发支付宝钱包客户端技术架构百度手机百度Android平台平台化解决方案腾讯涅盘新生—Android QQ音乐...
该文档讲了编程中常见的23种设计模式,内容深入浅出,可以当工具书用。
程序设计漫谈,经典书籍,编程员必备!!!
FLASH设计制作技术漫谈-动漫设计毕业论文-范本.doc
通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
支付宝全局技术架构的设计漫谈.docx
架构模式与实践漫谈.pdf
漫谈设计模式书中代码,以及各章节的示例代码
[NET 4.0面向对象编程漫谈 应用篇].金旭亮---高清版.pdf 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
架构就是解决人的问题
通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计