用Confluent Cloud和Ably构建一个可靠的实时投注应用程序

155 阅读16分钟

Building a dependable realtime betting app with Confluent Cloud and Ably

这篇博文首次发表于Confluent博客

Building a dependable realtime betting app with Confluent Cloud and Ably

我们的日常数字体验正处于一场革命之中。客户越来越希望他们的在线体验是互动的、沉浸式的,并且默认是实时的 。满足用户期望的需求正在推动各种形式和规模的组织中事件驱动架构的指数式增长。而通过使用户能够随时随地、全天候地获得实时体验,移动推动了这一变化的进一步和快速发展。

在这篇文章中,我们将展示一个简单的方法,通过结合 Confluent云的力量和Ably边缘消息平台的能力,建立一个可靠的实时投注体验。我们在这个演示中使用了一个博彩用例,但我们分享的见解与任何需要在互联网上以弹性规模处理和流转实时数据的事件驱动系统相关。

实时体育博彩的用例

游戏和博彩业是一个很好的例子,说明了为什么实时性对保持竞争力至关重要。保持用户参与的需要(并最终推动更多的投注收入)导致了游戏中投注的出现。赔率是动态更新的,因此用户可以在现场体育赛事中下注,甚至在有时间限制的情况下下注,如点球的结果。然而,要保持参与并成为一个平台的拥护者,用户需要信任它,并相信他们每次都会有一个良好的投注体验。

在互联网上实时向用户提供数据是一个复杂的挑战。如果做不到这一点,就会导致用户的不满,正如这些公开的各种投注应用程序的评论所显示的那样。

Building a dependable realtime betting app with Confluent Cloud and Ably

Building a dependable realtime betting app with Confluent Cloud and Ably

客户离开那些不能提供可靠体验的平台。

Building a dependable realtime betting app with Confluent Cloud and Ably

延迟,甚至一次错过的更新都会大大降低用户的信任度,导致客户的流失。因此,公司必须确保与用户(移动或其他)之间的数据流保持快速和可靠。

Kafka正在成为构建安全、高度可扩展和可靠的投注平台的行业标准,这些平台可以实时处理数百万次的投注。但它只是解决方案的一个部分。Kafka被设计成在后端运行,但你还需要一种方法来将你的以Kafka为中心的高性能管道连接到网络边缘的终端用户。

可靠的实时投注解决方案的要求

一个实时投注解决方案必须处理快速变化、有时无法预测的终端用户数量。大的连接峰值是很常见的--特别是在诸如超级碗、世界杯或一级方程式大奖赛等活动期间,这些活动吸引了数以百万计的同时投注者。这些用户需要能够实时下注和接收更新信息(新赔率、最新比分)。毕竟,当涉及到体育直播时,即使是一秒钟也会产生巨大的差异。

一个可靠的博彩解决方案必须具备以下特性。

  • 高可用性和容错性- 因此,即使在基础设施故障等不利条件下,它也能继续不间断地运行。
  • 低延迟 - 不仅要确保良好的用户体验,而且要尽量减少产生高额债务的风险 - 你接收和处理投注的速度越快,你就能更快地生成新的、更新的赔率并将其发送给用户。
  • 可扩展性 - 系统经常需要维持非常多的并发用户。最好是在操作时留有容量余地,并使用动态弹性服务器层,这样系统就能快速扩展,成功解决流量激增的问题。
  • 数据完整性保证 - ,以获得卓越的服务质量。举例来说,以错误的顺序发送最新的赔率,或者由于最多一次的属性而放弃事件,都会打破用户的信任,并看到他们走向竞争对手。

Confluent云Ably一起,可以轻松提供所有这些属性。由于Confluent云的弹性、高可用性和可靠性,它是构建互动博彩系统的绝佳选择--正如2021年Kafka峰会上所展示的那样。

Ably是一个边缘消息平台,旨在通过一个容错的、自动扩展的全球边缘网络,向网络、移动和物联网设备分发和收集低延迟的消息。Ably经常被用作Apache KafkaⓇ的扩展,用于实时向网络边缘的终端用户发送关键任务的数据

