#网站的架构演进
![](https://box.kancloud.cn/2016-05-20_573e7553b7ecc.png)
![](https://box.kancloud.cn/2016-05-20_573e7553df667.png)
![](https://box.kancloud.cn/2016-05-20_573e7554156c4.png)
![](https://box.kancloud.cn/2016-05-20_573e755442561.png)
![](https://box.kancloud.cn/2016-05-20_573e75546db77.png)
![](https://box.kancloud.cn/2016-05-20_573e75549f32b.png)
![](https://box.kancloud.cn/2016-05-20_573e7554d7535.png)
![](https://box.kancloud.cn/2016-05-20_573e75552e463.png)
![](https://box.kancloud.cn/2016-05-20_573e75555ff4d.png)
#优化
##优化两大核心原则-前端缓存
* 浏览器地址缓存,DNS Cache(TTL)
* 浏览器中文件的缓存(Cache-Control)
* cdn 中的缓存,cdn的原理(刷新的问题)
* 文件分发路径上的缓存(内部Squid,varnish,nginx cache)
##优化两大核心原则-后端缓存
**数据库缓存**
* 打开就一定好吗?
* 如何保持?
* 数据库连接池
**Memcached**
* 内存缓存,无持久化,高性能
**Redis**
* 可持久化,数据结构丰富
**MongoDB**
* 不算是缓存,是数据库
* 坑比较多,长于描述类文件存储
##优化两大核心原则-多级缓存
**页面内缓存**
* 进程内缓存
* 页面内缓存
**OpCode Cache缓存(PHP)**
* Java本身就支持
**本机缓存**
* Opcode 加速器提供
**业务中间件缓存**
* 商品信息中间件
* 用户信息中间件
* 好友关系中间件
![](https://box.kancloud.cn/2016-05-20_573e7555ae8e2.png)
![](https://box.kancloud.cn/2016-05-20_573e7555d6504.png)
##优化两大核心原则-分离之分
**动静分离**
1. 动静分离不仅仅是体现在前端资源上
2. 数据库上也有动静分离
**读写分离**
1. 主从承压分离
**特征分离**
1. 根据字段大小不同,实现设计上的分离
**业务分离**
1. 数据库在业务分离,叫水平切分
2. 不同的业务使用不同的机器集群
3. 服务化
##优化两大核心原则-分层之分
**前端代码分层**
1. base层
2. 公用层
3. page层
**后端业务代码分层**
1. MVC分层
**架构部署分层**
1. 业务逻辑程序,中间件,后端数据存储
**发布上线分层**
1. 重点业务,灰度发布
##优化两大核心原则-分布之分
**分布式数据库**
* 关系型数据库
* NoSQL数据库
**分布式缓存**
* 内存缓存
* 可持久化缓存
* 文件缓存
**分布式存储**
* 分布式文件存储
* 分布式日志数据存储
**分布式计算**
* 数据统计分析
* 全文检索
##优化两大核心原则-分工之分
**多线程**
* 多线程处理同一件事情
**职责分工**
* 插件,扩展,模块
* usb
* Liunx内核
**Map-Reduce**
* 将任务拆分,最后讲结果合并
**异步之分**
* 异步让效率更高
* 系统更稳定
* 用户体验更好
##架构与优化的保障 --工具化
1. 使用成熟的工具监控,Nagios,Mrtg,Cacti
2. 监控端口,请求,状态码,日志,Crontab
3. 自行编写合适自己的工具,比如分析Haproxy 的流量计算所有的实时请求数,实现数据的备份自动和扩容的半自动化,实现小文件备份自动化,灰度发布系统
4. 终极目标:抛开繁琐的运维步骤,抛开checklist,做到真正的自动化
##架构与优化的保障 -- 成本
1. 上线前对业务的合理且充分的预估,根据业务的不同而不同
2. 一方面要用够机器的资源。一方面要敢于做扩容的决断
3. 检测业务的使用效率,做不同的对待,有回收,有扩容
4. 意外事件的保障,灾备
5. 降级,保障核心运转,保障读,差异服务,灰度服务
![](https://box.kancloud.cn/2016-05-20_573e7556109cd.png)
![](https://box.kancloud.cn/2016-05-20_573e755632dd9.png)
![](https://box.kancloud.cn/2016-05-20_573e7556570e3.png)
- SWOOLE及php网络编程
- LNMP架构与Socket,http协议
- 如何高效学习
- 开发工具箱
- 编写高效的js
- js闭包编写全功能的购物车
- JSON和JSONP
- 多级分类的开发与应用
- 设计安全的登录注册流程
- 前端性能优化
- 前端架构优化
- 使用第三方云服务加速产品开发
- 移动互联网之API开发
- php分层
- 全文检索的实践与部署
- webIM的原理及前后端实现
- 如何配置高效的数据库以及MySQL的代码及插件开发
- NoSql.队列,任务队列
- 构建本机缓存,构建分布式缓存池
- 数据库分库分表的设计
- Nginx原理及模块开发初步
- 无限扩充的数据库架构
- php构建分库分表分布式数据库连接池
- 静态文件上传、分布式存储与分发
- MySQL Cluster,Proxy分析与实践
- 架构解密