分享:我用C#开发了一个分布式可开发的开放式云平台,能把几万台电脑做成一个集群

来源:互联网 发布:巨人网络 手游 编辑:程序博客网 时间:2024/05/08 14:40
百万商业圈分布式云平台功能及使用说明

平台功能概述:

简单的说就是将N台电脑,有序分层(逻辑层次划分)组织起来,形成一个有机体(计算集群),去完成一台电脑很难完成的任务。

说的更通俗一点这个云平台就是将数十万台电脑变成一台电脑那样来使用

概括的说百万商业圈云平台就是提供了:

1、远程文件分发服务
2、远程文件分发服务开发接口
3、创建远程非透明代理服务
4、提供创建远程对象开发接口
5、Web服(用Microsoft Web Application Stress Tool 进行压力测试,每分钟有效并发超过10万)
6、定时获取节点、集群性能指数服务
7、提供获取节点、集群性能指数服务开发调用接口
8、提供创建远程最优节点对象的开发接口,提供创建远程指定IP节点机的对象的开发接口
9、提供并行创建远程以某IP为根IP的某组集群的对象的开发接口

名词解释:

  远程非透明代理服务服务提供:创建最优代理,创建某节点群的代理群,注册代理服务等
  非透明代理服务:创建并提供一个远程对象,让你可以通过代理对象创建并调用远程节点机真实对象的任何属性方法
  如:
  (1)创建以192.168.2.201 为起始的节点群中的最优代理对象
  testdemo.Class1 c1 = (testdemo.Class1)rf.CreateTheBestRemoteObject(typeof(testdemo.Class1),"192.168.2.201"); 
  (2)创建指定IP 为192.168.2.201 节点机的代理对象
  testdemo.Class1 c1 = (testdemo.Class1)rf.CreateSpecifyIpRemoteObject(typeof(testdemo.Class1),"192.168.2.201");
  Console.WriteLine(s4.sum(1,2));//看看输出结果你就知道效果了
  (3)创建以192.168.2.115 为起始的节点群中的代理对象群
  object[] objs = rf.CreateAllRemoteObjects(typeof(testdemo.Class1),"192.168.2.115");


图表1集群中小型应用架构模型



图表2大规模实际应用架构模型



图表3集群实际测试架构模型


平台功能概述:
  简单的说就是将N台电脑,有序分层(逻辑层次划分)组织起来,形成一个有机体(计算集群),去完成一台电脑很难完成的任务。
  说的更通俗一点这个云平台就是将数十万台电脑变成一台电脑那样来使用!

平台组成部分:
  1、
.NETFrameWork3.5
  2、平台云集群服务器系统
  3、平台云集群应用开发包
  4、平台云集群应用开发范例源代码

 
平台组成部分功能详述:

  1、.NETFrameWork3.5

  安装在哪里?答:安装在集群节点机上,每台机器都要装
  如何安装呢?答:下载Framework3.5Setup.rar 解压后运行:dotNetFx35setup.exe 按提示下一步下一步即可
  还有其他配置或设置吗?答:没有。

  备注:没有Framework3.5Setup.rar 也可以直接安装VS2008(Microsoft Visual Studio 2008)。


  2、平台云集群服务器系统
  安装在哪里?答:安装在集群节点机上,每台机器都要装
  如何安装呢?答:下载DistributedPlatForm.rar解压后运行:install.bat 提示安装完成,回车即可。
  还有其他配置或设置吗?答:有,需要对配置文件进行设置。
  先安装还是先配置?答:配置好之后再安装集群服务。
  集群服务器系统配置文件(Bwsyq.Distributed.Cluster.exe.config)的使用及说明:
  <!-- 分布式集群配置AliasName:节点或子节点名称RootNodeIp:本节点IP UpperNodeIp:上层节点IP HeartRate:心跳频率(秒) WebServerPort:Web服务端口号-->
  <WebSystem.Framework.Distributed AliasName="1"RootNodeIp="192.168.2.201" UpperNodeIp="192.168.2.201"HeartRate="1" WebServerPort="8080">
  <!-- 子节点信息 可配置多个节点(理论上无限制),考虑到并行处理建议每个节点配置10个子节点,四层配置可达10000台机器-->
  <NodeInfo AliasName="02" IP="192.168.2.209"WebServerPort="8080"/>
  <!—没有下层节点需要写 “<NodeInfo …> ”这一行吗?答:不需要写-->
  <!—有多个下层节点需要怎么写 “<NodeInfo …> ”这一行呢?答:一个节点一行-->
  </WebSystem.Framework.Distributed>
  名词解释:
  AliasName
