构建可扩展的Web站点读书笔记
书读完了一遍,边做一个示例网站边写读书笔记。
第一章 绪论
不要花刘个月时间制定规范,再花一年来实施。花一天定规范,几天实现,几个月完善。这个建议和《梦断代码》惊人的相似。
第二章 Web应用程序
这章讲的是web站点需要分层,例如持久化存储层、业务逻辑层、展现层……示例网站采用Django作为框架,我理解的“层次”如下:
Django本身就是分层的,自称MTV框架。模板层使用Django自带的模板语言,此外包括XHTML、CSS和JS等前端技术。视图则是纯的Python代码,可以使用Django框架带来的各种功能。模型层也是Python代码,但是主要的任务就是定义数据库模型(表结构),以及定义对这些模型的管理(manager),它会负责与数据库的连接。
下载Django之后,默认的配置采用SQLite数据库,可以迁移到MySQL和PostgreSQL上。自己对PostgreSQL比较陌生,但是目前MySQL前途未卜,而Django官方又推荐PostgreSQL,决定难下。
同样,Django内置一个测试的服务器,不过不能用在生产环境。官方推荐Apache+mod_python,但是民间似乎传说nginx拥有速度优势。
第三章 开发环境
1. 使用源代码控制系统:SVN
2. 单步构建:代码要经过开发、提交测试,然后才能部署。
3. 问题跟踪(缺陷跟踪):Google Code好像有这个功能。Trac好像不错,但是应该要配置一段时间。
本段还介绍了微软的“零错误方法学”
编码规范:制定包括缩进,注释等的代码风格规范以及对变量名的约定。
测试:
回归测试(Regression Testing),确保程序没有旧病复发,建议不要太多,否则浪费时间。
手工测试,web程序必经的步骤。
第四章 i18n,L10n和Unicode
本章大多介绍的是如何在PHP中使用UTF-8。幸运的是Django内部直接就采用了Unicode的处理字符串,而且自带一个i18n模块。
第五章 数据一致性和安全性
1. 过滤HTML输入。
2. XSS:对输出进行escape,这个是Django的默认行为。
3. SQL注入:Django基本上免疫,因为正常情况下不会手工构造SQL语句进行查询。
第六章 电子邮件
越过。
第七章 远程服务
介绍了socket、基于HTTP的XML-RPC和SOAP,最后介绍了Flickr利用自定义协议实现的文件存储协议。
第八章 瓶颈
找出瓶颈
把应用划分为逻辑组件,之后对每个组件进行分析,深入到硬件层次(CPU、内存I/O、硬盘I/O、网络I/O)。
CPU:使用top查询。
磁盘I/O:iostat –c 可以看到CPU因等待I/O操作完成而处于空闲状态的百分比(iowait)。iostat – dx查看更详细的报告。
网络I/O:netstat –i 和 netstat –ieth0 –e。
内存I/O:free –m ,查看内存分配状态。vmstat –S M 物理内存和虚拟内存的使用。ps ax,RSS为驻留集(在主内存中),VSZ为工作集(虚拟大小)。避免使用SWAP。
数据库:查询优化、索引优化、缓存。
第九章 扩展Web应用程序
水平扩展:多机器的软硬件最好是一致的,配置起来比较方便。
负载均衡:DNS方式僵硬,硬件方式太贵,软件方式靠谱。
扩展MySQL:
MySQL的复制(主从、主主)。主从的大概机制,主数据库向从数据库发送binary log,从数据库将受到的log写入relay log,再按顺序执行relay log。后面介绍了数据库分区(纵向扩展)以及联合(横向扩展)。
存储扩展:
文件系统,当一个目录有太多的文件时,基于inode的Unix文件查找会很慢,而新的文件系统Reisser和ext3解决了这个问题。RAID、联合(GFS、MogileFS)、缓存(memchached、Squid)。