模式描述对重复发生时间的通用解决方案的核心。
模式的价值在于可重复性。
网站架构模式
为了解决高并发访问,海量数据,高可靠运行,提出了很多解决方案实现高性能,高可用,易伸缩,可扩展,安全等技术架构。
分层
横向分成, mvc, 视图,业务,数据库层
进制跨层调用
会给以后的优化带来很多的方便
可以每层部署到不同的物理设备
分割
纵向切割, 按功能和服务包装成高内聚低耦合的模块单元。
一方面有利于开发和维护,一方面利于分布式部署,提高并发处理能力和功能扩展能力
例如将网站分为:购物,论坛,搜索,广告。。 更细分割,购物可以分为:机票酒店,小商品,大家电等。更细的还可切割为首页搜索列表,详情页等。
分布式
分层和分割的一个重要作用就是分布式, 通过远程调用连接。 提高处理能力
但是。网络损耗, 数据一致性, 更大的宕机风险, 会导致软件错综复杂。
常见的分布式方案:
- 分布式应用和服务. 改善并发性,减少数据库连接资源,还能更好的复用服务,便于业务功能扩展
- 分布式静态资源。 图片等,使用独立域名加快浏览器并发加载速度, 减轻服务器压力。
- 分布式数据和存储。 主要是数据量太大。现在流行的nosql
- 分布式计算: Hadoop和MapReduce. 用于搜索引擎索引构建,数据仓库数据分析等。
- 分布式锁。 分布式环境的并发和协同
- 分布式文件系统 用于云存储
集群
集群化是为了给分布式服务对外一个集中的入口。 通过负载均衡对外提供服务
这种还可以提供可用性,避免宕机。
缓存
将数据放在离计算最近的位置加快处理速度。
CDN:内容分发网络。 放在网络服务商那里,也可以放一些静态资源
反向代理: 网站前端,放静态资源
本地缓存: 存储热点数据
分布式缓存: 热点数据放到缓存中。 减轻后端应用和数据库的负载压力。
异步
降低耦合性。 将业务分为多个阶段,用共享数据的方式进行协作。 单机可以用多线程共享内存队列的方式,即先业务写入队列,后面线程进行消费。 分布式通过分布式消息队列实现。典型是生产者消费者模式。
还有如下的特性:
- 提高系统可用性。 消费者故障,消息队列会存起来。系统整体表现无恙, 消费者恢复后继续处理。
- 加快响应速度
- 消除并发访问高峰。 就是不管并发多大,后台都是这样有序的处理着
- 会对用户体验业务流程有影响
冗余
应用集群。数据库备份,主从。灾备
自动化
自动化代码管理
自动化测试
自动化发布 减少代码编译就发布环节带来的问题
自动化监控
自动化告警
自动化失效转移
自动化降级 拒绝部分请求以及关闭部分不重要的服务
自动化分配资源等等
安全
密码和手机校验码。
网络通信加密
存储敏感数据加密
验证码
XSS攻击
SQL注入
垃圾信息过滤
交易等重要操作进行风控
在新浪微博中的应用
系统分为三个层次, 最下层基础服务层,提供数据库、缓存,存储,搜索等。 支撑海量数据和高并发
中间层是平台服务和应用服务层。 核心服务微博, 关系和用户分割成独立的模块。
业务被分层和分割后进行分布式部署, 在部署上可以单机多应用通过不同的端口号提供服务,得到资源利用最大化。 现在更普遍的做法是单机多虚拟机,这样更方便还不用使用不同的端口
早期架构微博使用同步推模式,用户发表微博后系统会立即将这条微博插入到数据库所有的粉丝订阅列表中。
后来改为推拉结合的模式, 先放入队列,然后任务推到在线订阅者。 离线订阅者上线的同时去拉取订阅列表
使用多级缓存。热门和明星用户在所有服务器上, 在线用户近期微博缓存在分布式缓存中。 保证所有刷微博操作都尽量是缓存操作。
多数据中心,技能灾备,又能就近数据访问。通过消息系统在数据中心之间同步