对分布式系统中的进程标识”一文的疑问

刚才看到陈硕先生的一篇blog:“分布式系统中的进程标识”,地址:http://www.cnblogs.com/Solstice/archive/2011/03/29/1998412.html

我不同意该文的观点,因此在这里抛砖引玉,提出一个构建一个分布式系统的简单方案。

文中说:“正确做法:以四元组 ip:port:start_time:pid 作为分布式系统中进程的 gpid,其中 start_time 是 64-bit 整数,表示进程的启动时刻。”

第一个问题:没有port的进程怎么命名?

文中这样回答:“根据陈硕在《分布式系统的工程化开发方法》一文中的观点“在程序里内置 http 服务器”,分布式系统中的每个进程都应该提供一个管理接口,对外提供一个维修探查通道,可以查看进程的全部状态。这个管理接口就是一个 TCP server,它会侦听某个 port。”

1,cat,uuid,utime这些程序都要提供一个内嵌的http服务器?有必要吗?第三方程序你怎么该?

2, 我至今没有见过一个操作系统自动给所有进程提供http服务的。如果真的应该在每一个程序里内置http服务,那么肯定有操作系统会提供这种服务。

3, 如果程序提供http服务,那么程序的安全就会有疑问。http通讯很容易被拦截。http服务如果开着,那么攻击方可以不停测试用户名、密码,从而攻进操作系统。成为安全隐患。

第二个问题:time作为唯一的区分是否可靠?

如果操作系统的时间发生调整,那么有可能time会回到从前,从而可能导致多个进程有一个进程号。可能性虽小,但不能排除。

构建一个分布式系统的简单方案

给进程唯一命名

陈硕的“分布式系统中的进程标识”一文讲的就是怎样给进程唯一命名的问题。 前一节中,我已经证明了该文提出的方法是不正确的。 现在讲一下我怎么解决这个问题。

很简单,执行uuid命令,就会返回一个全球唯一的字符串。这已经在理论上证明是不可能重复的。Uuid已经在数据库,.NET等众多应用程序中广发使用。

我们可以这样建立一个结构体,来标示一个进程:

struct Process{

char[32] uuid,
int ip,//(其实计算机也应该定义一个struct,使用uuid唯一标示。这里为了说明简单,一切从简了)

int pid,//进程号

char * program,

int valid //进程是否还存在

};

然后建立一个hashtable:(char * programName, struct Process* processes)

这样的key,value结构。

这样就可以找到一个程序的所有进程,一个程序的所有有效 还可以定义多个类似的List和Hashtable,方便管理和查询。

使用ssh实现远程调用

使用ssh可以实现远程调用任意远程计算机上的程序和资源。ssh就是一个安全的shell程序,通过ssl安全协议访问远程计算机。

因此,使用ssh就可以构建一个简单、安全、有效的分布式计算系统!

使用SSH的优点还有:

1,不再需要程序提供远程访问的途径。如陈硕的方案就是需要每一个程序都内嵌一个http服务器。ssh不需要。而且它可以访问远程计算机上的所有程序。

2,提供了安全访问的机制。Ssh建立在ssl上非常安全。

3,提供了授权的机制。ssh使用操作系统的用户登录。这样就可以使用操作系统本身的用户授权实现任意的授权。ssh用户可以有自己的home文件夹,可以设置用户使用的内存数,硬盘数,可以创建的进程数量等等。不允许访问其他文件,不允许运行其他用户的程序等等诸多优点。

   通过加上一个包括:计算机,用户,程序,进程等对象的数据库管理系统,就可以使用ssh实现一个简单、安全、灵活、高效的分布式计算系统!


架构设计

我给这个想法起个名字sshDos,如果有时间,把它实现出来。

sshDos,不是用于dos操作系统的软件,Dos是分布式操作系统的缩写。sshDos值的是使用ssh技术构建的分布式操作系统。

使用ssh构建分布式操作系统这个想法始于去年的某一天的顿悟。后来一直都没有实施。惭愧!

架构图

远程客户。 管理终端
网络-------------------------------------------
ProxyCluster    ManagerCluster
     |            |.         |
     |           Naming server. Cluster
     |                   db cluster
server cluster

上图中网络内的部分就是sshDos分布式操作系统。
     
