Apache Thrift在分布式程序中的应用

简介: Apache Thrift在分布式程序中的应用

在陈述之前,还是要先了解一下分布式的概念:

1. 分布式简介

   分布式应用程序是已细分为子系统的应用程序,这些子系统可以部署在单独的计算机上,但仍可以协作以实现应用程序的目的。 当子系统是自治的并且提供导出灵活的API时,它们通常称为服务。

   与大型单片系统相比,分布式应用程序有着更小,更集中的过程处理,这些过程更易于扩展,重用,维护和测试,尤其是在使用非常适合子系统范围的编程语言时。

1.1 可扩展性

   可扩展性描述了系统增加或扩展其工作负载的能力。可扩展系统有两种常见的扩展方式:垂直和水平。

   简单来说,垂直扩展涉及购买一台速度更快的计算机。垂直缩放对应用程序几乎没有负担,这是增加容量的传统方法。现代CPU的性能不再以以前的速度提高,从而变得昂贵,于是在许多情况下无法垂直扩展。

   水平扩展涉及将更多计算机添加到共同运行应用程序的系统池或系统群集中。水平扩展的应用程序利用多个CPU和/或多个系统来提高性能。要利用水平扩展的优势,必须将应用程序设计为可在多台计算机上分发,水平扩展的极端示例允许应用程序利用数千个CPU在非常短的时间内执行苛刻的任务。

   Apache Thrift是一种非常适合构建水平缩放的分布式应用程序的工具。

1.2 分布式应用的通信方式

     分布式应用程序通常使用三种关键类型的进程间通信:

  • 流传输。从服务器到一个或多个客户端使用连续字节流的方式通信。
  • 示例:互联网广播,其中客户端随时间接收由服务器发出的以连续的小数据包序列传输的字节。
  • 消息传递。消息传递涉及一种异步通信(通常为队列通信的形式),从而产生松散耦合的系统。
  • 示例:向您发送一封电子邮件,您可能会收到回复,也可能没有收到回复,在收到回复之前,您不知道何时会收到回复。
  • RPC 。远程过程调用系统允许在不同计算机上的进程之间进行函数调用。
  • 示例:手机应用程序在Internet上调用服务,该服务返回天气预报。

   这三种通信范例可用于处理几乎所有进程间通信任务。 接下来让我们看一下Apache Thrift如何适合每个通信模型。


2. 流传输的方式

    流系统处理连续的字节流。流服务器可以将流传输到一个或多个客户端。 一些流具有时间要求,例如流电影,其要求帧至少与观看时一样快地到达。 一些流更面向批处理,例如后台文件传输。流系统通常被设计用于通信,其中数据传输沿一个方向流动并且具有大的或不确定的大小。

96447814-120fc980-1245-11eb-938d-6ea408716c72.png

   流系统本质上通常开销很低。他们往往是大带宽消费者,因此在易用性上追求效率。在许多情况下,使用多播来允许服务器将单个消息发送到多个客户端。流系统也可以使用数据压缩机制来减少网络影响。

     Apache Thrift通常不在流数据服务中起作用。 主要用于订阅流并执行其他设置和配置任务的控制,以及通过序列化支持跨语言的流解决方案。


3. 消息传递

   消息传递是一种纯异步通信模型,允许队列的通信独立于生产者或消费者的速度进行。全方位服务消息传递系统通过诸如存储和转发,事务,多播和发布/订阅之类的功能,支持通过不可靠链接进行的可靠通信。WebsphereMQ,ActiveMQ,RabbitMQ和JMS等系统属于此类。

   轻量级消息传递系统更适合于以最小的延迟将高数据速率的消息传递作为设计的必要条件。诸如MIT的LCM和ZeroMQ之类的系统以及诸如TIBCO Rendezvous之类的商业系统都实现了轻量级框架,以性能为首要设计目标来支持许多标准消息传递功能。这样的高速消息传递系统在流系统的性能和较重的消息传递系统的功能之间取得平衡。

   Apache Thrift不是消息队列平台,但可以满足与跨语言序列化相关的消息传递。例如,使用RabbitMQ在C ++和Java应用程序之间发送消息感兴趣,可能需要通用的序列化格式。如下图所示:

