###好文章
###服务器并发处理
吞吐率:单位时间服务器处理的请求数
内存分配:
1.apache:内存使用较多,多进程模型。使用内存池策略管理内存,因此启动时申请大量内存
2.lighttpd:单进程模型
##缓存 ###1.动态内容缓存
####页面缓存:把动态页面输出的HTML进行缓存
-
对于更新频率低的页面生成静态*.html页面放在nginx服务器上
-
动态请求再交给java服务器
-
工具:ehcache,oscache
-
缓存可以放在磁盘上、内存中、独立的缓存服务器。工具:memcached
-
页面局部缓存
-
制定更新策略:改变时更新或定时更新
###2.浏览器缓存
- 服务器返回:Last-modified:时间
- 浏览器下次访问:If-Modified-Since:时间
- 服务器回复:304 Not Modified
除了减少服务器开销,还能减少带宽开销
###3.web服务器缓存
根据url判断是否缓存,
###4.反向代理缓存
web服务器隐藏在代理服务器之后,将缓存放入代理服务器中,代理服务器决定使用缓存还是讲请求发送给后端服务器
代理服务器有:Varnish,squid
ESI(edge side includes):局部缓存:反向代理服务器只向后台请求更新内容,不变内容进行缓存 SSI(server side includes):是在web服务器端组装,而ESI在代理服务器上组装内容
###5.分布式缓存
memcached
1.读缓存:相当于使用了数据库的前置读缓存
2.写缓存:把频繁更新的内容先写入memcache,定期更新到持久层
负载均衡问题:对key取余
相同思路:组件分离:
将不同文件部署到不同服务器上,如图片服务器
可以提高浏览器下载资源并发数。因为浏览器对同一个域名下的并发数有限制。
##负载均衡
#####1.DNS负载均衡 DNS服务支持一个域名指定多个IP,可以采用轮询调度策略
CDN(内容分发网络):按照指定规则映射域名ip,按地理位置,将近的Ip返回给用户
#####2.IP负载均衡 工作在网络层和传输层,通过修改ip或者端口实现,效率高
Linux的iptables,LVS
#####反向代理负载均衡 转发HTTP请求到不同服务器,工作在应用层
粘滞会话:因为session信息需要将一个用户请求映射到同一台机器上。
通过根据用户ip计算的hash来做映射
##网络文件系统
目的:在多台服务器间共享文件
NFS :通过RPC协议传输
###内容分发和同步 目的:一台文件服务器不够用,内容复制多分到多台机器上 #####两种方式:主动分发和被动同步 主动分发:SCP
被动同步:rsync
###分布式文件系统
思路:负载均衡,请求分散到多个服务器上-->NFS实现文件共享--> 集中访问吃力,创建多个副本,复制到多个服务器上--> 分发和同步麻烦,分布式文件系统
hadoop
###数据库扩展
####1.主从复制 主从复制依据二进制日志进行
####2.读写分离 写操作在主服务器进行,读操作在从服务器进行
用MySql Proxy实现
####3.垂直分区 将不相干业务放到不同服务器上
####4.水平分区 同一个表分到两台服务器,根据Id奇偶性选定数据库
分区需要考虑扩展性