其实主要想问的是,我们应该去怎么评估一个业务,选择不同的实现对性能的影响?
两种选择甚至可能对实现的方式都完全不同,那么性能应该如何评估呢?
……
今天主要是遇到了一个问题,我要写一个系统日志监控预警的服务。
首先,有一个日志预警配置,里面针对不同的应用(不同Web、不同控制台等,都算一个应用),有一个预警配置,比如2分钟内30个Error通知手机,1个Fatal通知手机这样的。
1、最开始想的是,写一个Serilog.Sinks.SysMonitor 服务,每个应用启动的时候,都通过这个服务,额外将Error以上级别的日志推送到MQ队列中。
然后另起一个消费控制台,将这些日志全部消费下来,然后根据不同的应用配置,去判断是否触发预警,问题就是,所有的Error日志,都需要从RabbitMQ走一圈。
2、但后来,还有了另一个想法,就是将日志预警配置直接获取下来,然后多线程启动应用,每个应用间隔60秒,去查询一次Elasticsearch,查询最近2分钟内的Error和Fatal的数量,来判断是否触发预警。
……
我最后决定使用1的想法,因为感觉Error数量不会太多,通知也会更及时一点,感觉会比较好。(但这也是个拍脑袋的想法)
但我又衍生想到,两种想法之间,对系统性能的影响是多少呢?怎么评估他们之间哪个方案更优?
或者其他类似的情况,我们要怎么去评估业务设计最后的性能?应该怎么做?
他们不是RabbitMQ与Kafka这样同类中间件的比较,而是完全不同的两种设计逻辑,互相间应该怎么评估?
能提供一个思路就好。