主要分为三个部分:

1,命名服务器部分,这是整个系统的大脑。它保存了proxyCluster和serverCluster中所有服务器的信息。

服务器和代理必须向命名服务器注册才能使用。

命名服务器的数据保存在数据库集群中。 
      命名服务器是无状态的服务器集群。 可以使用memcache集群缓存数据,提高性能。
         命名服务器提供类rest的openapi向外提供服务。
         ManagerCluster是web形势的管理服务器,使用命名服务器提供的服务。管理员可以通过它检测运行状况,注册服务器和代理,取消注册,授权访问等等。

2,ProxyCluster,它们接受远程客户请求,并向serverCluster发送命令的服务器。
ProxyCluster使用命名服务器提供的api服务,查找合适的server。然后使用ssh向server发起请求。

3,serverCluster,这是真正执行工作的集群。它们都安装了ssh服务器,从而proxy和naming server可以访问它。
      Naming Server对他执行配置,管理和监控等任务。
        Proxy。向它发起工作负载。

此架构设计的优点:

1,整个系统的所有模块都是集群,可以热插拔任意节点,没有单点失效的问题。
2,使用ssh--安全的shell,因此可以向server发起任何命令。
      因此,sshDos是一个通用的分布式操作系统。
     他不是单纯的分布式map-reduce系统,不是超级计算机,不是分布式存储系统。但它也同时可以是它们全部。
        只需要编写几个shell脚本,或者程序,然后发送给proxy,它就可以实现任意分布式功能。
3,可以使用linux的用户授权机制,控制不同用户使用的资源和权限,实现细粒度的管理。

使用sshDos的例子

   我是做虚拟化的,就以虚拟化为例,说明sshDos分布式操作系统在虚拟化方面的使用例子。


虚拟机集群管理系统

需求

比如说,我们有一个虚拟化的服务器集群,需要对它进行管理。

这样,在sshDos中,worker Cluster就是一个个Host,每一个Host内可以同时启动很多虚拟机。

这些虚拟机供外部用户通过ssh,vnc等方式使用。假设我

们使用kvm,当然使用任何其他hypervisor对于sshDos来说

都是一样的。

因为我们这个是虚拟机集群,我假设我们使用了统一的分布式文件系统。

如SAN,HFS,Ceph等分布式文件系统。这样,我们不需要把vm的img从一个host迁移到另一个Host上。只需要迁移kvm命令行(死迁移)和内存状态(活迁移)。

实现

worker Cluster就是一个个Host。通过Naming Server提供的Web形式的注册接口,

我们可以向sshDos分布式操作系统中添加和移除Host Server。

Naming Server 通过ssh访问每一Host。然后定时执行Host上的top程序,查看系统

的CPU,内存使用率,查看每一个CPU的使用率,从而获得每一个Host的实时压力,存放到

数据库和memcache中。kvm虚拟机在Host内就是一个进程。通过查看kvm进程的资源使用

率,我们就知道了kvm虚拟机的资源占用情况。

远程管理程序通过proxy server发起要求启动一个vm的命令。 Proxy到Naming

Server上查询应该使用哪一个Host Server。

通过编写一个程序,我们可以知道vm内部每一个进程的资源使用情况。 编写一个VM内部运行的监控程序,然后通过kvm模拟的串口等
设备发送到Host上。
        这样Naming Server就可以通过ssh得到VM内部各个进程的运行情况。知道VM的操作系统是否运行正常,各个服务是否运行正常。
       Vm内的一些服务是非常关键的,如sshServer,还有用户启动的服务器,如apache,tomcat等。Naming Server都可以知道的一清二楚。
 
      你还可以使用sshDos分布式操作系统满足你的任意需求,因此sshDos是一个通用的分布式操作系统,而不是专用的分布式系统。

PS:       因为CSDN Blog的格式不好调整,因此我写了一份本文的PDF文档供大家下载《
构建一个分布式操作系统的简单方案1.2》,地址:http://download.csdn.net/source/3140753

