设万维读者为首页 广告服务 联系我们 关于万维
简体 繁体 手机版
首页 新闻 视频 博客 论坛 分类广告 购物
版主:阿飞的剑
万维读者网 > 茗香茶语 > 帖子
简谈多程序架构和服务器群之二
送交者: mingcheng99 2016年03月14日16:43:50 于 [茗香茶语] 发送悄悄话

简谈多程序架构和服务器群之二, 兼与懒网讨论


我们把前文问题简化为一个软件在更新后重新起动的时候,需要其作用不被间断, 这样的问题我们在上文中指出在很多时候都有实际需求。 懒网提出用双子星架构来解决这个问题。 采用过程是:A -> A' with alias B, B kills A, B deletes A, B copies itself to B', B' renames alias B to A'。  

我们把一个已经启动的程序叫作它的 image 。就是它的机器码已经加载在一定的已经 allocated 好的 memory 内并在执行。 它的原码改动之后,可以再编译成一个新的可执行文件,假设还是叫 XX。EXE。 你可以再起动它,这样就有两个同名, 但内容不同,  彼此独立的 images 在跑。 但是,如果这两个images 都要占用机器的某些不可以共享的资源,或者是机器容量不足以容纳这两个images同时在跑,那么显然是有问题。 其他问题根据具体软件其实还有,不过这里先放过.   如果我们先把旧的image 杀掉,再让新的 image 起来。就没有资源和容量问题,它们可以共享一个独立运行的数据库没有问题。但是,对于有 real time 数据进来的程序,这就至少会失去在等待新程序起来的时间内进来的数据。传统上解决这个问题的方法是再用一个控制软件来控制这样的程序,不管两个程序是否同名。这个控制程序我们叫它 Director。Director只是一个小程序,它一般做成象计算机的一个 built in 的服务。它永远是在运行的。 它管理这些程序的启动和下去。并接受新image 上来之前的数据。以传给新的image, 这样就至少不会失去数据,即使可能处理不及时。


我说过,在做自动化控制的时候,软件不但要同时控制多个程序,还要控制多个在协作运行的机器。 这些机器和自带的控制程序还来自不同的厂家.   任何一个程序都可能当掉,下面我们看到连专业服务器群都可能当掉,所以任何架构都不是保险的。我们的一个底线就是要晶圆不掉下来和不碎。我们的设备是提供给英特耳的,那里正在处理中的一个晶圆可能价值很多万刀,我们有句话说,如果晶圆掉下来,那意味着我们的饭碗也掉下来。许多问题,在实际运行中才能发现,不是如同想象的那么好做。


这样的架构和概念发展成服务器群。一个目的是这些服务器可以同时运行做一样的工作。这样来支持多用户。另一个目的就是在某一个服务器,特别是某些专门的服务器需要重新启动或者是当掉的时候,对外的服务不被中断。有一个专门的服务器来管理整个服务器群,就是我们提到的 Director. 基本上,所有重要的服务都用服务器群,以免服务不被中断。


就在几年以前,我们曾用过专业的服务器群来提供网络电话的开发和测试,理论上不会失去数据,但在服务器转换的时候依然会失去real time 数据,我们的程序都没有看见数据进来。但处于同一个实验室的测试用户确实打了电话。我们都无法找到数据在那里丢失的.  我们甚至经常可以看到一些著名IT公司的服务都会断掉,就是说整个服务器群都当掉了。


为什么任何软件和机器都会出问题呢, 那就涉及到更深层的原因了。因为当前我们常见的民用计算机如 PC,服务器。和程序语言如 C,C++, C#, Java 还有相应的编译器,等等,它们在设计上都是容许出错 runtime error 的。墨非定律。如果它可能出错,那么它一定出错。 不管你怎么改都没有用的。那么有没有从设计开始就不容许出错的语言,编译器和计算机呢,当然有的。不过就不在本文范围之内了。


注: 本文全凭记忆和个人经验。 如有错误,欢迎指正。


0%(0)
标 题 (必选项):
内 容 (选填项):
实用资讯
回国机票$360起 | 商务舱省$200 | 全球最佳航空公司出炉:海航获五星
海外华人福利!在线看陈建斌《三叉戟》热血归回 豪情筑梦 高清免费看 无地区限制