October 30, 2010
软件架构设计中的同步与异步问题(修改版)
"内容概要:本文分析了大型程序系统设计中经常需要面对的同步和异步结构问题。列举异步结构模式实现手段,论证异步模式效率远远优越于同步模式,证明在硬件资源理想情况下,对同步模式而言并发量对计算机系统的平均交易处理时间没有影响,对异步模式而言平均交易处理时间会随着并发量的增大而急剧下降,最终也趋向一个恒定值。在实际有限计算机资源情况下,程序设计必须设置最大并发量以控制并发程度,否则过多并发量会形成交易对硬件资源的竞争,造成交易的拥塞。\n关键词:同步,异步,消息队列,效率,并发\n一.基本概念\n同步和异步问题是大型程序设计中需要慎重等待的问题,但目前这方面的讨论很少,本文就试图进行有关方面讨论。\n一个大型的程序系统常常是由很多不能功能模块组成的。程序系统运行时不同功能模块要按一定顺序执行,以协同完成一件任务。功能模块协作运行完成一件任务存在同步和异步两种方式。如果在某一时间段,这个程序系统的所有功能模块都在为完成相同的一件任务而服务,某一个功能模块在完成一件任务的子任务后,需要等待其他功能模块完成子任务,这样只有当全部功能模块按顺序完成一件任务后,程序系统才能接收下一个任务,功能模块是串行运行,这 …"
October 29, 2010
FreeBSD 单网卡绑定多个IP
"假设网卡lnc0原IP地址为192.168.0.2,现在为它绑定另一个IP:\n# ifconfig lnc0 192.168.0.3 netmask 255.255.255.255 alias\n解释:\n如果别名IP地址和网卡原IP地址在同一个子网上,就需要设置掩码为255.255.255.255\n如果位于不同的子网,就直接使用相应子网的正常网络掩码\n从TCP/IP的角度来看,这样做意味着什么呢?\n网络掩码的所有位都设置成1,就会保证ICP/IP栈这样来看待包:\n只要包的目标地址匹配所有位,就把该包看成本地子网上的包;它创建了只有一个地址的“子网”。\n所有发送给该地址的包以及该地址接受的包都会发送给路由器,而不会发送到LAN上。\n如果多个别名使用了同一个网络掩码,这些别名的广播地址也应该相同,而这样却导致了TCP/IP栈的混乱。\n使用全1的网络掩码,才能骗过ifconfig,让该命令允许单个接口卡上有多个IP地址。\n要在/etc/rc.conf中设置别名,应该使用 ifconfig_xxx#_alias# 关键字,该关键字的使用形式类似于 ifconfig_xxx#: …"
October 28, 2010
centos下快速同步时间
"安装ntpdate\nyum -y install ntp\nvi /etc/crontab 添加下面这行\n30 21 * * * root /usr/sbin/ntpdate cn.pool.ntp.org \u0026amp;\u0026amp; /sbin/hwclock -w\n:wq (保存退出) 手动更新时间方法:ntpdate cn.pool.ntp.org hwclock -w 这里是更新ROM的时间\n文件格式为:分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 周(0-7) user command 意思是:root用户 在每天21:30 分执行ntpdate comamnd 同步到 cn.pool.ntp.org 这个时间池,并且将更新的时间写入到 ROM里保存。\n备注:不要忘记开启服务啊! chkconfig ntpd –list (查看0~6个runlevel 是否按照阁下意愿开启或关闭 ntpd服务) chkconfig ntpd –level 35 on (开启runlevel 3和5的ntpd服务) chkconfig ntpd on (开启runlevel …"
October 28, 2010
ipvsadm+keepalived 实现高可用负载均衡
"一.使用系统Red Hat Enterprise Linux Server release 5.4 二.安装环境 1.说明 realserver:192.168.1.11\nrealserver:192.168.1.12\nlvs控制机 MASTER:192.168.1.100\nBACKUP:192.168.1.101\n虚拟VIP:192.168.1.200\n其中:realserver上只需要简单的安装apache即可\nlvs控制机需要安装:ipvsadm,keepalived\n2.lvs控制机安装,主备机分别安装ipvsadm 实现LVS/DR最重要的两个东西是ipvs内核模块和ipvsadm工具包,现在的系统已经包含ip_vs模块\n1)检查内核模块,看一下ip_vs 是否被加载 lsmod |grep ip_vs ip_vs 35009 0\n如果没有显示,则说明没有加载,执行命令 modprobe ip_vs 就可以把ip_vs模块加载到内核\n#modprobe ip_vs\n2)安装ipvsadm 先把目录/usr/src/kernels/2.6.18-164.el5-x86_64链接 …"
October 27, 2010
c语言中的scanf语法
"scanf函数,与 printf 函数一样,都被定义在 stdio.h 里,因此在使用scanf函数时要加上#include。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中,其关键字最末一个字母f即为“格式”(format)之意。\nscanf函数的一般形式 scanf(格式控制,地址表列)\nint scanf(char *format[,argument,…]);\n“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。\nscanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。\n例:使用scanf函数输入数据。\n在visual c++ 6.0上的编写方式。\n#include\nvoid main()\n{\nint a,b,c;\nprintf(“please input a,b,c”);\nscanf(“%d,%d,%d”,\u0026amp;a,\u0026amp;b,\u0026amp;c);\nprintf(“a=%d,b=%d,c=%d”,a,b,c);\n}\n在Dev-C++上运行程序为:\n#include\nint …"
October 26, 2010
Centos5下配置 lvs DR
"系统环境如下:\nserver1:192.168.1.206 vip server centos5 server2:192.168.1.210 apache centos5 server3:192.168.1.211 apache centos5\nvip:192.168.1.208 port:80\n============================================\n下面的安装是在vip server上进行的\n1、查看自己的操作系统的内核 #uname -a\n2、这个内核已经包括了ipvs的补丁,进行如下的操作就可以\n3、下面建立一个指向,为了保证ipvsadm安装\nmodprobe ip_vs\ncat /proc/net/ip_vs\n出现如下的提示\nIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags\n– \u0026gt; RemoteAddress:Port Forward Weight ActiveConn InActConn\n4、安装ipvsadm …"
October 26, 2010
linux route 命令
"懂得网络配置命令是一般技术人员必备的技术,经过一段时间的研究和学习,总结了一些常用的命令和示例以便日后查阅. 传统的在1–3点,ip高级路由命令在4–12点,两者部分可以通用,并达到同样的目的,但ip的功能更强大,可以实现更多的配置目的. 首先,先了解传统的网络配置命令: **1. 使用ifconfig命令配置并查看网络接口情况 ** 示例1: 配置eth0的IP,同时激活设备: # ifconfig eth0 192.168.4.1 netmask 255.255.255.0 up 示例2: 配置eth0别名设备 eth0:1 的IP,并添加路由\n# ifconfig eth0:1 192.168.4.2 # route add –host 192.168.4.2 dev eth0:1 示例3:激活(禁用)设备 # ifconfig eth0:1 up(down) 示例4:查看所有(指定)网络接口配置 # ifconfig (eth0) 2. 使用route 命令配置路由表 示例1:添加到主机路由 # route add –host 192.168.4.2 dev eth0:1 # …"
October 26, 2010
CentOS升级内核及KVM安装
"由于CentOS 默认内核为2.6.18,故需要升级内核\n升级内核到2.6.27,很容易,但升级到2.6.28后的版本折腾了我很久\n升级到2.6.27\nwget tar zxvf linux-2.6.27.tar.gz -C /usr/src cd /usr/src/linux-2.6.27 make menuconfig make make modules_install cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.27-root (注意:目录i386是根据你的系统类型, 如果是64位系统, 那就很可能是x86_64) cp System.map /boot/System.map-2.6.27-root mkinitrd /boot/initrd-2.6.27-root.img 2.6.27\nvi /etc/grub.conf\ntitle CentOS (2.6.27) root (hd0,6) kernel /vmlinuz-2.6.27-root ro root=/dev/VolGroup00/LogVol00 rhgb quiet …"
October 25, 2010
Windows 下为PHP添加扩展模块初探
"说明:\n本人新手,虽然用过很长时间的php,也写过一些简单php程序,但是一直没有对php的扩展模块有过研究。最近因为开发需要,要给一些php应用扩展功能,虽然手边有以前开发好的C程序,用popen等运行之也可以使用,但是从效率、调用便捷性、代码完整性等方面考虑总是觉得popen方式有些不妥,因此萌生了写个扩展模块的念头。于是乎上网找资料,并且初步完成了一个最基本的php扩展模块的框架。在此特别感谢花总的友情支持。\nbtw: 本文所说的相关技术已经很陈旧了,实在不适合用“初探”这个词,但是于我个人而言,却又的确是初探,现总结出来,分享之。\n0、环境说明\n框架生成环境:\nFreeBSD 6.0-STABLE ( 用各版本 Linux 或者 cygwin 也可以,不过我手边只有 bsd,就用它了 )\nPHP-4.4.4 源码包 (php-4.4.4.tar.bz2 或 php-4.4.4.tar.gz)\n开发工具:\nVC++ 6.0 ( 我没有用 VS .Net,因为 VC++6.0 启动比较快些,而且只是写个DLL而已 )\n运行环境:\nWindows 2003\nPHP-4.4.4 …"
October 25, 2010
[教程]Linux下C语言对PHP扩展
"一,搭建php环境\n下载php 5.2.6 源码 并解压编译安装,搭建php环境\n二,创建扩展项目\n进入源码目录\ncd php5.2.6/ext/\n./ext_skel –extname=my_ext\n创建名字为my_ext的项目,最终会生成 my_ext.so\n三,更改配置和程序\n$ vi ext/my_ext/config.m4\n根据你自己的选择将\ndnl PHP_ARG_WITH(my_ext, for my_ext support,\ndnl Make sure that the comment is aligned:\ndnl [ –with-my_ext Include my_ext support])\n修改成\nPHP_ARG_WITH(my_ext, for my_ext support,\nMake sure that the comment is aligned:\n[ –with-my_ext Include my_ext support])\n或者将\ndnl PHP_ARG_ENABLE(my_ext, whether to enable my_ext support, …"