大型网站架构设计概要
架构模式:使用类似甚至相同的功能组件或模块组个一个整体来解决共性的问题;问题重复出现,解决方案可重用。
架构设计
分层
应用层:直接面向用户,在技术上大多指前端应用,如视图、首页、门户、结果展示等
服务层:主要处理业务逻辑,为应用层提供服务,如订单管理,用户管理等。
数据层:提供数据访问服务,如数据库,缓存,文件,搜索引擎等。
网络通信OSI模型将计算机网络体系结构划分为七个层;TCP/IP参考模型,将网络体系结构划分为4个层。
MVC将将应用划分3个层:模型层,视图层,控制器。
分层之间具有独立性,只要各层之间的调用接口不变。分层的模块可由不同团队负现,可以分离部署,使得应用的结构更清晰,便于开发维护。
分割
分割是将大型应用按业务模块或功能服务拆分成独立的子系统,包装成高内聚低耦合的模块单元。有助于开发和维护,便于不同模块的分布式部署和集群部署,提高并发处理和护展能力。
按业务模块拆份,由不同的团队负责;若业务模块庞大还可以进行更细粒度的拆分,将服务分割成合适的模块。
分布式
将不同的模块部署在不同的服务器上,通过远程调用协同工作,降低因单个模块的故障导致整个系统的宕机。
分布式环境在保持数据一致性上始终是个问题,分布式事务也难以保证,通过网络调用影响性能,分布式部署导致系统依赖变的复杂、增加开维护的难度。
- 分布式应用和服务:将分层和分割的应用和服务模块分布式部署,可以复用共公服务,便于业务功能扩展。
- 分布式静态资源:静态资源独立部署,动静分离,减轻应用服务器的负载压力。
- 分布式数据库和存储:分布式数据库方便动态扩展,支持海量的数据。
- 分布式计算:实时数据处理、数据分析统计等计算规模宠大。目前行业普遍使用
Hadoop
和MapReduce
分布式计算框架。
集群
集群是将独立部署的模块服务器集群化,部署多台构成一个集群,通过负载均衡来调度应用对外提供服务。最小的集群是应用服务至少部署两台。
缓存
缓存是将资源存储到离计算机最近或离用户访问距离最近的服务器上,加快处理速度。
- CDN:内容分发网络,将静态资源部署到离终端用户最近的网络服务商。
- 本地缓存:应用程序服务器本地缓存热点数据,受限于内存容量,存储数据量不大。
- 分布式缓存:通过部署专门的缓存服务器,根据模块分布式集群部署,加快数据访问速度,减轻数据库的负载压力。
异步
异步架构是典型的生产者消费者模式,两者不存在直接调用,通过消息通信来决定业务逻辑的执行。在分布式系统中,多个服务集群通过分布式消息队列实现异步。
- 提高系统可用性:消费者或生产者服务器一方发生故障,未处理的消息在消息队列中堆积,服务恢复后可继承处理。
- 加快网站的响应速度:无需立即等待消费者服务器处理就可返回,减少响应延迟。
- 消除并发访问高峰:高峰时的并发访问,将请求数据放入消息队列中依次处理,减少服务器负载压力。
备份
在互联网公司,核心资产是业务数据,数据的重要性再怎么强调都不为过。
需要定期对数据进行备分存档,实现冷备份。搭建集群数据库,备置主从库,实现执备份。
自动化
- 发布自动化。
- 代码自动化管理。
- 版本控制自动化。
- 自动化测试。
- 自动化安全检测。
- 自动化部署。
- 自动化监控。
- 自动化报警。
- 自动化失效转移。
- 自动化失效恢复。
- 自动化降级。
- 自动化分配资源。
安全
身份数据加密,存储数据加密,通信加密,使用验证码进行识别。
防范网络攻击,XSS攻击,SQL注入。过滤垃圾信息,敏感信息。对交易模式和交易信息进行风险控制。