多线程、事件驱动与推荐引擎框架选型

  • 时间:
  • 浏览:0
  • 来源:5分排列3_5分排列3官网

  多多多线程 :

  Nebula框架提供的Cmd类非常适合推荐服务的逻辑入口,支持动态加载,随时不停机升级推荐算法推荐模型。Step类异步获取redis等存储中的数据,无阻塞守候让cpu资源只用于推荐逻辑。session类用于缓存用户、item、模型等数据。所有的数据获取、传递均可通过session智能指针十分方便而高效地得到。

  在有有哪些基于rpc框架的推荐引擎中,后要 后要 开发人员提到了反射功能,否则通过几瓶宏以很费劲先要理解的办法实现了所谓的反射功能。有有哪些都后要 IoC框架,Bwar不理解为有哪些须要实现反射功能,可能性用Nebula来做将是非常简单的事,Nebula是IoC框架,所有的actor实例创建后要 通过反射创建的,后要 开发者做业务逻辑之外的任何事情。Nebula的反射实现很优雅,可能性感兴趣,都后要 参考这篇文章《C++反射机制:可变参数模板实现C++反射》。

  为有哪些是事件驱动而后要 多多多线程 ?事件驱动后要 多多多线程 。后要 后要 人 先来回顾一下服务器编程范式。

  Nginx采用的是九种服务器设计范式里的第5种“预先派生子多多线程 ,使用互斥锁上锁办法保护accept”,Nebula采用的是九种服务器设计范式里的第6种“预先派生子多多线程 ,由父多多线程 向子多多线程 传递套接字文件描述符”。

  事件驱动的有六个 非常有代表性的实现Node.js和redis,后要 有六个 单多多线程 (单多多线程 )的服务(redis的数据落地或主从同步多多线程 排除,其服务后要 后要 后要 后要 单多多线程 的),事件避免都通过异步回调执行。第二节中单多多线程 、多多多线程 、事件驱动编程模型等类似于比较中看起来事件驱动是单多多线程 的,Node.js两种 典型的事件驱动服务也是单多多线程 的,原因分析 后要 后要 人 以为事件驱动这么是单多多线程 的,这么充分利用多CPU多核资源。我觉得不然,Nginx也是有六个 典型的事件驱动服务,而Nginx是多多多线程 的。从逻辑上划分后端服务,Nginx归为接入通信层(openresty两种 nginx+lua实现业务逻辑的没了讨论范围),Node.js归为业务逻辑层。接入通信层的特点后要 IO行为几乎不大消耗CPU是盐晶 适合事件驱动的,也比较容易实现,而业务逻辑层的特点决定了事件驱动办法实现非常冗杂,但这并原因分析 业务逻辑层的多多多线程 事件驱动难以实现。

  事件驱动编程是两种编程范式,这里多多线程 的执行流由结构事件来决定。它的特点是包含晒 六个 事件循环,当结构事件存在时使用回调机制来触发相应的避免。多多多线程 是另两种常用编程范式,否则更容易理解。

  在事件驱动版本的多多线程 中,六个任务交错执行,但仍然在有六个 单独的多多线程 控制中。当避免I/O可能性后要 后要 昂贵的操作时,注册有六个 回调到事件循环中,否则当I/O操作完成时继续执行。回调描述了该怎么避免某个事件。事件循环轮询所有的事件,当事件到来时将它们分配给守候避免事件的回调函数。两种 办法让多多线程 尽可能性的得以执行而不须要用到额外的多多线程 。当无IO操作时每个任务占用cpu的时间又比较少,多多线程 就会存在空闲状况。同等并发量状况下,事件驱动占用的系统资源会更好,负载足够大时,事件驱动多多线程 都后要 将cpu利用到3000%。事件驱动型多多线程 比多多多线程 多多线程 更容易推断出行为,可能性多多线程 员不须要关心多多线程 安全间题。

  开发Nebula框架目的是致力于提供两种基于C++快速构建高性能的分布式服务。可能性我觉得本文对你有用,别忘了到Nebula的 Github 或 码云 给个star,谢谢。

  多多多线程 的前三点后要 优点,第四点是缺点。Nebula选则多多多线程 就不须要考虑锁和同步资源间题,数据和错误隔离,worker多多线程 崩溃后要影响整个节点服务,会被master多多线程 好快拉起。第四点缺点在Nebula不须要考虑,可能性Nebula事件驱动的多多线程 之间是不须要切换的,都后要 近似地认为每个worker多多线程 后要 有六个 节点,节点与节点之间这么网络通信,不须要共享资源更不须要做切换。

  已知业界推荐引擎有使用C++开发后要 使用Java开发,C++开发占大多数。在Bwar了解到的C++开发的推荐引擎中多使用rpc框架,使用thrift的有六个 ,使用brpc的有六个 ,使用grpc的有六个 ,使用tars的有六个 。因有有哪些开源rpc框架后要 专为推荐引擎所开发的框架,开发人员通常会在有有哪些框架之上再架设一层框架,否则才是业务逻辑开发。Bwar接触的有六个 推荐引擎后要 后要 后要 后要 基于brpc再开发了被委托人的框架否则才做业务逻辑开发,其开发难度比较大,且不容易扩展。后要 后要 人 说是开发人员对有有哪些开源rpc框架理解欠缺深入,原因分析 业务逻辑开发比较冗杂,对后续需求扩展不易。