构建一个分布式操作系统的简单方案—答陈硕的“分布式系统中的进程标识”一文...相关推荐

  1. 如何构建一个分布式爬虫:实战篇

    本篇文章将是『如何构建一个分布式爬虫』系列文章的最后一篇,拟**从实战角度**来介绍如何构建一个*稳健的分布式微博爬虫*.这里我*没敢谈高效*,抓过微博数据的同学应该都知道微博的反爬虫能力,也知道微博 ...

  2. 如何构建一个分布式爬虫:基础篇

    继上篇(如何构建一个分布式爬虫:理论篇)我们谈论了Celery的基本知识后,本篇继续讲解如何一步步使用Celery构建分布式爬虫.这次我们抓取的对象定为celery官方文档(Celery - Dist ...

  3. 如何构建一个分布式爬虫:理论篇

    ## 前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一 ...

  4. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

  5. python爬虫分布式怎么构造_如何构建一个分布式爬虫:实战篇

    本篇文章将是『如何构建一个分布式爬虫』系列文章的最后一篇,拟**从实战角度**来介绍如何构建一个*稳健的分布式微博爬虫*.这里我*没敢谈高效*,抓过微博数据的同学应该都知道微博的反爬虫能力,也知道微博 ...

  6. python爬虫分布式怎么构造_如何构建一个分布式爬虫:基础篇

    继上篇(如何构建一个分布式爬虫:理论篇)我们谈论了Celery的基本知识后,本篇继续讲解如何一步步使用Celery构建分布式爬虫.这次我们抓取的对象定为celery官方文档(Celery - Dist ...

  7. DasBlog: 构建一个分布式.NET 协作系统

    本文详细说明了weblogs 作为一种知识共享方式的优点,同时通过使用Microsoft .NET 技术描述了设计和实现一个已构建好的weblog的一些经验教训. 本页内容 第一部分:Weblog 现 ...

  8. 创业公司如何构建一个分布式文件存储系统

    有时候初创企业需要快速搭建一个文件存储平台,满足企业内项目的图片.视频.文本等文件的存储:并且即使在读写文件的时候,磁盘坏了.服务器宕机了.交换机坏了.机柜掉电了甚至机房挂了,用户还能正常访问.你同时 ...

  9. 01 手把手带你构建大规模分布式服务--高并发、高可用架构系列,高质量原创好文!...

    作者:丁浪,目前在创业公司担任高级技术架构师.曾就职于阿里巴巴大文娱和蚂蚁金服.具有丰富的稳定性保障,全链路性能优化的经验.架构师社区特邀嘉宾! 阅读本(系列)文章,你将会收获: 全面.体系化的了解大 ...

最新文章

  1. 指向结构体的指针别名
  2. 重磅更新!YoloV4最新论文与源码!权重!结构!翻译!
  3. 编程笔试(解析及代码实现):猴子吃桃。猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个…的C++、Java、Python、C#等语言代码实现
  4. php的declare命令
  5. linux中进程pts 1和pts 3,termial创建时ptmx与pts的关系
  6. freemarker-模板
  7. html带表单和div的素材,用DIV+CSSwe标准布局网页表单的一个例子
  8. php中sql语句有啥用,php中sql语句
  9. Mac版本git下载和使用
  10. 通过Redis实现数据的交集、并集、补集
  11. 使用Arcade制作的简单吃豆人游戏
  12. Unity ML-Agents 从零训练你自己的AI!:一、环境配置
  13. 计算机ppt音乐,ppt背景音乐_适合ppt播放的轻音乐
  14. c#语言小括号里面的逗号是什么意思
  15. c语言课程设计成型代码,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  16. 【那些年,我们一起追的女孩】第十六章
  17. oracle常见语句(转载)
  18. SEIR传染病模型Netlogo仿真程序
  19. 机器视觉系统硬件(2):光源
  20. 2021.5.3 考研数学基础第一讲——高等数学预备知识

热门文章

  1. matlab安装教程补充
  2. FPGA之道(45)正确的变量访问思路
  3. 【Ubuntu日常技巧】【解决】Ubuntu 16 右上角的音量调节通知框不停地闪烁问题
  4. SpringMVC 之拦截器和异常处理
  5. 更安全的堡垒机登录方法
  6. jquery源码学习笔记一:总体结构
  7. 努力学习 HTML5 (2)—— 元素的增和删
  8. MECARD格式的电子名片简单介绍
  9. Linux C gbk utf-8编码转换
  10. APK 本地化和去广告