Apache spark B2C网站中kafka/storm/spark的可能使用案例

Apache spark B2C网站中kafka/storm/spark的可能使用案例,apache-spark,apache-kafka,apache-storm,Apache Spark,Apache Kafka,Apache Storm,我的公司有一个B2C网站,每天为数千名网络用户提供服务 它使用PHP、angular.js和MySQL 我们喜欢进入新的技术领域,我们看到一些热门趋势是卡夫卡/火花/风暴 我们如何在体系结构中使用这些技术,以及如何从中获益 感谢您使用的技术,形成一个web应用程序堆栈而卡夫卡、spark、storm server等技术的用途完全不同。因此,我将解释每一个的用途,以及它们如何帮助您 卡夫卡 是一个分布式流媒体平台。用外行的话说,这只是一种排队机制。如果您的应用程序具有某种在集群上运行的后端进程。所

我的公司有一个B2C网站,每天为数千名网络用户提供服务

它使用PHP、angular.js和MySQL

我们喜欢进入新的技术领域,我们看到一些热门趋势是卡夫卡/火花/风暴

我们如何在体系结构中使用这些技术,以及如何从中获益


感谢您使用的技术,形成一个web应用程序堆栈而卡夫卡、spark、storm server等技术的用途完全不同。因此,我将解释每一个的用途,以及它们如何帮助您

卡夫卡 是一个分布式流媒体平台。用外行的话说,这只是一种排队机制。如果您的应用程序具有某种在集群上运行的后端进程。所以,PHP后端将向后端进程发送请求数据

Apache Spark 那么主要是用于大规模的数据处理。它还为您提供流特性(小批量流)、图形API、ML API。当你想在集群中处理大量数据时,你应该考虑这个问题。 阿帕奇风暴 这是一个分布式实时计算系统。据我所知,这为实时处理数据提供了更好的流式处理能力


总之,所有这些技术都适用于具有实时处理功能的分布式处理。如果您想要合并这些系统中的任何一个,您的PHP后端可以充当中间人,代表最终用户使用这些系统。此外,您可能希望拥有多个PHP后端实例,以避免成为瓶颈。

迁移到上面描述的新类型堆栈有一些常见的动机,例如:

  • 解耦:例如,团队1的应用程序A不应影响团队2的应用程序B。您应该能够独立地开发和部署这两个应用程序(“A/team 1不需要等待B/team 2,反之亦然”),例如,A上的负载激增同样不会对B造成附带损害,微服务等概念都有助于实现解耦。(对于更广泛意义上的“脱钩”问题,我推荐Clojure的创始人、Datomic的联合创始人Rich Hickey观看)
  • 可伸缩性、弹性、容错性、反应性(这与解耦相关):例如,您可能需要多台机器(通常是几十台)来处理应用程序的传入数据或向客户端提供请求。您的应用程序还应该动态响应增加/减少的容量需求,这是支持的理念之一(参见Lightbend的最新版本,前身为TypeSafe,是Scala和Akka背后的公司)
在你的情况下,从你已经拥有的东西迁移出去是否有意义,当然取决于你的评估和决定。例如,您当前的设置可能已经充分满足了您的需求,但可能没有

但如果你想朝这个方向走,这里有一些进一步的建议可以帮助你开始:

  • ,作者Jay Kreps,阿帕奇·卡夫卡的创作者之一

  • 活动采购、微服务。为了给您提供一些具体的例子,您可以阅读沃尔玛(Walmart)等零售商以及Capital One(来自StrangeLoop 2016)等采用这些概念的大型金融公司。如果你想阅读所有这些的更高层次的概述,你可能想看看。一个关键的想法是,通过事件源,您实质上是在利用体系结构级别上的不变性的好处(另一个丰富的Hickey谈话,解释了为什么不变性/值如此重要)。这意味着您的应用程序中发生的所有事件都有一个不可变的“会计账本”(例如“客户ABC在时间T购买的物品XYZ”),您可以利用它来重新处理历史数据(例如修复生产中发现的错误)、a/B测试(在同一组历史数据上),等等

  • IMHO是另一篇好文章,它与前面提到的主题联系在一起,并在概念层面上解释了为什么现在许多工程师使用Kafka或Spark等技术重新设计他们的体系结构。正如作者所写,这里的一个动机是用人的术语“扩展”的想法,因为与计算机不同,我们的人脑没有


如果你想了解更多关于这个话题的信息,我建议你读一本简短的免费电子书(IIRC大约60页)。马丁还在写一本较长的书,IIRC计划于2017年3月出版最终版本;您已经可以通过O'Reilly Early access访问当前几乎完整的草稿。

请注意,如今Kafka不仅仅是一种消息传递或“排队机制”,而是一个用于发布、订阅、存储以及处理数据的成熟分布式流媒体平台。也就是说,许多用户现在选择利用内置的卡夫卡功能——特别是卡夫卡的Streams API——实时执行大规模数据处理(通过在卡夫卡外围运行的客户端应用程序)。与Spark或Storm不同,您不需要单独的处理集群或“作业”来实现这一点——相反,您可以编写使用Kafka的Streams API/库的标准Java应用程序。