新发布的Ably Kafka连接器在Kafka或Confluent和Ably之间提供无缝的无代码集成。该连接器使Confluent生态系统中以亚秒级延迟处理的数据能够以快速和可靠的方式传送到客户端设备,Ably作为中间的消息代理。此外,Ably通过Firehose服务使终端用户产生的事件数据可以很容易地流回你的Kafka部署的任何规模。

实时投注解决方案架构

为了展示Confluent Cloud和Ably在工程化实时投注功能时是如何合作的,我们建立了一个具有以下架构的演示。

Building a dependable realtime betting app with Confluent Cloud and Ably

每当有新的赔率出现,它们就会通过Ably Kafka连接器从Confluent Cloud发送到Ably。然后,Ably通过pub/sub渠道将赔率实时分发给任意数量的Android应用用户。

在安卓应用中,用户可以看到赔率的实时变化,他们可以下注。由于Ably使用事件驱动的双向WebSockets作为主要传输协议,用户不仅可以收到赔率,还可以通过同一连接快速下注。

ksqlDB被用来创建订单簿当前状态的物化视图,并将更新的赔率推送到Odds主题中。我们还建立了一个Python微服务,它可以查询ksqlDB,向用户发送个性化的通知,让他们了解各种事件:一场胜利、一场失败或一场即将开始的新比赛(本文后面会有更多关于这个微服务的介绍)。

从这里开始,我们到目前为止所涉及的过程会重复进行--在后端和安卓应用之间有一个连续的数据处理和实时旅行的循环,Ably作为Kafka和终端用户之间的边缘消息中介

系统特点和优势


用Confluent Cloud和Ably构建的博彩解决方案具有以下优势。

  • 低延迟。每当下注时,信息在Confluent Cloud主题中以毫秒为单位进行流式处理,而新的赔率则通过Ably推送给终端用户,延迟时间为亚秒。
  • 可扩展性。 Confluent Cloud提供了弹性和自服务配置,使您能够根据需要快速和毫不费力地扩展您的Kafka生态系统。同样,Ably在后端和前端之间提供了一个完全可管理的层,可以水平地自动扩展,以处理数百万并发连接的终端用户设备。
  • 可靠和高度可用。C onfluent云和Aply的设计都考虑到了容错和高可用性。它们共同创建了一个分布式的、强大的、值得信赖的事件驱动管道,确保了具有竞争力的正常运行时间SLA,而不考虑基础设施故障或系统中的其他故障,如一个可用性区域暂时不可用。Confluent Cloud提供99.95%的正常运行时间SLAAbly提供99.999%的正常运行时间SLA,这意味着系统总是可靠地提供给终端用户。
  • 信息服务质量。 Confluent Cloud可以被配置为确保排序和准确无误的语义,而Ably也保证消息的排序、交付和准确无误的语义,即使是在不可靠的网络条件下。Confluent Cloud和Ably共同提供了端到端的数据完整性:用户总是能收到最新的赔率,没有任何下注被丢失或未能被处理。
  • 易用性和可扩展性。C onfluent Cloud和Ably是完全可管理的解决方案。用这两种技术构建的任何系统都是低代码的,易于设置和管理,没有基础设施需要维护。此外,Confluent和Ably与许多其他服务(例如数据库和无服务器平台)集成,使其很容易在架构中添加更多组件,并建立额外的相关功能,如实时欺诈检测。
  • 增加参与度和收入。作为低延迟、事件驱动的解决方案,Confluent和Ably使您能够提高参与度,不仅允许用户对主要事件(如一场比赛的获胜者)进行投注,甚至对时间非常敏感的细化(子)事件(如一个点球的结果)进行投注。而你提供的投注机会越多,增加收入的机会就越大。

构建实时投注演示

在我们进入逐步演练之前,让我们回顾一下我们将用来构建实时投注演示的主要组件。

  • Confluent Cloud和ksqlDB,用于事件流和流处理。
  • Ably Kafka连接器,用于将数据从Confluent Cloud主题传输到Ably。
  • Ably用于向终端用户分发赔率和推送通知,并将他们的投注流向Confluent Cloud。
  • 安卓应用--供用户查看赔率变化和实时下注。

