网站架构的模式
1. 分层
分层大家并不陌生,主要 分为 应用层,服务层,数据层,比较著名的MVC就是这样子的。
开发中,严格遵守分层约束。禁止跨层 或 逆向 调用。
根据实际需要,还可以把每一层进行细分。如:应用层分为视图层 和 业务逻辑层;服务层可细分为数据接口层,逻辑处理层。只要合理,就可以进行细分。
扩展: 现在前段也越来越先进,也可以进行MVC格式分层,例如angular等技术。蜗牛的加油啊,真是赶不上了。
基础:分层 为 分割,分布式,集群等建立了基础。
2.分割
分割就是对比较独立,且较为复杂或者较大的模块进行分割。这样可能一个系统被分割成数个,甚至较大的系统被分割成几十个,独立的小系统(模块),彼此之间通过 彼此认识的协议 进行通信。
如此以来,不仅提高了网站的并发处理能力和功能扩展能力,更是让网站的维护 更加的容易。
同样也为分布式提供了基础。
3.分布式
分布式应用和服务:分割和分层的应用和服务分布式部署。
分布式静态资源:JS/Css/图片等资源分布式部署,且可采用独立的域名
分布式数据存储:NoSql基本上都是分布式的,云存储更是让分布式存储变得简单
分布式计算:这里适用于计算型系统,对应技术Hadoop及其MapReduce(这一块将是十万五千里长征,甚至是一个无头路)
另外,支持网站线上服务器配置实施更新的分布式配置;分布式下实现并发和协同的分布式锁;支持云存储的分布式文件系统等。
缺点:
分布式固然好,但是大家一定要量力而行,且能对症下药,症状如下:
1.分布式系统之间,必须通过网络通信,如此一来 降低了性能。
2.服务器数增多,服务宕机的概率增大。一旦个别服务宕机,将影响局部甚至整个系统(所以需要集群)。
3.数据分布式的一致性保持也需要重点解决。
4.分布式事务更是很难保证。
5.分布式使网站的依赖错综复杂,开发管理维护困难。
4.集群
集群就是将分层 分割 后的独立的系统进行集群化,即根据实际情况进行两台或者数台,数十台部署
集群通过负载均衡提供 高效,稳定的服务。
5.缓存
CDN:网络服务商提供。
反向代理:部署在网站的前端,请求数据中心前的反向代理服务器。
本地缓存:服务器本地缓存 热点数据。
分布式缓存:提供高效,稳定的缓存服务
使用缓存的前提条件:
1. 数据访问热点不均衡,将频繁访问的数据放在缓存。
2. 一段时间内数据有效,不会过期。
严格把控 缓存的有效性:不脏,不雪崩,不穿透
6.异步
异步请求,异步消息队列(分布式消息队列),异步加载(热点缓存),
优点:系统解耦,提高系统的可用性,加快网站的响应速度,消除并发网站的高峰(异步消息队列)
7.冗余
服务器冗余:集群
数据冗余:冷备份,定期备份,存档保存;热备份,主从分离
全球范围内的 灾难备份中心
8.自动化
理想状态下,是无人值守的情况下网站可以正常运营,一切可以自动化。
发布自动化
代码管理自动化
测试自动化
安全检测自动化
部署自动化
报警自动化
失效转移自动化
失效恢复自动化
降级自动化
分配资源自动化
9.安全
xss 和sql 注入
密码 和验证码(动态,图片,手机)
风险控制:交易等重要操作
例: 新浪微博
名词普及
LAMP(Linux,Apache,Mysql,PHP)
MPSS(MultiPort Single Server
基础服务层:数据库,缓存,搜索,存储等数据服务,以及其他基础技术服务
中间层:平台服务 和 应用服务
最上层:API层 和 业务层
异步推拉模式(这里很值得研究):
明星发微博,存入异步消息队列立即返回,消息消费者推给在线用户;用户上线后自动拉取微博订阅列表
多及缓存策略。