手机站:/m

百度云_win服务器系统_优惠券

时间:2020-11-02 20:42编辑:淘客樊里来源:淘客樊里当前位置:主页 > 云存储 >

阿帕奇·卡夫卡在Netflix工作室和财经世界

2019年,Netflix估计花费150亿美元制作世界级原创内容。在风险如此之高的情况下,至关重要的是要让我们的业务具备关键的洞察力,以帮助计划、确定开支并说明Netflix的所有内容。这些见解包括:明年我们应该在国际电影和连续剧上花多少钱?我们是否有超出生产预算的趋势?是否有人需要介入以保持进展?我们如何利用数据、直觉和分析提前几年编制目录,以帮助创建尽可能好的列表?我们如何为全球内容制作财务报告并向华尔街报告?与风投如何严格调整他们对良好投资的眼光类似,内容金融工程团队的宗旨是帮助Netflix投资、跟踪和学习我们的行动,以便我们在未来不断进行更好的投资。拥抱项目从工程的角度来看,每个金融应用程序都是作为一个微服务进行建模和实现的。Netflix支持分布式治理,并鼓励对应用程序采用微服务驱动的方法,这有助于在公司规模扩大时实现数据抽象和速度之间的适当平衡。在一个简单的世界中,服务可以很好地通过HTTP进行交互,但是随着我们的扩展,它们会演变成一个复杂的基于请求的同步交互图,这可能会导致大脑/状态分裂并中断可用性。在上面的相关实体图中,考虑一场演出的制作日期的变化。这会影响我们的编程计划,进而影响现金流项目、人才支付、年度预算等。通常在微服务架构中,一定比例的失败是可以接受的。然而,内容金融工程的任何一个微服务调用失败都将导致大量计算不同步,并可能导致数据丢失数百万美元。这也会导致可用性问题,因为调用图会超出范围,并在试图有效跟踪和回答业务问题时造成盲点,例如:为什么现金流预测偏离了我们的发布计划?为什么今年的预测没有考虑到正在积极发展的节目?我们什么时候才能期望我们的成本报告准确地反映上游的变化?将服务交互重新视为事件交换流,而不是同步请求序列,这样我们就可以构建本质上是异步的基础设施。它促进了分离,并作为分布式事务网络中的一级公民提供了可跟踪性。事件不仅仅是触发器和更新。它们成为一个不可变的流,我们可以从中重构整个系统状态。朝着发布/订阅模型的方向发展,每个服务都可以将其更改作为事件发布到消息总线中,然后可以被另一个需要调整其状态的服务使用。这样的模型允许我们跟踪服务是否与状态更改保持同步,如果不同步,还需要多长时间才能同步。当操作大量依赖服务时,这些见解非常强大。基于事件的通信和分散消费有助于我们克服通常在大型同步调用图中看到的问题(如上所述)。Netflix将Apache Kafka®作为其事件处理、消息传递和流处理需求的事实标准。卡夫卡是所有点对点和Netflix工作室范围内通信的桥梁。它为我们提供了Netflix操作系统所需的高耐用性和线性可扩展的多租户架构。我们的内部Kafka as a service产品提供容错、可观测性、多区域部署和自助服务。这使得我们整个微服务生态系统更容易产生和消费有意义的事件,并释放异步通信的力量。Netflix Studio生态系统中典型的消息交换如下所示:我们可以把它们分成三个主要的子部分。生产者生产者可以是任何想要发布其整个状态的系统,也可以是暗示某个特定实体的内部状态的关键部分已经改变的系统。除了有效负载外,事件还需要遵循规范化的格式,这样更容易跟踪和理解。此格式包括:UUID:通用唯一标识符类型:创建、读取、更新或删除(CRUD)类型之一Ts:事件的时间戳更改数据捕获(CDC)工具是另一类事件生成器,它们从数据库更改中派生事件。当您想使数据库更改对多个使用者可用时,这可能很有用。我们还使用此模式跨数据中心复制相同的数据(对于单个主数据库)。例如,我们在MySQL中有需要在Elasticsearch或apachesolr中编制索引的数据™. 使用CDC的好处是它不会对源应用程序施加额外的负载。对于CDC事件,事件格式中的TYPE字段可以方便地根据各个接收器的需要调整和转换事件。富饶者一旦数据存在于卡夫卡,各种消费模式就可以应用到它身上。事件的使用有很多种方式,包括作为系统计算的触发器,用于近实时通信的有效负载传输,以及丰富和具体化数据的内存视图的提示。当微服务需要一个数据集的完整视图,但部分数据来自另一个服务的数据集时,数据浓缩变得越来越普遍。联接数据集对于提高查询性能或提供聚合数据的近实时视图非常有用。为了丰富事件数据,消费者从Kafka读取数据,并调用其他服务(使用包括gRPC和GraphQL的方法)来构造连接的数据集,然后将这些数据集提供给其他Kafka主题。扩展可以作为一个单独的微服务运行,它本身负责扇出和具体化数据集。在某些情况下,我们希望执行更复杂的处理,如窗口化、会话化和状态管理。对于这种情况,建议在Kafka之上使用成熟的流处理引擎来构建业务逻辑。在Netflix,我们使用Apache Flink®和RocksDB进行流处理。我们也考虑将ksqlDB用于类似目的。事件顺序金融数据集中的一个关键要求是事件的严格排序。卡夫卡通过发送关键信息来帮助我们实现这一点。使用同一密钥发送的任何事件或消息都将具有保证的顺序,因为它们被发送到同一个分区。然而,制片方仍然会把活动的顺序搞得一团糟。例如,《陌生事物》的推出日期最初是从7月移到6月,后来又从6月推迟到7月。由于各种原因,这些事件可能以错误的顺序写出到Kafka(生产者试图到达Kafka时网络超时,生产者代码中的并发错误,等等)。一个订单的停顿可能会严重影响各种财务计算。为了避免这种情况,我们鼓励生产者只发送发生更改的实体的主ID,而不发送Kafka消息中的全部有效负载。扩展过程(在上一节中描述)使用实体的ID查询源服务以获得最新的状态/有效负载,从而提供了一种规避无序问题的优雅方法。我们称之为延迟物化,它保证了有序的数据集。消费者我们使用springboot来实现从Kafka主题读取的许多消费微服务。springboot提供了名为springkafka连接器的强大的内置Kafka消费者,它使消费无缝化,为消费和数据反序列化提供了简单的连接注释的方法。我们尚未讨论的数据的一个方面是合同。当我们扩展对事件流的使用时,我们最终得到了一组不同的数据集,其中一些数据集被大量应用程序使用。在这些情况下,在输出上定义模式是理想的,有助于确保向后兼容性。为此,我们利用合流的Schema Registry和apacheavro™ 为数据流的版本控制构建我们的模式化流。除了专门的微服务消费者外,我们还有CDC接收器,可以将数据索引到各种商店中,以便进一步分析。其中包括用于关键字搜索的Elasticsearch、Apache配置单元™ 用于审计,Kafka本身用于进一步的下游处理。通过使用ID字段作为主键和标识CRUD操作的类型,这些接收器的有效载荷直接来自Kafka消息。消息传递保证由于涉及的复杂性和过多的活动部件,在分布式系统中保证一次交货是非常重要的。消费者应该有幂等行为来解释任何潜在的基础设施和生产者的事故。尽管应用程序是幂等的,它们不应该对已经处理的消息重复计算量大的操作。确保这一点的一种常用方法是跟踪分布式缓存中服务使用的消息的UUID,该缓存具有合理的过期时间(根据服务级别协议(servicelevelagreements,SLA)定义)。只要在到期间隔内遇到相同的UUID,就会跳过处理。Flink中的处理通过使用其内部基于RocksDB的状态管理提供了这种保证,其关键是消息的UUID。如果您想纯粹使用Kafka来实现这一点,Kafka Streams也提供了一种方法。使用基于springboot的应用程序使用EVCache来实现这一点。监控基础架构服务级别对Netflix来说,实时查看其基础设施内的服务级别至关重要。Netflix编写了Atlas来管理多维时间序列数据,我们从中发布和可视化度量。我们使用生产者、加工者和消费者发布的各种指标来帮助我们构建一个接近实时的t

上一篇云服务器_网站建设营销推广_是什么

下一篇企业网站_有品味的她百度云_限时特惠

云市场知识本月排行

云市场知识精选