我们现在将深入探讨更多细节,包括如何设置这些组件中的每一个,并演示它们如何相互作用。所有这些都将在下面的视频中呈现。

本文的其余部分基本上涵盖了上述视频中的相同内容。

设置Confluent云

设置Confluent生态系统是很简单的,包括几个简单的步骤。如果你还没有,可以先注册一个Confluent Cloud账户

一旦你登录了Confluent Cloud,创建一个Kafka集群(默认设置对于我们的演示来说是可以的)。请注意,Confluent让你可以灵活地选择你所选择的云提供商和地区来部署Kafka集群。作为补充,Ably由一个全球分布的边缘网络支持,保证客户总是被路由到离他们最近的Ably数据中心。

接下来,提供两个Kafka主题,用于存储用户的投注,以及每次投注时产生的新赔率。默认情况下,每个Kafka主题有六个分区;在我们的演示中,你并不真的需要所有的六个分区,但在现实生活中,增加分区是增加Kafka容量的主要方式,这样你就可以处理高负载。

现在我们已经有了一个Kafka集群和主题,并且正在运行,设置一个基本的ksqlDB应用程序。我们将使用ksqlDB来创建一个传入赌注的物化视图,并在此基础上生成新的赔率。

开始使用Ably

与Confluent类似,使用Ably也很简单。首先要注册一个Ably账户

接下来,登录你的Ably账户仪表板并创建一个Ably应用程序

在我的Ably应用的 "集成 "选项卡中,我创建了一个Kafka规则,它允许我们将Android应用中的投注流向Kafka中的Bets主题。

Building a dependable realtime betting app with Confluent Cloud and Ably

请注意,Kafka规则是一个新功能,目前还处于开发者预览阶段。这也是一个企业专用的功能。但是,如果你打算自己构建这个演示,请联系我们,我们会讨论如何让Kafka规则供你测试。

对于进出边缘的数据分发,Ably使用通道,它类似于Kafka主题。然而,Ably通道是在使用点上动态提供的(不需要提前提供),而且它们有分层的命名空间,以实现基于规则的消息处理(例如,推送通知、火流规则)。

安装Ably Kafka连接器

Ably Kafka连接器可以在Confluent Hub上使用。你可以在Confluent平台上使用它,或者用Docker在本地运行它。安装它是一个简单的过程--遵循GitHub文档的细节。

初始化安卓应用

从GitHub repo中抓取代码,用Android Studio运行该项目。

快速查看代码,在下面的片段中,我们初始化与Ably的实时连接。

