分布式应用处理方式 - Remoting

分布式应用程序

  所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

分布式的优势

  地域分散性

    比如银行系统,总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这就需要分布式的系统。

  满足扩充性

    如果一个组织机构需要增加新的相对自主的组织单位来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。

  均衡负载

    数据的分解采用使局部应用达到最大,这使得各处理机之间的相互干扰降到最低。负载在各处理机之间分担,可以避免临界瓶颈。

  分布式数据库

    而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。

  可靠性

    相等规模的分布式数据库系统在出现故障的几率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此就整个系统来讲它的可靠性是比较高的。

Remoting

  一种分布式处理方式 ,从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下。

  Microsoft .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。

  有三种通信方式:HTTP、TCP、IPC

  HTTP跨越防火墙;

  TCP通常在局域网,速度快;

  IPC用于同一台机器进程间。

开发Remoting(一)

 1、创建远程对象:

 public class HelloServer : MarshalByRefObject
    {
        public HelloServer()
        {
            ///输出信息,服务器激活
            Console.WriteLine("服务器激活……");
        }

        public String HelloMethod(String name)
        {
            return "这里是:" + name;
        }
    }

  2.  创建宿主应用程序:

  /**////创建Tcp通道
           TcpChannel chan1 = new TcpChannel(8085);
            /**////注册通道
           ChannelServices.RegisterChannel(chan1, false);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(HelloServer), "HelloServer", WellKnownObjectMode.Singleton);

  3. 建立客户端程序:

 ///使用TCP通道得到远程对象
            TcpChannel chan1 = new TcpChannel();
            ChannelServices.RegisterChannel(chan1,false);
            HelloServer obj1 = (HelloServer)Activator.GetObject(typeof(ConsoleServer.HelloServer), "tcp://localhost:8085/HelloServer");

            if (obj1 == null)
            {
                System.Console.WriteLine(
                    "连接TCP服务器失败");
            }
            MessageBox.Show(obj1.HelloMethod("Hello"));

开发Remoting(二)

  1、抽成配置文件-服务端

<configuration>
  <system.runtime.remoting>
    <application>
      <service>
        <wellknown mode="SingleCall" type="ConsoleServer.HelloServer, ConsoleServer" objectUri="HelloServer" />
      </service>
      <channels>
        <channel ref="tcp" port="9000">
        </channel>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>
//服务端代码:RemotingConfiguration.Configure("ConsoleServer.exe.config", false);

  2、抽成配置文件-客户端

<system.runtime.remoting>
    <application>
      <client>
        <wellknown type="ConsoleServer.HelloServer,ConsoleServer" url="tcp://192.168.0.3:9000/HelloServer" />
      </client>
    </application>
  </system.runtime.remoting>
//客户端代码:
System.Runtime.Remoting.RemotingConfiguration.Configure("RemotingClient.exe.config",false);

开发Remoting(三)

  抽成接口

public interface IServerInterface
    {
       String HelloMethod(String name);
    }

  服务端:

 public class HelloServer : MarshalByRefObject, IServerInterface
    {
        public HelloServer()
        {
            ///输出信息,服务器激活
            Console.WriteLine("服务器激活……");
        }

        public String HelloMethod(String name)
        {
            Console.WriteLine(
                "服务器端 : {0}", name);
            return "这里是:" + name;
        }
    }
//服务端执行代码:
 RemotingConfiguration.Configure("ConsoleServer.exe.config", false);

  客户端:

//客户端配置文件
<configuration>
  <appSettings>
    <add key="tcp" value="tcp://localhost:9000/HelloServer"/>
  </appSettings>
</configuration>
 IServerInterface sev = (IServerInterface)Activator.GetObject(typeof(IServerInterface), ConfigurationManager.AppSettings["tcp"].ToString());
            MessageBox.Show(sev.HelloMethod("hello"));

一些概念

  服务器端激活:又叫做WellKnow方式,很多又翻译为知名对象。为什么称为知名对象激活模式呢?是因为服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上来发布这个类型。然后该服务器进程会为此类型配置一个WellKnown对象,并根据指定的端口或地址来发布对象.

  

  服务器端激活又分为SingleTon模式和SingleCall模式两种:SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon实例将在方法调用中一直维持其状态。我们可以认为它是一种Application状态。SingleCall模式:SingleCall是一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由GC自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是1。我们认为它是一种Session状态。

时间: 2024-10-11 01:38:37

分布式应用处理方式 - Remoting的相关文章

【技术解析】如何用Docker实现SequoiaDB集群的快速部署

