首先,我想确定金融界实时系统可接受的端到端延迟小于 200 毫秒。好的,这就是我所追求的。在实时系统的设计中,有一些“设计模式”(或技术)可以提高性能(即减少处理时间、提高可伸缩性等)。
我所追求的一个例子是,使用 GUID 而不是序号来分配主键。GUID 的基本原理是处理程序拥有自己的主键生成器,而无需相互“协商”。这允许发生并行处理并允许缩放。
这里还有一些。我会尽量添加到列表中。
- 使用事件驱动架构(EDA)。
- 使用消息队列来支持 EDA。
我向社区的集体智慧低头。多谢!
首先,我想确定金融界实时系统可接受的端到端延迟小于 200 毫秒。好的,这就是我所追求的。在实时系统的设计中,有一些“设计模式”(或技术)可以提高性能(即减少处理时间、提高可伸缩性等)。
我所追求的一个例子是,使用 GUID 而不是序号来分配主键。GUID 的基本原理是处理程序拥有自己的主键生成器,而无需相互“协商”。这允许发生并行处理并允许缩放。
这里还有一些。我会尽量添加到列表中。
我向社区的集体智慧低头。多谢!
对于一般的实时系统工作,经典规则是追求可变性并杀死它。真正的硬实时意味着使用静态计划、简化的操作系统、高效的设备驱动程序和坚如磐石的优先级。如果您真的希望计算 X 在已知的时限 T 内结束,那么动态或自适应的东西是不可行的。
我猜你的意思在这方面并不是真正的实时,而且我猜这个系统比读取传感器、计算控制回路、激活执行器要复杂一些。更多细节会很高兴知道这里有哪些限制。
尽管听起来很基本,但大多数业务线应用程序都充满了冗余计算,消除它们。计算重构是优化模式的支柱。每次出现处理周期时,您都必须询问:
此周期内的计算结果与周期外的输出相同。作为一个基本示例:
for(int i=0;i< x/2; i++)
//do something
在这里,您可以安全地取 x/2 并在 cicle 之前计算它并重用该值(现代编译器现在负责这些琐碎的优化)
为了了解这个简单规则的影响,我可以给你一个应用于数据库查询的例子。为了避免两个表的 INNER JOIN 以获得高度重复的字段 requent,您可以违反规范化规则并将其复制到与具有该值的表相关的表上。这避免了重复的表连接处理,并且可以释放并行化,因为只有一个表需要锁定在事务上。例子:
客户表查询经常需要客户折扣,但折扣保存在客户类型表中。
除非您确定它已“损坏”,否则不要“修复”任何东西。
我要做的第一件事是从必须快速运行的程序中调出火焰。我会使用我最喜欢的技术。然后,很有可能,会有足够的回旋余地来玩弄建筑。