Fork me on GitHub

【杉枫】推荐引擎异步架构设计

作者: 探索互联网

如果一味追求实时设计,对于线上并发量大的业务来说,瓶颈点是很多的,一个是IO消耗时间、一个是存储消耗时间、一个是计算消耗时间。实际情况并不是一个方面的问题,而是三个方面交织在一起。

IO消耗时间,包含数据读取,读取数据量大,量大IO就会消耗时间长。做了很多优化方式:1、多个key批量拉取,比单个循环要优化很多时间,合并了IO,将多次IO减少为了1次。2、多线程读取,通过多线程方式增加并行性,原来一个线程读,变成多个来提升性能。

存储消耗,存储消耗包含多个方面。1、读取存储速度本身影响着线上性能,大的存储用的是redis。2、读取redis本身消耗时间,采取部分数据提前拉取方式读取,缓存在内存减少读取消耗时间,本身也是存在一个问题,就是本地内存大小问题,缓存数据量局限于本地内存大小。3、存储量的影响,并且对于存储不是能够处理无限的qps,当数据拉取过多,会导致存储性能下降。

计算消耗,计算本身消耗cpu。1、将计算拆成新的服务,减少线上业务服务本身计算,但是增加了IO。2、多线程计算,通过多线程并发计算,减少计算时间,提升性能。

尝试了很多优化方式,取得了一定效果,但是每一种也都会带来一定问题,1、比如多线程能提升并发,但是过多线程会导致性能下降,甚至影响服务稳定。2、服务拆分本身可以增加很多计算量以及解耦,但如果服务之间传输数据特别多,时间都消耗在IO传输上,这点如果时间太长,拆分的优势就没了。

分布式带来好处是计算分散,问题也是需要更多机器资源,系统之间也会变复杂。并且能带来一定扩展,但不一定是特别大。

要想获得更多架构设计可能,可能就要转换思路,采取异步方式进行推荐架构设计,握紧手里面什么都没有,张开手获得的是一切。架构设计也是同理,需要换个思路,获得更多可能。

做事情挺重要一点是不断有新的思路,新的思路难点在于推进,特别是在大公司,有好处都上去了,有困难都跑的远远的,也就更需要初心,初心是做一件事,将来才有可能有机会做成更多事,初心是kpi过一段时间人就废了。

对于备战双11这种事,就是多少艰苦,不可告人。在这个过程中更多是要自己有收获,对于每个技术问题有自己的思考。更多的得到,避免功劳当作苦劳自己有收获,一定要有思考对于遇到的事与问题,解决眼前的问题并想一些根本解决方案,希望对你有点启发。


本文地址:https://www.6aiq.com/article/1541853178896
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出