节点或子节点名称 命名规则要求:无 命名原则:上层节点名+XX(00~99) 如:根结点用1第二层节点用1XX 比如:101第三层10101以此类推
  AliasName最好不要重复,重复了也不影响
  RootNodeIp须是根节点的地址(不能使用127.0.0.1)。
  UpperNodeIp是你的上层节点的地址(不能使用127.0.0.1)。
  HeartRate 心跳频率,建议设置为1,单位:秒(越小表示频率越高,负载均衡算法越准确) 会影响机器性能吗?答:微乎其微。
  WebServerPort:Web服务端口号对外的可以采用80如果只是集群内部使用就无所谓了,取值范围(1~65535)

  备注:集群配置的时候在填写IP地址时要注意尽量避免使用127.0.0.1,请使用该节点的真实IP地址,否则会带来不可预知的错误。


  3、平台云集群应用开发包
  用什么工具进行开发?答:Microsoft Visual Studio 2008/ MicrosoftVisual Studio 2010
  安装在哪里?答:开发人员的电脑上
  需要安装到集群节点机上吗?答:不需要。
  如何使用呢?答:下载DistributedPlatFormSDK.rar 解压即可,无需安装,在开发的时候进行全部引用即可。
  有SDK接口函数说明吗?答:有。
  用来开发什么程序?答:三种程序,

  注:无论开发哪种程序,请先引用SDK中的所有DLL类库


  第一种、开发集群应用业务逻辑程序,也叫商业逻辑(BussinessObject),简称BO,编译成dll类库形式,如:
  public class Class1 : WebSystem.Framework.Bo.BaseBo
  {
  public string sum(int a,int b)
  {
  //这里输出结果的时候做个小实验,在结果中增加一个IP地址,看看真正运行的到底是哪个节点机
  return (a + b).ToString()+ " 实际运行的节点是:"+ Api.LocalIps()[0].ToString();
  }
  }
  假设编译成:testdemo.dll

  有特殊要求吗?答:有,所有需要在客户端被调用的类都必须继承WebSystem.Framework.Bo.BaseBo 这个类,不继承发布到集群后,在其它客户端程序将无法调用。


  第二种、用来开发对集群进行管理的程序
  (1)、将开发好的BO类库分发到集群中去,只需要2行代码:
  RemoteFactory rf = newRemoteFactory();
  //192.168.2.201是假设的根节点IP,应根据实际情况修改
  rf.DistributionFile(@"d:\testdemo.dll", "192.168.2.201"); 
  这样就能将testdemo.dll发布到集群中所有电脑上吗?答:是的,就这么简单。

  (2)、查看集群中所有电脑的性能指标及运行状况,只需要8行代码
  //192.168.2.201是假设的根/子节点IP,应根据实际情况修改  
  NodesPerFormanceList npfs = rf.GetPerFormanceList("192.168.2.201");
  Console.Write("节点群中共有节点:"+ npfs.Count);
  foreach (NodesPerFormance npf in npfs)
  {
  if (npf.Index == 0)
  Console.Write("节点机"+ npf.Ip + "有故障!");
  }
  npfs.Sort();
  Console.Write("节点群中性能最优节点机IP是:"+ npfs[0].Ip);
  这样就能得到节点群的运行情况吗?答:是的,就这么简单。

  备注:GetPerFormanceList填写的如果是根节点IP将获取整个集群的运行情况,如果是某个子节点IP获取的将只是节点群的运行情况


  第三种、用来开发基于集群的分布式应用,这里又分成三种情况:
  (1)、开发那种百万军中取上将首级的程序,什么意思呢?就是让集群中性能最优的机来执行某个函数,并得到返回结果
  这里我们假设:上面开发的业务逻辑程序testdemo.dll 已经分发到了集中,
  首先我们要引用testdemo.dll别奇怪,客户端也需要一份
  testdemo.Class1 s4 = (testdemo.Class1)rf.CreateTheBestRemoteObject(typeof(testdemo.Class1),"192.168.2.201");
  Console.WriteLine(s4.sum(1,2));//看看输出结果你就知道效果了
  备注:CreateTheBestRemoteObject填写的如果是根节点IP将获取整个集群的最优节点,如果是某个子节点IP获取的将只是节点群的最优节点

  (2)、开发那种定点式的程序,什么意思呢:就是让集群中某个指定的节点机来执行某个函数,并得到返回结果
  这里我们假设:上面开发的业务逻辑程序testdemo.dll 已经分发到了集中,
  首先我们要引用testdemo.dll别奇怪,客户端也需要一份
  testdemo.Class1 s4 = (testdemo.Class1)rf.CreateSpecifyIpRemoteObject(typeof(testdemo.Class1),"192.168.2.201");
  Console.WriteLine(s4.sum(1,2));//看看输出结果你就知道效果了
  (3)、开发那种狼群战术- 并行的程序,什么意思呢:就是让集群/节点群中的所有机器来执行某个函数,并得到返回结果
  这里我们假设:上面开发的业务逻辑程序testdemo.dll 已经分发到了集中,
  首先我们要引用testdemo.dll别奇怪,客户端也需要一份
  object[] objs = rf.CreateAllRemoteObjects(typeof(testdemo.Class1),"192.168.2.115");
  for (int i = 0; i < objs.Length; i++)
  {
  Console.WriteLine(((testdemo.Class1)objs[i]).GetName()); //看看输出结果你就知道效果了
  }
  备注:CreateAllRemoteObjects填写的如果是根节点IP将获取整个集群的所有节点对象,如果是某个子节点IP获取的将只是节点群的节点对象

 
  4、平台云集群应用开发范例源代码
  平台云集群应用开发范例源代码

