May 16, 2009
使用MySQL Proxy和MySQL Replication实现读写分离
"\u003cp\u003e\u003ca href=\"http://www.ningoo.net/html/2007/mysql_replication_configuration.html\"\u003eMySQL Replication\u003c/a\u003e 可以将master的数据复制分布到多个slave上,然后可以利用slave来分担master的读压力。那么对于前台应用来说,就要考虑如何将读的压力分布到多个slave上。如果每个应用都需要来实现读写分离的算法,一则成本太高,二来如果slave增加更多的机器,应用就要随之修改。明显的,如果在应用和数据库间加一个专门用于实现读写分离的中间层,则整个系统的架构拥有更好的扩展性。\u003c/p\u003e\n\u003cp\u003eMySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用 \u003ca href=\"http://www.lua.org/\"\u003elua脚本\u003c/a\u003e,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。\u003c/p\u003e\n\u003cp\u003e安装教程请参考: \u003ca href=\"http://blog.haohtml.com/archives/9465\"\u003ehttp://blog.haohtml.com/archives/9465\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2009/05/lim98ihh.png\"\u003e\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/lim98ihh.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://forge.mysql.com/wiki/MySQL_Proxy\"\u003eMySQL …\u003c/a\u003e\u003c/p\u003e"
May 16, 2009
MySQL Proxy工作机制浅析
"\u003cp\u003eMySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断、改变并转发客户端和后端数据库之间的通信来实现其功能,这和\u003cstrong\u003eWinGate\u003c/strong\u003e之类的网络代理服务器的基本思想是一样的。代理服务器是和TCP/IP协议打交道,而要理解MySQL Proxy的工作机制,同样要清楚MySQL客户端和服务器之间的通信协议,\u003cstrong\u003eMySQL Protocol\u003c/strong\u003e包括认证和查询两个基本过程:\u003c/p\u003e\n\u003cp\u003e认证过程包括:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e客户端向服务器发起连接请求\u003c/li\u003e\n\u003cli\u003e服务器向客户端发送握手信息\u003c/li\u003e\n\u003cli\u003e客户端向服务器发送认证请求\u003c/li\u003e\n\u003cli\u003e服务器向客户端发送认证结果\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e如果认证通过,则进入查询过程:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e客户端向服务器发起查询请求\u003c/li\u003e\n\u003cli\u003e服务器向客户端返回查询结果\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e当然,这只是一个粗略的描述,每个过程中发送的包都是有固定格式的,想详细了解MySQL Protocol的同学,可以去 \u003ca href=\"http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol\"\u003e这里\u003c/a\u003e 看看。MySQL Proxy要做的,就是介入协议的各个过程。首先MySQL Proxy以服务器的身份接受客户端请求,根据配置对这些请求进行分析处理,然后以客户端的身份转发给相应的后端数据库服务器,再接受服务器的信息,返回给客户端。所以MySQL Proxy需要同时实现客户端和服务 …\u003c/p\u003e"
May 16, 2009
MySQL DBA 管理 常用 命令
"\u003cp\u003e虽然自己不是DBA,但是作为一个程序员,多多少少,应该了解一些数据库方面的东西,并不能只关心程序,不考虑数据库,看到一篇文章,就先转过来,也许以后自己哪天会用到。\u003c/p\u003e\n\u003cp\u003e查看mysql的某个选项\nshow variables like ‘%VAR_NAME%’;\u003c/p\u003e\n\u003cp\u003eselect @@VAR_NAME;\u003c/p\u003e\n\u003cp\u003e 在Linux下管理MySQL数据库的时候总有一些很紧急的情况,发现数据库突然变得压力很大了,那么作为一个DBA,也许需要一些常用的手段或者说命令去分析问题出现在哪里,然后解决:\u003c/p\u003e\n\u003cp\u003e数据库突然产生压力时查看正在查询的SQL:(如果这里内容太多表示并发执行的SQL过多,或许数据库堵塞了,会越来越慢,正常情况下这里应该很少有东西的,也就是连接都在Sleep状态)\n/usr/local/mysql/bin/mysql -uroot -ppassword databaseName -e “show full processlist” | grep -v Sleep\u003c/p\u003e\n\u003cp\u003e正在运行的SQL太多了,看不过来,那需要排序了,看持续执行时间最长的那些SQL:\n/usr/local/mysql/bin/mysql …\u003c/p\u003e"
May 13, 2009
利用 squid 反向代理提高网站性能
"\u003cp\u003e级别: 初级\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"#author\"\u003e李明慧\u003c/a\u003e ([limhui@cn.ibm.com][2]), 软件测试工程师, IBM\u003c/p\u003e\n\u003cp\u003e2009 年 4 月 02 日\u003c/p\u003e\n\u003cp\u003e本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性、安全性方面有很好的用途。作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术,实现了网站的负载均衡,从而提高了网站的可用性和可靠性。\u003c/p\u003e\n\u003cp\u003e现在有许多大型的门户网站如 SINA 都采用 squid 反向代理技术来加速网站的访问速度,可将不同的 URL 请求分发到后台不同的 WEB 服务器上,同时互联网用户只能看到反向代理服务器的地址,加强了网站的访问安全。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e反向代理的概念\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e反向代理服务器又称为 WEB 加速服务器,它位于 WEB 服务器的前端,充当 WEB 服\u003c/p\u003e\n\u003cp\u003e务器的内容缓存器。其系统结构如图 1\u003c/p\u003e\n\u003cp\u003e [\u003cimg src=\"https://blogstatic.haohtml.com//uploads/2023/09/image001.jpg\" alt=\"\"\u003e][3]\u003c/p\u003e\n\u003cp\u003e反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服 …\u003c/p\u003e"
May 13, 2009
反向代理简介
"\u003cp\u003e 代理服务器是使用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使 内部网主机免受外部网主机的攻击。但是,如果想让互联网上的主机访问内部网的主机资源(例如:Web站点),又想使内部网主机免受外部网主机攻击,一般的 代理服务是不能实现的,需要使用反向代理来实现。\u003c/p\u003e\n\u003cp\u003e本文将详细介绍反向代理服务的概念以及如何利用反向代理服务器提高WEB服务器的性能和安全性。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一.反向代理的概念\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e什么是反向代理呢?其实,反向代理也就是通常所说的WEB服务器加速,它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器(即:WEB反向代理服务器)来降低实际的WEB服务器的负载。典型的结构如下图所示:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2009/05/1057141.jpg\"\u003e\u003cimg src=\"http://blogx.haohtml.com/wp-content/uploads/2009/05/1057141.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWeb服务器加速(反向代理)是针对Web服务器提供加速功能的。它作为代理Cache,但并不针对浏 览器用户,而针对一台或多台特定Web服务器(这也是反向代理名称的由来)。实施反向代理(如上图所示),只要将Reverse Proxy Cache设备放置在一台或多台Web服务器前端即可。当互联网用户访问某 …\u003c/p\u003e"
May 10, 2009
通过分区(Partition)提升MySQL性能
"\u003cp\u003e\u003cstrong\u003e什么是数据库分区?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e 数据库分区是一种物理数据库设计技术,DBA和数据库建模人员对其相当熟悉。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。\n分区主要有两种形式://这里一定要注意行和列的概念(row是行,column是列)\u003c/p\u003e\n\u003cp\u003e 1. 水平分区(Horizontal Partitioning)这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。\n 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(朋奕注:这里具体使用的分区方式我们后面再说,可以先说一点,一定要通过某个属性列来分割,譬如这里使用的列就是年份)\n 2. 垂直分区(Vertical Partitioning) 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列 被划分到特定的分区,每个分区都包含了其中的列所对应的行。\n 举个简单例 …\u003c/p\u003e"
May 7, 2009
便于管理的nginx配置[2009-03-18 01:15:05]
"\u003cp\u003e我目前的nginx配置是拆散的,这样可以便于在很多个虚拟主机和目录里重用部分配置。\u003c/p\u003e\n\u003cp\u003e总体是划分为这样一个结构:\u003c/p\u003e\n\u003cp\u003econf/\nconf/nginx.conf\nconf/proxy.conf\nconf/rewrite.conf\nconf/location.conf\nconf/port.conf\nconf/upstream.conf\nconf/servers/\nconf/servers/www.sudone.com\nconf/servers/www.163.com\u003c/p\u003e\n\u003cp\u003e1、nginx.conf\u003c/p\u003e\n\u003cp\u003e这就是nginx读取的主文件,没特殊情况是通用的\u003c/p\u003e\n\u003cp\u003e2、proxy.conf\u003c/p\u003e\n\u003cp\u003e代理的选项配置,也是通用的\u003c/p\u003e\n\u003cp\u003e3、rewrite.conf\u003c/p\u003e\n\u003cp\u003e所有主机的根目录公用的rewrite规则,默认是空文件,可以不使用。\u003c/p\u003e\n\u003cp\u003e4、location.conf\u003c/p\u003e\n\u003cp\u003e所有主机都会用到的location目录结构,默认是空文件,可以不使用。\u003c/p\u003e\n\u003cp\u003e5、port.conf\u003c/p\u003e\n\u003cp\u003e配置服务器绑定ip和端口,因为nginx如果各个主机ip端口配置有不同会有bug,所以最好是统一设定。\u003c/p\u003e\n\u003cp\u003e6、upstream.conf\u003c/p\u003e\n\u003cp\u003eupstream写在这里面,和业务分开,易 …\u003c/p\u003e"
May 7, 2009
nginx图片服务器的架构方案[2009-03-18 01:15:06]
"\u003cp\u003e图片服务通常数据容量较大,而且访问也频繁,鉴于此,图片服务就会有两种问题,一是存储问题,二是访问量问题。\u003c/p\u003e\n\u003cp\u003e存储问题就是硬盘容量问题,花钱买硬盘就可以了,看似简单,但着实也是最苦的问题。按目前探索来看,最好的方式是:在任何时刻遇到硬盘空间不够时,买颗硬盘插上,最多改改配置,就能立刻利用;另外,硬盘要能充分利用,不然图片存储量大再加上备份,很恐怖,最好是每颗硬盘都用上100%的空间。\u003c/p\u003e\n\u003cp\u003e访问量也是个大问题,如果服务不允许防盗链,那么访问量会引起带宽、服务器压力等问题,有钱的话直接扔CDN,没钱或者有更多的钱,就自己做吧。根据垣古不变的真理“越老的图,访问量也相对较少”这一点,分成两大部分,一边处理最新的图片,一边处理老旧的图片。最新的图片访问量大,但存储量较少;老图片访问量低,但存储量大。\u003c/p\u003e\n\u003cp\u003e大概分析完了,开始制定方案。\u003c/p\u003e\n\u003cp\u003e一、拟定一个存储目录规则:\u003c/p\u003e\n\u003cp\u003e在现有的/a/b/abcde.jpg这样的hash方式下多加一个日期的目录变成:/200810/16/a/b/abcde.jpg或者/2008/10/16/a/b/abcde.jpg。按日期制定这个目录规则后,就可以按年月来拆机器了。\u003c/p\u003e\n\u003cp\u003e二、分机器, …\u003c/p\u003e"
May 7, 2009
图片服务器的hash架构[2009-04-19 23:17:00]
"\u003cp\u003e\u003ca href=\"/wp-content/uploads/2009/05/image_hash.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2009/05/image_hash.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e如图,这是一个最简洁的架构。\u003c/p\u003e\n\u003cp\u003e在这个架构里,负载均衡器都可以省了,用最为廉价的dns来替代,dns的优点就是廉价,不用维护,也不愁性能和稳定,还可以跨机房多用几条带宽作分流。另外,在图片服务中,可以选择用另一个域名做dns。优点是主站中的任何cookie等header不会带到图片服务中,省了不少上传流量和服务器可能有的处理时间;缺点是多花了点域名的钱。目前门户都喜欢用这办法,小站用的话,用另一个域名还附带有一个特别的优点:因为部分域名服务商允许添加的二级域名有限,所以用别的域名可以节约有限的域名资源。dns这一块也可以用泛域名,不过貌似国内的泛域名支持不是特别的稳定,有些网站的泛域名,在linux下不能解析windows就正常,比较奇怪,我也没法解释。\u003c/p\u003e\n\u003cp\u003e在这个架构里我总共开了36个域名,但是一时没有那么多机器,所以有一些域名指向同一台机器。一般来说,一个刚上线的项目,放一台机也未尝不可,但是链接(包括域名)一定要固定下来,不然以后调整会非常痛苦。\u003c/p\u003e\n\u003cp\u003e域名的事情还是比较简单的,只要照着填写web表单就完成了,配置四台nginx服务器当然也是非常简单的,因为不需要什么特殊的功能,所以四台机 …\u003c/p\u003e"
May 7, 2009
新型的大型bbs架构(squid+nginx)[2009-03-18 01:15:06]
"\u003cp\u003e这个架构基于squid、nginx和lvs等技术,从架构上对bbs进行全面优化和保护,有如下特点:\u003c/p\u003e\n\u003cp\u003e1、高性能:所有的点击基本上全部由前端缓存负责,提供最快速的处理。\u003c/p\u003e\n\u003cp\u003e2、高保障度:不需考虑应用程序稳定与否、程序语言是何种、数据库是何种,都能从架构上保证稳定。\u003c/p\u003e\n\u003cp\u003e3、高可用性:对应用程序的修改达到最简化:在程序的某些地方加入清缓存的语句即可,当然还需要做页面静态化的工作和统计工作。\u003c/p\u003e\n\u003cp\u003e首先看图,这个图比较大:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2009/05/archi_bbs.png\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2009/05/archi_bbs.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e这个架构的特点和一些流程的说明:\u003c/p\u003e\n\u003cp\u003e1、主域名和图片域名分离\u003c/p\u003e\n\u003cp\u003e域名分离可以使流量分离,缓存策略分离等等,好处诸多。bbs初期一定要做好规划,将图片用另外的域名独立服务,即使没有足够机器,域名也要先分开。另外,图片服务器可以使用有别于主域名的另一个域名,一个好处是可以减少读取cookie对图片服务器的压力,另一个是提高安全性,避免cookie泄露。\u003c/p\u003e\n\u003cp\u003e2、使用LVS作为前端、二级代理和数据库的访问入口\u003c/p\u003e\n\u003cp\u003e使用LVS作为入口,比其他任何一种方式都来得更优质。首先LVS的负载能力很强,因为它工作在网络协议的第4层,使用虚拟ip技术,所以它本身并不担负任何流量的处理,仅仅是一个封包转发的功能;第 …\u003c/p\u003e"
May 7, 2009
Nginx 简单的负载均衡配置示例
"\u003cp\u003e\u003ca href=\"http://www.haohtml.com\"\u003ewww.haohtml.com\u003c/a\u003e 和 blog.haohtml.com 域名均指向 Nginx 所在的服务器IP。\u003c/p\u003e\n\u003cp\u003e用户访问,将其负载均衡到192.168.1.2:80、192.168.1.3:80、192.168.1.4:80、192.168.1.5:80四台服务器。\u003c/p\u003e\n\u003cp\u003e用户访问,将其负载均衡到192.168.1.7服务器的8080、8081、8082端口。\u003c/p\u003e\n\u003cp\u003e以下为配置文件nginx.conf:\n引用\nuser www www;\u003c/p\u003e\n\u003cp\u003eworker_processes 10;\u003c/p\u003e\n\u003cp\u003e#error_log logs/error.log;\n#error_log logs/error.log notice;\n#error_log logs/error.log info;\u003c/p\u003e\n\u003cp\u003e#pid logs/nginx.pid;\u003c/p\u003e\n\u003cp\u003e#最大文件描述符\nworker_rlimit_nofile 51200;\u003c/p\u003e\n\u003cp\u003eevents\n{\nuse epoll;\u003c/p\u003e\n\u003cp\u003eworker_connections 51200;\n}\u003c/p\u003e\n\u003cp\u003ehttp\n{\ninclude conf/mime.types;\ndefault_type …\u003c/p\u003e"
May 7, 2009
服务器的大用户量的承载方案 Nginx Squid Apache PHP MySQL
"\u003cp\u003e一、前言\u003c/p\u003e\n\u003cp\u003e二、编译安装\u003c/p\u003e\n\u003cp\u003e三、 安装MySQL、memcache\u003c/p\u003e\n\u003cp\u003e四、 安装Apache、PHP、eAccelerator、php-memcache\u003c/p\u003e\n\u003cp\u003e五、 安装Squid\u003c/p\u003e\n\u003cp\u003e六、后记\u003c/p\u003e\n\u003cp\u003e一、前言,准备工作\u003c/p\u003e\n\u003cp\u003e当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。\u003c/p\u003e\n\u003cp\u003e我们采用的架构图如下:\u003c/p\u003e\n\u003cp\u003e引用\u003c/p\u003e\n\u003cp\u003e——– ———- ————- ——— ————\u003c/p\u003e\n\u003cp\u003e| 客户端 | ===\u0026gt; |负载均衡器| ===\u0026gt; |反向代理/缓存| ===\u0026gt; |WEB服务器| ===\u0026gt; |数据库服务器|\u003c/p\u003e\n\u003cp\u003e——– ———- ————- ——— ————\u003c/p\u003e\n\u003cp\u003eNginx Squid …\u003c/p\u003e"
May 6, 2009
Drupal,开源cms里的巨擘。
"\u003cp\u003e我从2002年底就开始关注drupal了,当时在国内看不到一点关于drupal的资料,2003年写过几篇关于drupal的介绍文章,到现在都经常看到很多介绍drupal的文章里引用我的话。记得2003年看到\u003ca href=\"http://www.hiweed.com/\"\u003e海微\u003c/a\u003e在研究drupal,并且发布了中文语言包,打开了drupal进入中国的大门。海微是我一直敬仰的一个人,以前一直致力于xoops的中文化工作,现在竟然搞Hiweed Linux操作系统了。\u003c/p\u003e\n\u003cp\u003e海微发布drupal中文语言包后我就一直开始用drupal,不过都是当作普通的blog程序来用,基本上不装插件,也没改过风格。中途试着改过几次风格,但试了几次都放弃了,感觉很麻烦。\u003c/p\u003e\n\u003cp\u003e最近看了几个用drupal做的强站,看了之后感觉就是震撼,根本看不出是用个开源代码的做的,看了之后我又萌发了修改drupal风格的念头,打算为我的\u003ca href=\"http://www.geekg.com/\"\u003e极客集\u003c/a\u003e改个版。研究了两天,终于明白drupal模板的原理了,对CCK和views这两个超强模块也有了新的认识,把官方的主要模块都看了看,看得我眼都花了,实在是太多了,对drupal的评价就是:“只有想不到的,没有做不到的”你想要什么功能都有什么模块。这也是国外程序最大的特 …\u003c/p\u003e"
May 5, 2009
php判断浏览器类型
"\u003cp\u003eUA = getenv(“HTTP_USER_AGENT”);\n $start = strpos($this-\u0026gt;UA,”(“)+1;//查看起始位置\n $length = strpos($this-\u0026gt;UA,”)”)-$start;//查看结束位置\n $middle = trim(substr($this-\u0026gt;UA,$start,$length)); //查看内容\n $end = trim(substr($this-\u0026gt;UA,$start+$length+1));//附加内容\n $message = explode(“;”,$middle);//转换成数组\n //———-操作系统—————–\n $os = trim($message[‘2’]);\n $os_array = explode(” “,$os);\n $this-\u0026gt;PLATFORM = trim($os_array[‘0’]);//操作系统\n //————浏览器————\n $brower = trim($message[‘1’]); …\u003c/p\u003e"
May 4, 2009
大中型网站架构探秘
"\u003cp\u003e【eNet硅谷动力专稿】相信很多IT人士都有过搭建自己主页的经验,10多年前的个人主页都非常简单,很多由Frontpage构建,多属于静态HTML页面,最多加一点特效而已。不过10年间,技术的进步是惊人的。现在,一个网站绝不可能仅仅由几个HTML页面构成。我们随便举一个例子,国内图片网站yupoo.com,在chinarank排名1000左右,而Alexa排名则为5000左右,这个网站不算大,就是这样一个中型站点,拥有超过60台服务器,架构中涉及的Web服务器就包括了Lighttpd、Apache和 nginx。Yupoo的流量不算大,就已经拥有了60台服务器,事实上,排名前几位的网站,都拥有成千上万台服务器,如何协调这些服务器之间的工作负载,如何统一指挥调度,如何维护这些服务器硬件都是棘手的挑战。\u003c/p\u003e\n\u003cp\u003e \u003cstrong\u003e负载均衡:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e 负载均衡是所有大中型网站必备的部署。显然,大型网站每天上千万独立IP的访问量,一个Web服务器根本承担不了,网站后台必需有多台服务器共同工作,因此各种负载均衡技术就应运而生了。\u003c/p\u003e\n\u003cp\u003e 较早的负载均衡是DNS负载均衡。原理很简单,只要在域名解析的时候,将多个地址配置成同一个 …\u003c/p\u003e"