我已经使用Message (RabbitMQ)开发了一个windows服务。
该服务的目的是通过TCP/UDP连接接收数据。解析HEX格式的传入数据,并将其转换为对象,并将对象保存到数据库中。此外,该服务还执行一些计算和检查,以发送警报/通知。
设备的数量约为3000至3500台。
服务是在C#、Rabbit、实体框架和SuperSocket.NET中开发的。
另外,我还实现了从数据库读取数据的缓存。
这是对体系结构的概述。
1 - Our service receives the data over TCP/UDP.
2 - Parse the HEX string to objects and saves them to the database.
3 - Push the object to the Message Queue for further processing.1 - Receives the object from Message Queue
2 - Performs a heavy calculation and saves to database
3 - Calculate events and send out email and sms alerts/notifications (dependent on Part B --> step 2)现在的问题是,由于A部分处理数据的速度如此之快,队列在2小时内就会被20万条记录填满。
我尝试在B部分中创建多个队列来处理记录,但是消息的传入率仍然比传出的要高得多。
我需要一些关于该做什么的指导,因为我已经没有关于如何改进服务的想法了,因为这是我第二次重新完成整个服务。
发布于 2017-12-18 08:08:31
在多个服务中拆分B部分。
B服务做大量的计算。
一旦完成繁重的计算,将其推入另一个队列,并有两个服务将计算的数据写入DB (C)并发送警报(D)。
这样,您就可以运行大量计算服务的多个实例。您甚至可以根据消息队列大小动态地缩放大量计算实例的数量。
例如A、B、C、D。
如果这还太慢,你甚至可以用更多的能量在专用服务器上运行B.
https://softwareengineering.stackexchange.com/questions/362612
复制相似问题