流式计算总结
来源:互联网 发布:gps数据采集的仪器 编辑:程序博客网 时间:2024/04/28 18:40
为了更好的写下一篇文章【流式计算和异构数据源的整合】,特意把自己在流式计算上的经验给总结一下,欢迎大家质疑;
网络IO工作模型,别人都用什么同步,异步XXX的,我就换个角度好了;
好吧,为了写这网络IO工作模型,我另外来一篇文章【网络IO工作模型以及在分布式中的应用】
流式计算的两种形式
图很挫,而且不严谨,凑合看一下吧,而且文章结束的时候,我会告诉大家这两种“所谓的模式“,其实没有明确界限
两种模式的优缺点
中心模式
- get用阻塞方式实现(主线程收/回包,工作线程去阻塞get)
- get用非阻塞方式实现(只需一个线程)
- 优点:并发数高
- 缺点:容易出错,上一篇文章有详细说明(double-free,mem-leak,引用栈上空间)
- 本身的优点:
序列模式
- 缺点
- 上下游的耦合,可重用性不高
- 上下游处理速度不匹配导致cache数据
- 下游down机,上游处理麻烦
- 优点
- 只要还有任务在处理队列中,消费者都会及时从上游获得任务及时处理
两种模式的IO
面对的问题
- 数据的堆积
- 数据量大的情况下,序列模式必须要有个消息队列来堆积速度不匹配的导致的cache,这个队列可以在上游做,也可以做到下游,我认为最好的办法是在中间加一层纯粹的消息队列
- 数据的retry
- 当server不带上下文,带定期更新的上下文,retry的问题都不大
- 带随时更新的上下文,这才是最麻烦的,目前我做在业务里,慢慢有想法做到框架里了,但是未必对别的公司有用;
适用场景
- 对时效性要求比较高,甚至是实时的
- 基于一个请求即可,获得输出(相对于基于一批输入才能获得输出,如统计需要一批输入,不适合用这种模型),同比map-reduce模型
补充废话
- 这两种模式是可以结合起来使用的
- 如:一个中心模式A,做完之后,发给下一个中心模式B,这样A,B就是一种序列模式了,实际上这种情况才是最常见的;
- 同样如:一个序列模式中的serverA,它为了完成工作,需要对外请求:A1,A2,这同样又是一种中心模式
- 所以:这篇文章里的XX模式,其实都是上一篇文章中的东西,网络IO,再细看网络IO,其实它也是由更简单的东西组成的。