2. 网站架构模式
「模式」的定义:
每一个模式描述了一个在我们周围不断重复发生的问题及该问题的解决方案的核心。
模式的关键 —— 模式的可重复性。
2.1 分层
将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。
分层架构模式的目的:规划软件清晰的逻辑结构便于开发维护,支持网站从高并发向分布式方向发展。
网站分层架构 | 职责 |
---|---|
应用层 | 负责具体业务和视图展示,如网站首页及搜索输入和结果展示。 |
服务层 | 为应用层提供服务支持,如用户管理服务,购物车服务。 |
数据层 | 提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等。 |
应用层可以继续细分为:视图层、业务逻辑层。
服务层可以继续细分为:数据接口层、逻辑处理层。
分层面临的挑战:
- 合理规划层次边界和接口;
- 开发过程中,需要严格遵守分层架构约束,禁止跨层次调用及逆向调用。
2.2 分割
分割是在纵向上对软件进行切分。
网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
大型网站分割的颗粒度可能会很小。
2.3 分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。
分布式意味着可以使用更多的计算机完成同样的功能,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。
分布式在解决高并发问题的同时带来的困难:
- 服务调用必须通过网络,影响服务性能。
- 服务器越多,宕机的概率也越大,降低了网站可用性。
- 分布式数据库如何保持数据一致性。
4,分布式事务难以保证。 - 网站依赖错综复杂,增加了开发管理维护成本。
2.4 集群
对于访问集中的模块,需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
集群可以提高系统的并发性、可用性。
2.5 缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。
使用缓存的两个前提条件:
- 数据访问热点不均匀;
- 数据在某个时段内有效,不会很快过期,否则缓存的数据就会因为已经失效而产生脏读,影响结果的正确性。
2.6 异步
- 在单一服务器内部可通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;
- 在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看作内存队列的分布式部署。
使用异步消息队列的特性:
- 提高系统可用性;
- 加快网站响应速度;
- 消除并发访问高峰;
2.7 冗余
- 通过冗余实现服务高可用:服务器冗余运行、数据库冗余备份。
- 数据库冷备份:定期备份,存档保存。
- 数据库热备份:主从分离、同步备份。
- 备份整个数据中心。
- 全球范围内部署灾备数据中心。
2.8 自动化
2.9 安全
- 通过密码和手机校验码进行身份认证。
- 通信加密。
- 验证码。
- 编码转换防止 XSS、SQL 注入等网站攻击。
- 垃圾信息、敏感信息过滤机制。
- 交易风险控制系统。