`

分布式应用中客户端的设计

阅读更多

一个分布式的系统一般都会有很多的节点,节点和节点之间的通讯采用远程调用的方式,而当在实现业务逻辑的时候,我们可以通过客户端的实现方式实现,目前实现客户端的方式有两种方式,瘦客户端和富客户端。

 

第一种方式 瘦客户端:

 

所谓瘦客户端类似于之前EJB那种方式,瘦客户端本身不具有业务逻辑,瘦客户端通过业务接口调用服务端逻辑,这个时候逻辑运算还是跑那个被多个系统共用的服务器,这样当存在大量的请求的情况下,负责逻辑运算的服务器就会成为瓶颈,这个时候可以有两种方式来解决这种瓶颈问题:

 

第一水平伸缩负责逻辑运算的服务器,这个时候涉及到客户端请求的负载均衡,每次将远程调用采用负载均衡算法将其分配到逻辑端服务器,采用这种方式以后,可能就需要远程调用框架内部支持一些比如流量控制,负载均衡等的机制,这样使得调用方本身不需要关心服务器端的物理部署。

 

第二种方式 富客户端

富客户端是将运算逻辑以客户端包的形式提供给调用方来使用,这样可以分摊逻辑运算服务器的压力,将压力分担到调用方服务器。这种方式非常适合调用方服务器本身负责的逻辑很简单,运算量很小的情况下,采用富客户端以后可以合理利用调用方服务器的资源来分摊掉被调用方服务器的压力。另外一方面,富客户端也适用于当需要将一些非核心的业务从核心业务中剥离出来,然后让非核心的业务跑到调用方的服务器中,同时富客户端还可以做其它的一些事情,比如缓存调用结果,实现调用方的local cache等。

 

当然了采用富客户端也会带来一个明显的问题,那就是客户端的升级,假如逻辑有变化需要让调用方升级客户端包,当然这也有解决办法,就是将业务逻辑进行抽象,每一步都采用动态脚本的方式比如Groovy脚本去执行,每次客户端服务器启动的时候,中心服务器推送最新的Groovy脚本到web客户端服务器,这样客户端服务器就可以获取到最新的执行逻辑,当然这对客户端的设计要求严格,客户端可能要设计的具有插件式的灵活功能。

 

采用富客户端另外一个问题就是富客户端的状态和服务器端的如何进行同步,假如服务器端的一些数据变化了,而客户端需要感知这些变化怎么办?这也有解决办法,一种方式是拉模式,另外一种模式推模式。

 

拉模式就是每次服务端有变化的时候,给富客户端发条指令,然后富客户端会主动向服务器端来拉数据,这种方式对于客户端服务器量比较大的情况下比较方便,比如富客户端被前端数百台机器使用,这个时候可以显著减少服务端的工作量。

 

推模式就是当服务器端发生变化的时候,主动推送给每个客户端,这种情况适合客户端服务器数量不多的情况,当然无论是采用拉还是推模式都需客户端和服务端保持一定的联系,这可能需要客户端在启动的时候主动的向服务端去注册一下,客户端注册以后,中心服务器端可以监控客户端的一些运行状况等信息。

 

以上是在分布式应用中,多个应用之间如何通信的

 

 

 
1
2
分享到:
评论
1 楼 mercyblitz 2011-03-30  


我觉得Proxy还是比较重要地,否则怎么做路由呢,呵呵!

相关推荐

    分布式环境下C/S模式客户端软件自动在线升级的设计与实现

    在具体应用环境下克服了C/S模式部署困难,升级不方便,维护成本高几个不利的因素,将客户端描述文件中的程序最近一次更新日期或版本号与服务器端升级程序的最近一次更新日期或版本号进行比较,使系统自动感知新程序的...

    Delphi6分布式开发

    您会一步步学习构建各种分布式应用程序。相信,在仔细研读和亲手实践了这些程序之后,您一定会成为分布式开发的能 手。由于计算机技术的可操作性很强,所以,在本书的学习过程中,希望读者一定要亲手操作,边看书边...

    Ice 分布式程序设计

    第 3 章 Hello World 应用 第 4 章 Slice 语言 第 5 章 一个简单文件系统的 Slice 定义 第 6 章 客户端的 Slice-to-C++ 映射 第 7 章开发 C++ 文件系统客户 第 8 章 客户端的 Slice-to-Java 映射 第 9 章开发 Java ...

    ICE分布式程序设计中文版

    第 17 章 异步程序设计 443 17.1 本章综 443 17.2 引言 443 17.3 使用 AMI 446 17.4 使用 AMD 452 17.5 总结 459 第 18 章 Ice 协议 463 18.1 本章综 463 18.2 数据编码 463 18.3 协议消息 486 18.4 压缩 494 18.5 ...

    第九讲:分布式锁的原理及应用&秒杀设计实现.pdf

    * 排他性:在同一时间只会有一个客户端能获取到锁,其它客户端无法同时获取 * 避免死锁:这把锁在一段有限的时间之后,一定会被释放(正常释放或异常释放) * 高可用:获取或释放锁的机制必须高可用且性能佳 9 锁和...

    Fourinone分布式计算框架

    于是我将自己对分布式的理解融入到这个框架中,考虑到底层实现技术的相似性,我将Hadoop,Zookeeper,MQ,分布式缓存四大主要的分布式计算功能合为一个框架内,对复杂的分布式计算应用进行了大量简化和归纳。...

    一个分布式统计监控系统 包含PHP客户端 、服务端.zip

    软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、...

    RabbitMQ实战 高效部署分布式消息队列完整版带书签

    AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP...

    RabbitMQ实战 高效部署分布式消息队列

    AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP...

    Fourinone分布式并行计算四合一框架

    于是我将自己对分布式的理解融入到这个框架中,考虑到底层实现技术的相似性,我将Hadoop,Zookeeper,MQ,分布式缓存四大主要的分布式计算功能合为一个框架内,对复杂的分布式计算应用进行了大量简化和归纳。...

    Paxos到Zookeeper:分布式一致性原理与实践

    第三部分(第5~6章)介绍了ZooKeeper的使用方法,包括客户端API的使用以及对ZooKeeper服务的部署与运行,并结合真实的分布式应用场景,总结了ZooKeeper使用的最佳实践;第四部分(第7章)对ZooKeeper的架构设计和...

    分布式数据库设计方案.doc

    面对海量数据库在高并发的应用环境下,仅仅靠提升服务器的硬件配置是不能从根本上 解决问题的,分布式网格集群通过数据分区把数据拆分成更小的部分,分配到不同的服 务器中。查询可以由多个服务器上的CPU、I/O来...

    TCP\IP网络互联技术

    重点放在客户—服务器机制上,介绍了客户-服务器机制和应用程序用于网络通信的套接字接口,分析了分布式程序的客户端和服务器两部分的算法,讨论了客户端和服务器的设计及遵循的模式。本书在并发处理上也花费了相当...

    开源C++应用服务器:CWSS 0.8.0

    CWSS(C++ Web Service Server)是用于开发、集成、部署和管理大型分布式应用、网络应用和数据库应用的C/C++应用服务器。将C/C++的高效稳定和各种通讯标准(UDP/TCP/HTTP/SOAP等)引入大型网络应用的开发、集成、部署和...

    基于WCF的即时通讯软件的设计与实现

    自从在微软提出.NET战略以来,就针对建立企业级的分布式应用先后推出了一系列产品和技术,包括:ASP.NET Web服务、.NET Remoting、Message Queuing以及Enterprise Service等。这些技术为基于微软技术的软件研发人员...

    dubbo协议、netty框架总结

    Dubbo是一个开源的分布式服务框架,旨在帮助开发人员快速而简单地设计分布式应用程序。Dubbo基于服务端-客户端模型,实现了基于可扩展的协议和服务的动态伸缩以及安全性等特性。Dubbo协议以及Netty框架是Dubbo的两个...

    解析Java的多线程机制

    Unix操作系统环境下,应用程序可以利用fork... 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式应用系统中多客户端的并发访问以及提高服务器的响应效率奠定坚实基础。

    分布式键值缓存系统FirstDB.zip

    FirstDB是一款轻量级分布式键值缓存系统,开发进行中。 软件构成:  基础部分:  一套分布式缓存数据库  扩展应用实例:  @基于机器学习的数据分类系统。  @可应用在WEB页面加速。  @构建实时关键...

    分布式服务框架Zookeeper入门学习

    ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,是Google的Chubby一个开源的实现。提供功能:命名服务配置管理集群管理分布式锁队列管理特性:顺序一致性:从同一个客户端发起的事务请求,...

Global site tag (gtag.js) - Google Analytics