分层
分层是企业应用一种常见的架构模式,将系统在横向维度上切分为几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。
应用层 | 负责具体业务和视图展示,如搜索输入和结果展示 |
服务层 | 为应用层提供服务支持,如用户管理服务,购物车服务 |
数据层 | 提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等 |
在实际中,大的分层结构内部可以再次分层,如应用层可以分为视图层和业务逻辑层;服务层可以细分为数据接口层(适配各种输入和输出数据格式)和逻辑处理层。进行分层的优点就是支持网站高并发向分布式发展。
分隔
分层是将软件在横向方面进行切分,那么分隔就是在纵向方面对软件划分。按照功能和种类进行分隔,包装为高内聚低耦合的模块单元。
分布式
对于大型网站,分层和分隔的一个主要目的是为了切分后的模块便于分布式部署,将不同的模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完成同样的功能,计算机越多,能够处理的并发和数据量越大
网站应用中,常用的分布式方案
分布式应用和服务: 将分层和分割后的应用和服务模块分布式部署,除了可以改善网站性能和并发性、加快开发和发布速度、减少数据库连接资源消耗外,还可以使不同应用复用共同的服务,便于业务功能扩展。
分布式静态资源:网站的静态资源如js、css等资源独立分布式部署并采用独立的域名,就是动静分离。静态资源分布式部署可以减轻应用服务器的负载压力。
分布式数据和存储:将数据分布式存储,除了传统的关系数据库进行分布式部署外,nosql也采用分布式
分布式计算,此外,还有支持网站线上服务器配置实时更新的分布式配置;分布式环境下的分布式锁,分布式文件系统等。
集群
使用分布式虽然将分层和分隔后的模块独立部署,但是对于用户访问集中的模块,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
服务器集群的优点,是能够提供更好的并发特性,当有更多用户访问,只要向集群中加入新的机器。
数据库读写分离
配置主从数据库,应用服务器写入数据,访问主数据库,主数据库通过主从复制将数据拷贝到从数据库,应用服务器读取数据时候访问从数据库,实现读写分离。
缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段。
CDN: 即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达他的网络服务商,在这里缓存一些静态资源,就可以最快的返回给用户,如视频网站和门户网站的热点内容缓存在CDN
反向代理: 反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网络的数据中心,最先到达的就是反向代理服务器,这里缓存网站的静态资源,无需请求继续转发给服务器直接返回到用户。
本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库。
分布式缓存:将数据缓存在一个专门的分布式缓存集群中。
启用缓存的条件:一是数据访问热点不均衡,某些数据会被更频繁的访问,二是数据在某个时间段内有效,不会很快过期,否则缓存的数据因为失效产生脏读。
异步
服务间的关系时同步的,不仅耦合性很强,而且性能较低,配置为异步能降低服务间的耦合。
异步架构通过队列实现,队列是典型的生产者消费者模型。处在业务操纵前面的线程将输出写入队列,后面的线程从队列中取出数据处理。
使用异步的消息队列的特性:
1. 提高系统的可用性。消费者服务器发生故障,数据会在消息队列服务器中存储,生产者服务器可以继续处理业务请求。消费者服务器恢复正常了,有可以继续处理消息队列中的数据
2. 加快网站的响应速度。生产者服务器处理完业务后,将数据放入队列,直接返回,不用等待消费者处理成功,延迟减少。
3. 消除并发访问高峰。将突增的访问请求放入队列中,减少网站的负载。
冗余
配置多余的服务器冗余运行,为了防止服务器出现故障,服务照常运行。即使是访问和负载很小的服务,也至少配置两个服务器构成集群。
数据库处理定期备份,存档保存,实现冷备份外,还需要对数据库进行主从分离,实时同时实现热备份。
自动化
自动化架构设计主要集中在发布运维方面(发布过程自动化、自动化代码管理、自动化测试、自动化安全检查、自动化部署等。)
安全
网站在安全架构方面积累了许多模式:通过密码和手机校验码进行身份认证;登录、交易等操作对通信加密;用户信息进行加密处理;防止机器人程序攻击,使用验证码识别;对于常见的xss攻击,sql注入进行编码转换等处理等。