平台系统环境要求:XP/Vista/Win7/Win2003/Win2008


FAQ&名词解释:
集群:集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故障恢复能力。集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都是运行其自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程序、系统资源和数据。除了作为单一系统提供服务,集群系统还具有恢复服务器级故障的能力。集群系统还可通过在集群中继续增加服务器的方式,从内部增加服务器的处理能力,并通过系统级的冗余提供固有的可靠性和可用性。
根节点:集群的最上级。
子节点:集群中除根节点机之外的所有机器都是一个子节点。
节点群:以某个子节点为起始的,包含它下面所有节点的集合称为一个子集群,下面没有节点那这个节点群就是他本身。
某节点群:集群下的某一个节点群。
非透明代理服务创建并提供一个远程对象,让你可以通过代理对象创建并调用远程节点机真实对象的任何属性方法

这个云平台稳定吗?
  答:非常稳定,实际测试用13台PC,连续运行了一周,没有出现任何故障。
新增加的节点,如何获得之前集群中分发的业务逻辑程序?
  答:很简单。1、新节点一旦开启服务,会自动从上层节点获取。2、你也可以手工复制一下。
这个云平台优日志记录吗?
  答:有非常详细的日志记录,在配置文件Bwsyq.Distributed.Cluster.exe.config中,
只要将<level value="OFF" /> 改成<level value="ALL" />即可

这个云平台完全免费吗?
  答:是的。
这个云平台是谁开发的?
  答:是我,我叫黄智,典型的中国人,英俊、潇洒、爽快、正直、勤劳、善良,我的QQ是99923309。
开发这个云平台的目的是什么?
  答:打破大公司的技术垄断,降低技术壁垒,振兴中华,让普通人也能很快进行大规模的应用。
这个云平台能有哪些具体的应用?
  答:科学计算、大规模检索、高性能计算、海量数据存储、破译外星信号、高性能数据信息采集 等
这个云平台是有第三方技术吗?
  答:没有,是本人完全凭空想象出来的,没有参考过任何第三方的代码。
利用这个云平台能做成google那样的大规模网站吗?
  答:很轻松就能实现。
发现平台错误或有好的建议怎么办?
  答:发邮件告诉我bwsyq@bwsyq.com


下载地址:
  1、
.NETFrameWork3.5
  2、平台云集群服务器系统
  3、平台云集群应用开发包
  4、平台云集群应用开发范例源代码

其他相关:
开源:完全自主研发搜索引擎1.0源代码及说明,单机400万网页,任意50词以内的检索不超过 20毫秒
开源:基于百万商业圈.NET开发框架开发的并行带分词的采集器
百万商业圈 .NET 开发框架2.0及开发框架API说明书(BWFW)(含并行计算及中英文分词功能)
分享一点代码(小型C web开发框架),用C语言实现的一个WEB 文件上传(含全部源代码)一
天心天字辈ERP全部PDK源代码到了我手上的后果 - 超越天心之WEB天云
大家看看我的BS的甘特图排程做的如何? 无刷新Ajax甘特图 展示生产排程结果 演示
软件工程概述 - 企业架构 - IT企业做大做强之根本 - 之我见
实践检验得出的真理:asp.net 项目在 linux mono上编译需要修改的只有 3个地方
给大家漏一手本人亲自精心撰写的通用ajax框架,完全兼容 IE FireFox各个版本!(附完整源码及完整范例)
开发了一个中文分词服务器(C语言开发+词库+源代码),最大特色可以让javascript来调用!
用纯C语言写了一个HtmlParse(网页分析器)外带采集功能,大小只有200K(免费+开源+操作示意图)


版权所有:百万商业圈 未经许可不得转载 作者:QQ 99923309
原创粉丝点击