当前位置: 代码迷 >> Web前端 >> 《构建高性能WEb站点甄选版》读书笔记
  详细解决方案

《构建高性能WEb站点甄选版》读书笔记

热度:189   发布时间:2012-06-29 15:48:47.0
《构建高性能WEb站点精选版》读书笔记

这本电子书的下载地址:http://www.infoq.com/cn/minibooks/build-high-performance-web

?

前言

构建web站点的基础技术几乎多年从未改变,比如tcp,如今依旧是网络数据传输的主宰,而http则更与我们息息相关,人们做的事情就是在基础上一层一层的封装,不断诞生新的技术,让开发者迷失方向。

?

第一章 分布式缓存

A.基础

1.毫无疑问,memcacehd最需要的是内存。

2.memcached使用了高效的hash算法来存储数据结构,并使用精心设计的内存分配器,他使得查询的时间复杂度达到O(1),这意味着不管查询多少数据,所用的时间都是一样的 ,几乎没有理由不用它。

3.memcahced数据过期是使用LRU,将不常用的数据先淘汰。memcahced使用libevent函数库来实现网络并发模型,所以在较大并发情况下仍能放心使用memcached。

4.memcahced每秒可以处理2338个set请求(里面包括每次操作set都连接和断开操作)(文中使用的测试都是ab测试 )。不进行连接和断开的话可以处理40823个set请求

5.memcached数据项存储使用的是二进制字节byte,网络传输也使用二进制数据。顺便说一下,我们熟悉的json能很好的应用在序列化中,互相转换的计算量不大。

?

B.重复的身份验证

1.大多数站点都有自己的用户系统,每个用户请求页面时都需要对用户的登录状态进行检查。

2.很早以前,把用户的id写入浏览器cookies里,但是有人喜欢篡改cookies,冒充其它用户。

3.新的方法,用户在登录时会获取一个ticket=010f06c7e74f82fe7fb2aea97c50b2字符串,并且写入cookies,每次验证都要上报这个随机字符串。

执行select * from user_info where user_ticket="'ticket'";效率低

在语句前加上查询分析工具explain 就可以看查询次数(结果里面的key为索引关键字,rows查询多少次)。然后对应加入索引后速度变快很多。在一万条数据的情况下每秒未用索引248,使用索引1675,但是使用缓存2654。

?

C.原子加法

1.操作数据库+1的操作,每秒1908次。

2.缓存读取后+1,再写入,是不合理的,在写的时候不许给缓存加锁,但是又由于加锁后速度会慢很多,所以这种效率不高。

3.缓存提供了原子操作,如果数据不存在,会创建数据项,并赋值1,等数据到达了一定数量,写入数据库,同时置为0。

?

D.监控

1.memcached提供了监控的命令。(这个可以放在后台看),可以获得很多信息,例如:运行时间、查询次数、更新次数、命中次数、读取总字节、使用大小、缓存总大小等等。

2.缓存的重建和预热,要做到不影响站点的正常运转。

?

第二章 WEB负载均衡

1.如果公司只依赖一个因素,系统、设备、或人,就会暴露单点故障或隐患,我们应该尽量避免单点故障。

2.返回302,就是要重定向,访问一个站点,会重定向到不同的域名下。

3.不仅是需要负载均衡,同样需要负载反馈

4.DNS指向多个IP,实现负载。还有智能解析,对不同地方的IP进行不同的域名解析。

5.可以利用后端服务器给请求追加写给用户的cookies中,让随后的访问都知道该转发给哪台后端服务器。如果允许的话,我们应该避免这种设计,采用分布式Session或者分布式缓存等,让后端服务的应用尽量与本地无关 。!!!

6.linux从2.4开始,其内置的Netfilter就能修改Ip包,他包含控制和过滤数据包的规则。(还有一个技术iptables)

7.heartbeat对主调度器进行心跳检测,一旦发现主调度器出现问题,立即启动转移,进行IP变更,相关服务启动,随后主调度启动后将相关资源自动交回主调度器

?

第三章 内容分发和同步

1.利用NFS等共享文件可以帮助系统在多台服务器进行共享文件,最终也有可能会成为制约发展的罪魁祸首。

2.每一项重大成就都会带来新的问题。任何一个发展随着时间的推移都会出现新的严重的困难。

3.还介绍了几种工具,看不懂,放弃

?

第四章 数据库扩展

1.mysql为例只需要做到:开启二进制文件(log-bin),然后进行简单配置。

2.开启日志记录,对性能开销大概有1% 的影响,与复制的意义,这是微不足道的。

3.msyqlproxy可以将对A表的数据操作,改为对B表的修改,同样,他完全可以实现读写分离。

4.数据库的写操作可以按照表来垂直扩展,即可以一个服务器只操作一张表。db_friend 其它的表由别的服务器操作。很多大规模的站点都经历从主从赋值,再到读写分离,到垂直扩展,再到水平分区

5.水平分区:按博客作者的ID即奇偶来存入不同的服务器中,就成为水平分区。已经实现分表后在实现分区会容易很多。

6. 分区的扩展性更多的体现在能否实现扩展,并且减少最小的移动。

?????? hash算法分区,但是这样不容易扩展。(例如上面说的按id的奇偶)。

?????? 利用区域性1-1000、1001-2000 这样分区,只需要维护一个简单的映射表即可。

7.spock proxy 在mysqlproxy的代码基础上进行了一些改进,他实现了水平分区的调度。

?

第五章 性能监控

1.nmon是一款在服务器运行的实时监控软件,他可以提供每秒的系统监控,并通过nmon Analyser获得CPU统计报表

2.监控代理包括MRTG,Cacti以及NAGIOS在内的很多监控工具都是利用SNMP来监控远程服务器,而你只需要在被监控的服务器上开启SNMP服务,同时授权配置即可。

3.nginx也提供了必要的HTTP监控接口,在代码里面加上如下,然后访问127.0.0.1/wanstatus 就能看到基本的一点信息。

location /wanstatus{
stub_status on;
access_log off;
}

?

4.继续介绍一些可视化的工具,对于我来说暂时没用,忽略。

?

结束

读后感

半天看完,86页,一本适合快速阅读的书,可以对服务器整体的认识更进了一步。也为看这本书的完整版做个铺垫。