1. 背景 以Docker和Rocket为代表的容器技术现在正变得越来越流行,它改变着公司和用户创建.发布.运行分布式应用的方式,在未来5年将给云计算行业带来它应有的价值.它的诱人之处在于: 1)资源独立.隔离 资源隔离是云计算平台的最基本需求.Docker通过Linux namespace, cgroup限制了硬件资源与软件运行环境,与宿主机上的其他应用实现了隔离,做到了互不影响.不同应用或服务以"集装箱"(container)为单位装"船"或卸"船&q

大型云原生项目在数字化企业落地过程解密

当前,随着互联网的高速发展,各企业的业务量出现几何级增长趋势.越来越多企业发现,使用传统模式部署及运营的产品越来越难以适应新模式下的要求,运维工作越发难以推进.如何搭建一套能够满足子系统高效调度,系统资源充分利用,同时具有动态调整资源,具备高系统扩展性的应用调度系统,成为摆在各企业面前的一道难题.用友云开发者中心是一个应用全生命周期管理的平台,它的底层基于容器技术,结合DevOps等理念,为用户提供了资源管理.持续集成.应用管理等应用基础服务,同时提供了完备的应用调度服务.现在,开发者中心正用着

跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用

一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 .NET Remoting简介 .NET REmoting与MSMQ不同,它不支持离线可得,另外只适合.NET平台的程序进行通信.它提供了一种允许对象通过应用程序域与另一个对象进行交互的框架..NET 应用程序都在一个主应用程序域中执行的,在一个应用程序域中的代码不能访问另一个应用程序域的数据,然而在

使用.NET Remoting开发分布式应用——基于租约的生存期

一.概述 知名类型的SingleCall对象可以在客户程序的方法调用之后被垃圾收集器清理掉,因为它没有保持状态,属于无状态的.而客户激活的类型的对象和知名类型的SingleTon对象都属于生存期长的对象,如果在客户程序停止使用远程对象之前,远程对象被禁用了,则客户程序会得到一个RemotingException异常.因为该对象已经和下一个方法调用(从客户程序进行的方法调用)断开了连接,只要客户程序需要该对象,它就必须被激活. 微软的DCOM技术使用了Ping机制,在这种机制下,客户程序有规律的对

初识用.NET Remoting来开发分布式应用

一..NET Remoting简介: .NET Remoting从某种意义上讲是DCOM的替代品.ASP.NET Web服务十分有用,但是这项技术在企业内联网的解决方案中,对于某些业务请求来说并不快,也没有足够的灵活性,而且,ASP.NET Web服务需要有运行时的支持.使用.NET Remoting技术后,可以将Web服务提供给世界上的任何地方.而且可以在所有的应用程序类型中运行Web服务. 二..NET Remoting 的基本原理: 体系结构图如下: 三.几个重要的概念: 1.远程对象:

.NET Remoting学习笔记(二)激活方式

目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 参考:百度百科  ♂风车车.Net 激活方式概念 在访问远程类型的一个对象实例之前,必须通过一个名为Activation的进程创建它并进行初始化.这种客户端通过通道来创建远程对象,称为对象的激活. 激活分为两大类:服务器端激活  客户端激活 服务器端激活 又称WellKnow(知名对象) 服务器应用程序在激活对象实例之前会在一个众所周知的统一资源标识符(URI)上来发布这个类型.然后该服务器进程

.net Remoting(3)——激活,激活方式

在生成远程对象时,创建和初始化新对象就是激活.远程处理系统须始终了解所需的激活类型才能将对象设置为可供客户端使用.激活有两种方式:服务器激活和客户端激活 服务器激活 服务器激活的对象是生存期直接受服务器直接控制的对象.仅当客户端对对象进行方法调用时,服务器应用程序域才会创建这些对象,而不是当客户端调用new或Activator.GetObject的时候.客户端请求服务器激活类型的实例时,会在客户端应用程序域中创建一个代理.服务器激活类型只允许使用默认构造器.如果想使用特定的采用参数的构造器创建实

使用.NET Remoting开发分布式应用——配置文件篇

我们已经知道可以通过编码的方式配置服务器通道和远程客户机,除此之外,还可以使用配置文件对服务器通道和远程客户机进行配置.使用远程客户机和服务器对象的配置文件的优点在于,用户无需修改任何一行代码,也无需进行重新编译,便可以配置通道和远程对象. .NET提供了Remoting配置文件的标准,基于XML格式. 一.配置文件 1.服务器配置文件: 先来看一个服务器配置文件的实例,然后我再具体解释一下其中的内容: <?xml version="1.0" encoding="utf

. Net Remoting体系结构(2) 远程对象 编程方式

1 创建服务器通道 并在.Net Remotion运行时注册改通道 注册一个知名对象 1 TcpServerChannel channel = new TcpServerChannel(9000); 2 3 ChannelServices.RegisterChannel(channel, false); 4 5 WellKnownServiceTypeEntry remObj = new WellKnownServiceTypeEntry( 6 typeof(MyRemoteObject), "