分布式应用程序

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

分布式的优势

  地域分散性

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

  满足扩充性

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

  均衡负载

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

  分布式数据库

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

  可靠性

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

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();
/**////注册通道
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="">
</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状态。

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

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

    1. 背景 以Docker和Rocket为代表的容器技术现在正变得越来越流行,它改变着公司和用户创建.发布.运行分布式应用的方式,在未来5年将给云计算行业带来它应有的价值.它的诱人之处在于: 1)资源 ...

  2. 灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?

    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟? 历史进入2019年,放眼望去,今天的整个技术大环境和生态都发生了很大的变化.在己亥猪年春节刚刚过去的早春时节,我们来梳理和展望一下整个 ...

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

    一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 . ...

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

    一.概述 知名类型的SingleCall对象可以在客户程序的方法调用之后被垃圾收集器清理掉,因为它没有保持状态,属于无状态的.而客户激活的类型的对象和知名类型的SingleTon对象都属于生存期长的对 ...

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

    一..NET Remoting简介: .NET Remoting从某种意义上讲是DCOM的替代品.ASP.NET Web服务十分有用,但是这项技术在企业内联网的解决方案中,对于某些业务请求来说并不快, ...

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

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科  ♂风车车.Net 激活方式概念 在 ...

  7. spring3.2.2 remoting HTTP invoker 实现方式

    最近跟朋友聊天,聊到他们现在项目的架构都是把数据层跟应用层分离开来,中间可以加memcached等的缓存系统,感觉挺好的,很大程度上的降低耦合,然后还明确分配了数据层跟应用层任务.也方便定位.找到问题 ...

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

    我们已经知道可以通过编码的方式配置服务器通道和远程客户机,除此之外,还可以使用配置文件对服务器通道和远程客户机进行配置.使用远程客户机和服务器对象的配置文件的优点在于,用户无需修改任何一行代码,也无需 ...

  9. 【转载】.NET Remoting学习笔记(二)激活方式

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科 ♂风车车.Net 激活方式概念 在访 ...

随机推荐

  1. HDU 4571 Travel in time ★(2013 ACM/ICPC长沙邀请赛)

    [题意]给定N个点,每个点有一个停留所需的时间Ci,和停留能够获得的满意度Si,有M条边,每条边代表着两个点走动所需的时间ti,现在问在规定的T时间内从指定的一点S到E能够获得的最大的满意度是多少?要 ...

  2. Js计算-当月每周有多少天

    查看Demo: 源代码如下: <script> //计算当月总天数 function getCountDays() { var curDate = new Date(); /* 获取当前月 ...

  3. Kettle定时执行(ETL工具)【转】

    1,Kettle跨平台使用.    例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下:    1)进入到Kettle部署的路径 ...

  4. 发送一个简单的HTTP GET请求并且取回响应。

    string uri="http//www.baidu.com"; WebClient wc = new WebClient(); Console.WriteLine(" ...

  5. .NET在WebForm里实现类似WinForm里面TrackBar控件的效果(AJAX Control Toolkit的使用)

    WinForm 里面有一个 TrackBar 控件,表示一个标准的 Windows 跟踪条,是类似于 ScrollBar 控件的可滚动控件.用这个控件可以实现很多可以实时调整的功能,比如最常见的音量调 ...

  6. HDU-4639 Hehe 简单DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4639 简单递推题,呵呵,不多说... //STATUS:C++_AC_15MS_272KB #incl ...

  7. iso定制封装

    http://xiaoli110.blog.51cto.com/1724/1617541

  8. HDU 2222 Keywords Search(AC自动机模板题)

    学习AC自动机请戳这里:大神blog........ 自动机的模板: #include <iostream> #include <algorithm> #include < ...

  9. 第2组UI组件:TextView及其子类

    1 TextView及其子类的继承关系 TextView直接继承自View,是EditView与Button两个类的父类,如下为TextView各子类继承关系. 2 个UI的样式图 CheckedTe ...

  10. Android AIDL 一探究竟

    AIDL ---(Android Interface Definition Language)Android接口定义语言 简述: 1.什么时候使用? 通信方式 使用场景 AIDL IPC .多个应用程 ...