Nginx auxiliary server shcadule[shell scripts]

 

Recently, we are planning to use two nginx server for load balancing’s hot backup. Here is the scripts I wrote that used to switch virtual IP automatically for servers when either one of the two servers got crash.

#!/bin/bash                                                                                

# This scripts is used to check nginx status and startup automatically.
# Written by Libo.ma @ Oct 20, 2011 17:16

Ver=0.9 Continue reading "Nginx auxiliary server shcadule[shell scripts]" 

单播,组播,广播。

单播,组播,广播。

conception review
———————-
单播
单播
  Unicast,是客户端与服务器之间的点到点连接。“点到点”指每个客户端都从服务器接收远程流。仅当客户端发出请求时,才发送单播流。
  Unicast(单播):在客户端与媒体服务器之间需要建立一个单独的数据通道,从一台服务器送出的每个数据包只能传送给一个客户机,这种传送方式称为单播。指网络中从源向目的地转发单播流量的过程。单播流量地址唯一。每个用户必须分别对媒体服务器发送单独的查询,而媒体服务器必须向每个用户发送所申请的数据包拷贝。这种巨大冗余首先造成服务器沉重的负担,响应需要很长时间,甚至停止播放;管理人员也被迫购买硬件和带宽来保证一定的服务质量。文字单播方式下,只有一个发送方和一个接收方。与之比较,组播是指单个发送方对应一组选定接收方的一种通信,任意播是指任意发送方对应一组较为接近的接收方间的一种通信。早期的点对点通信含义类似于单播。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。
  单播的优点:
  1. 服务器及时响应客户机的请求
  2. 服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。
  单播的缺点:
  1. 服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
  2. 现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。
广播
  :
  主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
  广播的优点:
  1. 网络设备简单,维护简单,布网成本低廉
  2. 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
  广播的缺点:
  1.无法针对每个客户的要求和时间及时提供个性化服务。
  2. 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
  3. 广播禁止在Internet宽带网上传输。
组播
  :
  主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
  组播的优点:
  1. 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
  2. 由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个(268435456)组播,所以其提供的服务可以非常丰富。
  3. 此协议和单播协议一样允许在Internet宽带网上传输。
  组播的缺点:
  1.与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
  2.现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中

喜欢这样的小程序 李少宏 python简明教程练习–命令行 地址簿 程序

reference link:
李少宏
python简明教程练习–命令行 地址簿 程序

在这个程序中,你可以添加、修改、删除和搜索你的联系人(朋友、家人和同事等等)以及它们的信息(诸如电子邮件地址和/或电话号码)。这些详细信息应该被保存下来以便以后提取。

由于上个程序中的代码没有把信息从文件中读取出来,我们可以把相同的信息保存在info.txt文件中去,这使得info.txt文件会有多余的东西。以下是我修改后的代码

代码:

”’

Created on 2011-10-16

@author: Descusr

”’

# coding:utf-8

import sys

import os

import cPickle

class Person:

filename = ‘info.txt’

def __init__(self, name, phone):

self.name = name

self.phone = phone

self.personlist = {self.name:self.phone}

def add(self):

self.name = raw_input(“Enter name:”)

if self.name in self.personlist.keys():

print “The name is exist!”

else:

self.phone=raw_input(“Enter phone:”)

self.personlist[self.name] = self.phone

print “Contact saved!”

def Modify(self):

self.name = raw_input(“Enter name:”)

if self.name in self.personlist.keys():

self.phone = raw_input(“Enter new phone:”)

self.personlist[self.name] = self.phone

print “Contact saved!”

else:

print “The name is not in here!!”

def delete(self):

self.name = raw_input(“Enter name:”)

if self.name in self.personlist.keys():

del self.personlist[self.name]

print “Deleted!!”

else:

print “The name is not in here!!”

def search(self):

self.name = raw_input(“Enter name:”)

if self.name in self.personlist.keys():

print ‘Name:%s,Phone:%s’%(self.name,self.phone)

else:

print “The name is not in here!!”

def save(self):

f = file(self.filename,’w’)

cPickle.dump(self.personlist,f)

f.close()

print “Your contacts list has been saved to file:%s successfully~” %self.filename

def load(self):

if os.path.exists(self.filename):

f = file(self.filename)

self.personlist = cPickle.load(f)

f.close()

def show(self):

for self.name,self.phone in self.personlist.items():

print “Name:%s Phone number:%s” %(self.name,self.phone)

if __name__ == ‘__main__’:

os.system(‘clear’)

command = [‘add’,’modify’,’search’,’delete’,’quit’ ,’show’]

person = Person(”,”)

person.load()

while True:

print “The contact person:”

str = raw_input(‘What are you going to do(add/modify/search/delete/show/quit)?’)

if str in command:

if str == ‘add’:

person.add()

elif str == ‘modify’:

person.Modify()

elif str == ‘search’:

person.search()

elif str == ‘delete’:

person.delete()

elif str == ‘show’:

person.show()

else:

ch = raw_input(“Your contacts list hasn’t been saved,save it now?(Y/N)”)

if ch == ‘y’:

person.save()

sys.exit()

else:

sys.exit()

print “Exit the System”

break

else:

print “Please input the command!”