private void initAbly() throws AblyException {
       rtConnection = new AblyRealtime("Your Key Here");
       Map<String, String> params = new HashMap<>();
       params.put("delta", "vcdiff");
       ChannelOptions options = new ChannelOptions;
       options.params = params;
       Channel channel = rtConnection.channels.get("outbound:odds:event1",options);
       channel.subscribe(new Channel.MessageListener() {

我们还订阅了odds频道,并启用了频道内消息delta压缩。三角洲压缩有助于大量减少最后一英里数据分配的带宽和延迟,每次有更新时,只向订阅者发送前一消息的变化,而不是整个消息。这种压缩对用户来说是完全透明的,Ably库可以处理任何缺失的数据,并保证最终用户总是得到一个完整的消息。

请注意,为了测试推送通知,你必须创建一个Firebase云信息账户,并对Ably和Firebase进行相应的设置--请阅读教程了解详情

查看解决方案的运行情况

当你打开安卓应用时,你应该看到下面的情况。

Building a dependable realtime betting app with Confluent Cloud and Ably

通过点击 "激活设备"和**"停用设备**"按钮,你可以订阅和退订通知(这些通知通过Ably管理的推送通知服务发送)。推送通知可能会被发送,以宣布一些事件,如胜利、失败或即将开始的新比赛。

由于推送通知是偶尔的批处理工作,它们不太适合在Confluent和Ably之间直接进行流式整合。所以我们使用一个Python微服务,通过REST查询ksqlDB,并通过Ably发送推送通知。你可以在这个演示的GitHub repo中找到这个Python微服务。

一旦你点击了投注视图按钮,你将被带到第二个屏幕,在那里你可以看到一个有变化的赔率的汽车列表,你可以进行投注。要下注,只需点击任何一辆车的瓷砖。

现在,如果你进入你先前创建的Ably应用程序的 Dev console标签,你应该看到下注的列表在实时更新。

Building a dependable realtime betting app with Confluent Cloud and Ably

每个事件都包含下注时间的信息,以及当时的赔率。这使得系统可以验证任何投注都是以可接受的赔率下的。我们在这里没有演示付款处理,但在一个完整的系统中,如果风险不是太高,这将允许你接受逾期投注。

所有的赌注都从Ably进入Confluent Cloud的Bets主题;这是通过我们前面提到的Kafka规则实现的。然后,赌注被ksqlDB消费。

Building a dependable realtime betting app with Confluent Cloud and Ably

如前所述,我们使用ksqlDB来创建一个下注的物化视图,并将更新的赔率推送到Confluent Cloud的Odds主题中。在Ably Kafka连接器的帮助下,赔率被发送到Ably,并通过Ably通道从Ably发送到Android应用程序。

我们的演示到此结束--我们希望你会发现它很有用!

超越演示

到目前为止,我们已经展示了使用Confluent Cloud和Ably来支持实时投注体验的可行性。但是,这个演示也应该成为构建可扩展的、可生产的系统的灵感来源。一个用Confluent Cloud和Ably构建的实时投注解决方案的现实高层架构可能是这样的。

Building a dependable realtime betting app with Confluent Cloud and Ably

通过汇和源连接器,Confluent Cloud可以很容易地将各种额外的组件添加到你的后端,如数据库。Confluent云使你能够毫不费力地扩展到你所需要的主题,每个主题都存储特定的事件数据(如固定装置列表),并使用模式注册来保护数据格式。

ksqlDB允许你创建物化视图,并不断转换、充实、连接和聚合事件。你可以让各种微服务(比如我们在演示中用于发送推送通知的Python服务)查询、消费并对ksqlDB数据进行操作。

Ably提供了25个以上的客户端SDK,针对每个主要的网络和移动平台。这意味着,几乎不管你在客户端使用什么技术,Ably都可以帮助在Confluent Cloud后端和终端用户之间进行数据流的中介。例如,除了安卓系统,你还可以使用Ably来流转数据给iOS用户和网页。

除了为体育爱好者下注的实时通信提供动力外,Confluent云和Ably还可以用来实现与博彩供应商有关的功能,如风险管理、欺诈检测和实时监控。

最后的想法

我们希望这篇博文能帮助您了解当您想为客户设计低延迟、可扩展和可靠的数字博彩体验时,结合Confluent Cloud和Ably的好处。Confluent和Ably的结合使您能够在后端Kafka管道中流式处理大量的数据,然后以容错的方式在几毫秒内将消息广播给网络边缘数量非常多且快速变化的客户端设备,而不会有任何更新以错误的顺序或不止一次被传递。

虽然我们在这篇博文中涉及的PoC与游戏和博彩有关,但你可以轻松地将Confluent Cloud和Ably结合起来,为各种用例和行业提供可扩展的实时数字体验,从实时资产跟踪和虚拟活动到医疗保健和教育科技。在任何需要处理时间敏感的数据,并且必须在(毫)秒内在数据中心和网络边缘的客户设备之间流动的情况下,Confluent Cloud和Ably都可以提供帮助。

Confluent Cloud和Ably是完全可管理的无服务器解决方案,抽象化了大量的基础设施和工程开销,以及建立和管理您自己的、能够为全球用户群服务的专有实时投注系统所需的相关财务成本。

开始使用Confluent Cloud和Ably很简单--两者都是几乎没有代码的解决方案,你可以在几分钟内启动并运行每个解决方案。此外,通过Ably Kafka连接器,Confluent和Ably的集成是一个无缝和快速的过程--试一试,自己就知道了您可能还想阅读更多关于Ably如何帮助您毫不费力地、可靠地将Kafka管道扩展到边缘的终端用户

进一步阅读