php3亿数据查询方案 php查询数据表( 五 )


IP负载均衡的性能要高出Nginx的反向代理很多,它只处理到传输层为止的数据包,并不做进一步的组包 , 然后直接转发给实际服务器 。不过,它的配置和搭建比较复杂 。
4. DNS负载均衡
DNS(Domain Name System)负责域名解析的服务 , 域名url实际上是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射 。而一个域名是可以配置成对应多个IP的 。因此 , DNS也就可以作为负载均衡服务 。
这种负载均衡策略,配置简单,性能极佳 。但是,不能自由定义规则,而且,变更被映射的IP或者机器故障时很麻烦,还存在DNS生效延迟的问题 。
5. DNS/GSLB负载均衡
我们常用的CDN(Content Delivery Network,内容分发网络)实现方式 , 其实就是在同一个域名映射为多IP的基础上更进一步,通过GSLB(Global Server Load Balance,全局负载均衡)按照指定规则映射域名的IP 。一般情况下都是按照地理位置,将离用户近的IP返回给用户,减少网络传输中的路由节点之间的跳跃消耗 。
“向上寻找” , 实际过程是LDNS(Local DNS)先向根域名服务(Root Name Server)获取到顶级根的Name Server(例如.com的),然后得到指定域名的授权DNS,然后再获得实际服务器IP 。
CDN在Web系统中,一般情况下是用来解决大小较大的静态资源(html/Js/Css/图片等)的加载问题,让这些比较依赖网络下载的内容,尽可能离用户更近,提升用户体验 。
例如,我访问了一张imgcache.gtimg.cn上的图片(腾讯的自建CDN , 不使用qq.com域名的原因是防止http请求的时候,带上了多余的cookie信息),我获得的IP是183.60.217.90 。
这种方式,和前面的DNS负载均衡一样,不仅性能极佳 , 而且支持配置多种策略 。但是,搭建和维护成本非常高 。互联网一线公司,会自建CDN服务 , 中小型公司一般使用第三方提供的CDN 。
Web系统的缓存机制的建立和优化
刚刚我们讲完了Web系统的外部网络环境,现在我们开始关注我们Web系统自身的性能问题 。我们的Web站点随着访问量的上升,会遇到很多的挑战,解决这些问题不仅仅是扩容机器这么简单,建立和使用合适的缓存机制才是根本 。
最开始,我们的Web系统架构可能是这样的,每个环节 , 都可能只有1台机器 。
我们从最根本的数据存储开始看哈 。
一、 MySQL数据库内部缓存使用
MySQL的缓存机制,就从先从MySQL内部开始,下面的内容将以最常见的InnoDB存储引擎为主 。
1. 建立恰当的索引
最简单的是建立索引,索引在表数据比较大的时候 , 起到快速检索数据的作用,但是成本也是有的 。首先,占用了一定的磁盘空间,其中组合索引最突出 , 使用需要谨慎,它产生的索引甚至会比源数据更大 。其次,建立索引之后的数据insert/update/delete等操作,因为需要更新原来的索引,耗时会增加 。当然,实际上我们的系统从总体来说 , 是以select查询操作居多,因此,索引的使用仍然对系统性能有大幅提升的作用 。
2. 数据库连接线程池缓存
如果 , 每一个数据库操作请求都需要创建和销毁连接的话,对数据库来说,无疑也是一种巨大的开销 。为了减少这类型的开销 , 可以在MySQL中配置thread_cache_size来表示保留多少线程用于复用 。线程不够的时候 , 再创建,空闲过多的时候,则销毁 。
其实,还有更为激进一点的做法 , 使用pconnect(数据库长连接) , 线程一旦创建在很长时间内都保持着 。但是,在访问量比较大,机器比较多的情况下,这种用法很可能会导致“数据库连接数耗尽”,因为建立连接并不回收,最终达到数据库的max_connections(最大连接数) 。因此,长连接的用法通常需要在CGI和MySQL之间实现一个“连接池”服务,控制CGI机器“盲目”创建连接数 。

推荐阅读