20210527153548522.png

   因此,可以在消息传递系统之上实现RPC系统。例如,Apache Thrift提供了一种实验性传输,该传输在ZeroMQ之上分层,从而允许Apache Thrift RPC在ZeroMQ消息传递平台上运行。


4. RPC

   下面是一个统一的调用样式:

d485e3947a7d406cab87b32fbd04b5b7.png

   与消息传递系统不同,RPC交换中的客户端和服务器必须同时启动并运行。

客户端在许多RPC环境中等待服务器的响应,就像客户端正在调用本地函数一样。与消息传递系统相比,这将客户端与服务器的耦合更为紧密。但是,Apache Thrift之类的SOA平台提供了多种方式灵活的处理客户端和服务器的关系。

   某些Apache Thrift语言支持异步客户端接口。这样,客户端可以呼叫服务器,然后再处理其他事务,稍后再回来查看是否可用。这类似于客户端和服务器通过消息传递平台。

   Apache Thrift还支持一种方式的消息。客户端使用适当的参数调用单向函数,然后开始其业务。服务器收到该消息,但不回复。这类似于在没有队列的情况下在消息传递环境中发送单向消息的方式。适用于可靠性要求不高的场景。

   选择正确的通信平台通常需要结合RPC,消息传递和流式解决方案。Thrift非常适合此类混合环境,可以比较方便的适应各种语言和通信平台。

   

   今天就到这里,欢迎关注交流~

相关文章
|
1月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
79 5
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
82 3
|
3月前
|
安全 网络协议 应用服务中间件
AJP Connector:深入解析及在Apache HTTP Server中的应用
【9月更文挑战第6天】在Java Web应用开发中,Tomcat作为广泛使用的Servlet容器,经常与Apache HTTP Server结合使用,以提供高效、稳定的Web服务。而AJP Connector(Apache JServ Protocol Connector)作为连接Tomcat和Apache HTTP Server的重要桥梁,扮演着至关重要的角色
89 2
|
29天前
|
消息中间件 监控 数据可视化
Apache Airflow 开源最顶级的分布式工作流平台
Apache Airflow 是一个用于创作、调度和监控工作流的平台,通过将工作流定义为代码,实现更好的可维护性和协作性。Airflow 使用有向无环图(DAG)定义任务,支持动态生成、扩展和优雅的管道设计。其丰富的命令行工具和用户界面使得任务管理和监控更加便捷。适用于静态和缓慢变化的工作流,常用于数据处理。
Apache Airflow 开源最顶级的分布式工作流平台
|
1月前
|
Java Apache C++
别再手写RPC了,Apache Thrift帮你自动生成RPC客户端及服务端代码
Thrift 是一个轻量级、跨语言的远程服务调用框架,由 Facebook 开发并贡献给 Apache。它通过 IDL 生成多种语言的 RPC 服务端和客户端代码,支持 C++、Java、Python 等。Thrift 的主要特点包括开发速度快、接口维护简单、学习成本低和多语言支持。广泛应用于 Cassandra、Hadoop 等开源项目及 Facebook、百度等公司。
别再手写RPC了,Apache Thrift帮你自动生成RPC客户端及服务端代码
|
2月前
|
存储 分布式计算 druid
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
66 1
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
|
2月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
3月前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决了 Session 共享问题。其特性包括:API 及实现用于管理用户会话、以应用容器中性方式替换 HttpSession、简化集群会话支持、管理单个浏览器实例中的多个用户会话以及通过 headers 提供会话 ID 以使用 RESTful API。Spring Session 通过 SessionRepositoryFilter 实现,拦截请求并转换 request 和 response 对象,从而实现 Session 的创建与管理。
分布式session-SpringSession的应用
|
3月前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决 Session 共享问题。其主要特性包括:提供 API 和实现来管理用户会话,以中立方式替换应用程序容器中的 HttpSession,简化集群会话支持,并在单个浏览器实例中管理多个用户会话。此外,Spring Session 允许通过 headers 提供会话 ID 以使用 RESTful API。结合 Spring Boot 使用时,可通过配置 Redis 依赖和支持缓存的依赖实现 Session 共享。
分布式session-SpringSession的应用
|
2月前
|
缓存 网络协议 API
分布式系统应用之服务发现!
分布式系统应用之服务发现!

推荐镜像

更多