参考资料:

  Nebula 适用于即时通讯、数据分类整理、实时计算、消息推送等应用场景,也适用于web后台服务。Nebula已有即时通讯、分类整理数据分类整理及实六时析的生产应用案例,更快将有六个 面向亿级用户的推荐引擎生产应用案例。

  在多多多线程 模型,每个任务分别在独立的多多线程 中执行。有有哪些多多线程 由操作系统来管理,在多避免器系统上都后要 并行避免,可能性在单避免器系统上交错执行。这使得当某个多多线程 阻塞在某个资源的一齐后要 后要 多多线程 得以继续执行。与完成类似于功能的同步多多线程 相比,两种 办法更有传输速率,但多多线程 员须要写代码来保护共享资源,避免其被多个多多线程 一齐访问。多多多线程 多多线程 更加难以推断,可能性类似于多多线程 不得不通太满多线程 同步机制如锁、可重入函数、多多线程 局部存储可能性后要 后要 机制来避免多多线程 安全间题,可能性实现不当就会原因分析 总出 微妙且令人痛不欲生的bug。曾经间题,操作系统内核在切换多多线程 的一齐也要切换多多线程 的上下文,当多多线程 数量后要 时,时间可能性被耗用在上下文切换中。后要 后要 后要 后要 有在大并发量时,多多多线程 特性还是无法做到强大的伸缩性。

  高性能通用型C++网络框架 Nebula 是基于事件驱动的多多多线程 网络框架(适用于即时通讯、数据分类整理、实时计算、消息推送等应用场景),已有即时通讯、分类整理数据分类整理及实六时析的生产应用案例。老是有人问Nebula的每个多多线程 里是单多多线程 还是多多多线程 的?又问为有哪些后要多多多线程 ?后要多多多线程 又缘何避免并发间题?

  有六个 典型的事件驱动的多多线程 ,后要 后要 后要 后要 有六个 死循环,并以有六个 多多线程 的形式存在,两种 死循环包括有六个 次要,第有六个 次就说 按照一定的条件接收并选则有六个 要避免的事件,第六个次要后要 后要 后要 后要 事件的避免过程。多多线程 的执行过程后要 后要 后要 后要 选则事件和避免事件,而当这么 任何事件触发时,多多线程 会因查询事件队列失败而进入睡眠状况,从而释放cpu。

  最近 Nebula 可能性用于有六个 新的生产项目——推荐引擎,在此曾经团队已有使用某知名度较高的RPC框架多多多线程 版推荐引擎(业界后要 后要 推荐引擎都用了目前比较知名的开源RPC框架来开发)。本文不做Nebula与各知名RPC框架的比较,也无意说明哪个框架更适合做推荐引擎,只说明Nebula都后要 用于推荐引擎,且有信心效果会很好。最终结果怎么,等推荐引擎研发出来,拭目以待。

  在单多多线程 同步模型中,任务按照顺序执行。可能性某个任务可能性I/O而阻塞,后要 后要 所有的任务都须要守候,直到它完成曾经它们后要 依次执行。两种 明确的执行顺序和串行化避免的行为是很容易推断得出的。可能性任务之间并这么 互相依赖的关系,但仍然须要互相守候句子这就使得多多线程 后要 要的降低了运行传输速率。

  九种服务器设计范式并后要 全后要 实用价值,在《UNIX网络编程》卷一最后一节里给出了几种TCP服务器设计范式代码示例:

  说到推荐系统,首先被想到的可能性是基于内容、协同过滤、基于人口统计学、基于知识、基于社区、混合推荐等推荐技术。推荐技术的实施通常基于hadoop,用hive、spark、storm、flink等来实现。有有哪些通常被称为推荐的数据挖掘次要。

  Nebula是Bwar开发的C++网络框架,生而为分布式服务,经过有六个 生产环境的应用。Nebula后要 rpc框架后要 后要 后要 后要 有六个 基proactor(框架层实现proactor而非操作系统支持)事件驱动(回调)的框架。后要 像大多数异步事件回调框架那样开发者须要被委托人注册回调函数,Nebula一齐也是个IoC框架,通过actor类的巧妙设计实现降低了异步编程的冗杂度,开发者真正意义上只需聚焦业务逻辑开发。

  Nebula后要 后要 后要 后要 有六个 多多线程 事件驱动服务的典型。事件驱动的每有六个 多多线程 都足够高效,多个多多线程 (多多多线程 )又充分利用多CPU多核资源。Nebula的多多线程 模型与Nginx类似于,区别在于Nginx是各worker互斥锁上锁accept,而Nebula是由master多多线程 accept后将连接对应的文件描述符传送给worker多多线程 (跟Memcached类似于)。Nebula是从满足即时通讯应用而开发的Starship框架发展而来的,与nginx的多多线程 (多多线程 )模型存在类似于纯属偶然。为有哪些Nebula选则传送文件描述符而后要 各worker多多线程 抢accept?跟Nebula定位有关系,Nebula不仅须要做接入通信层、数据代理层,更要做业务逻辑层,分布式服务的各层服务都都后要 且应该用Nebula实现,这原因分析 每有六个 worker多多线程 接近于分布式服务的有六个 节点的功能,可能性是worker抢占式accept就无法做定向路由。为有哪些选则多多多线程 而后要 多多多线程 ?先看看太满多线程 与多多多线程 的优缺点比较:

  多多多线程 :

  对于IO密集型的业务,事件驱动比多多多线程 同步的并发能力要高后要 后要 后要 后要 有,都后要 说后要 有六个 数量级的。而大次要互联网业务都属于IO密集型业务,否则事件驱动的适用场景非常广泛。多多线程 含晒 后要 后要 层厚独立的任务,在守候事件到来时,后要 后要 任务会阻塞,单个任务须要占用较少CPU资源。

  《UNIX网络编程》卷一里介绍了9种服务器设计范式:

  推荐引擎是推荐系统核心之一,负责将数据挖掘的结果按一定排序推送给用户,这后要 后要 后要 后要 推荐引擎的主要功能。

  两种意义上说,服务端多多线程 大多是事件驱动的,可能性说是IO请求事件驱动的。这里比较的编程模型里的事件驱动是指事件避免次就说 异步的,即不仅IO请求事件驱动,还有IO响应事件驱动,它的特点是当结构IO响应事件存在时使用回调机制来触发相应的避免。