分布式系统

分布式系统

使用多台服务器,为同一种互联网应用提供服务。

分布式系统会采用很多请求分拣和分发的做法,尽快的让更多的服务器来出来用户的请求,

还要尽量想办法减少分发的层次数,以便让请求能尽快的得到处理。

当一个程序在一个电脑上运行,变成了又无数个电脑上同时协同运行,在开发、运维上都会带来很大的差别。

 

并发模型(多线程、异步)

在如何同时处理多个请求的问题上,业界有2个典型的方案。一种是多线程,一种是异步。

多线程下,我们常常要加很多数据的锁,而这些锁又反过来可能导致线程的死锁。

异步回调基于非阻塞的I/O操作(网络和文件),这样我们就不用在调用读写函数的时候“卡”在那一句函数调用,而是立刻返回“有无数据”的结果。

 缓冲技术

最典型的WEB应用缓冲系统是Memcache。

如何让数据缓存分不到不同的机器上。最简单的思路是所谓读写分离,也就是缓存每次写,都写到多个缓冲进程上记录,而读则可以随机读任何一个进程。在业务数据有明显的读写不平衡差距上,效果是非常好的。

硬件故障率

所谓分布式系统,肯定就不是只有一台服务器。假设一台服务器的平均故障时间是1%,那么当你有100台服务器的时候,那就几乎总有一台是在故障的。虽然这个比方不一定很准确,但是,当你的系统所涉及的硬件越来越多,硬件的故障也会从偶然事件变成一个必然事件。一般我们在写功能代码的时候,是不会考虑到硬件故障的时候应该怎么办的。而如果在编写分布式系统的时候,就一定需要面对这个问题了。否则,很可能只有一台服务器出故障,整个数百台服务器的集群都工作不正常了。

 

软件服务内容更新

 

现在都流行用敏捷开发模式中的“迭代”,来表示一个服务不断的更新程序,满足新的需求,修正BUG。如果我们仅仅管理一台服务器,那么更新这一台服务器上的程序,是非常简单的:只要把软件包拷贝过去,然后修改下配置就好。但是如果你要对成百上千的服务器去做同样的操作,就不可能每台服务器登录上去处理。

 

服务器端的程序批量安装部署工具,是每个分布式系统开发者都需要的。然而,我们的安装工作除了拷贝二进制文件和配置文件外,还会有很多其他的操作。比如打开防火墙、建立共享内存文件、修改数据库表结构、改写一些数据文件等等……甚至有一些还要在服务器上安装新的软件。

 

posted @ 2017-08-25 15:40  NotePad_chen  阅读(175)  评论(0编辑  收藏  举报