高可用,高性能,易扩展,可伸缩和安全。

大型网站架构演化

初始阶段的网站架构

LAMP: Linux, Apache, MySQL, PHP

应用服务和数据服务分离

应用和数据分离:应用服务器,文件服务器和数据库服务器

使用缓存改善网站性能

使用缓存:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存

应用服务器集群改善网站的并发处理能力

应用服务器实现集群来改善负载压力,以同样的方式持续增加服务器不断改善系统性能,从而实现系统的可伸缩性。通过负载均衡调度服务器。

数据库读写分离

大部分主流数据库提供主从热备功能,配置两台数据库主从关系,将一台数据库服务器的数据更新同步到另一台服务器上。实现数据库读写分离,从而改善数据库负载压力。

应用服务器在写数据的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,可以通过从数据库获得数据。

反向代理和CDN加速网站响应

CDN和反向代理的基本远离是缓存,CDN部署在网络提供商的机房,用户请求网站服务,可以从距离自己最近的网络提供商机房获取数据。

反向代理部署在网站的中心机房,用户请求首先访问服务器反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

分布式文件系统和分布式数据库系统

分布式数据库是网站数据库拆分的最后手段,但是最常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

使用NoSQL和搜索引擎

两者对可伸缩的分布式特性具有更好的支持,应用服务器通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

业务拆分

将一个网站拆分成多个应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系,也可以通过消息队列进行数据分发,多数是通过访问同一个数据存储系统来构成一个关联的完整系统。

分布式服务

将公用的业务提取出来,独立部署,由这些可复用的业务链接数据库,提供公用业务服务。通过分布式服务调用公用业务服务来完成具体业务操作。

  • 大型网站架构技术的核心价值是随网站所需灵活应对
  • 驱动大型网站技术发展的主要力量是网站的业务发展

大型网站架构模式

分层

系统在横向维度上切分成几个部分,每个部分负责一部分或者相对单一的职责,通过上层对下层的依赖和调用组成一个完整的系统。

必须合理规划层次边界和接口,遵循分层架构的约束。

最初目的是规划软件清晰的逻辑结构便于开发维护,分层结构对于网站支持高并发向分布式方向发展至关重要。

分割

纵向方面对软件进行切分,不同的功能和服务分割开来。

分布式

大型网站里,分层和分割的主要目的是为了切分后的模块便于分布式部署,将不同模块部署在不同的服务器上,通过远程调用协同工作。

  • 分布式应用和服务
  • 分布式静态资源
  • 分布式数据和存储
  • 分布式计算
  • 分布式配置
  • 分布式锁
  • 分布式文件系统

集群

对于用户访问集中的模块,还需要将独立部署的服务器集群化,多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。

缓存

  • CDN,内容分发网络
  • 反向代理
  • 本地缓存
  • 分布式缓存

异步

计算机软件的一个重要目标是降低软件耦合性。异步是一个重要手段,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行协作。

  • 多线程共享内存队列
  • 分布式系统中,通过分布式消息队列

作用:

  • 提高系统可用性
  • 加快网站响应速度
  • 消除并发访问高峰

冗余

服务器冗余运行,数据冗余备份。两台服务器构成一个集群,目的就是通过冗余实现服务高可用。

数据库定期备份,存档保存实现冷备份,为了保证在线业务高可用,需要对数据库进行主从分离,实时同步实现热备份。

自动化

  • 发布过程自动化
  • 自动化代码管理
  • 自动化测试
  • 自动化安全检测
  • 自动化部署
  • 自动化监控
  • 自动化报警
  • 自动化失效转移
  • 自动化失效恢复
  • 自动化降级
  • 自动化分配资源

安全

  • 加密
  • XSS攻击:XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
  • SQL注入
  • 风险控制
  • 过滤

山寨和创新的最大区别不在于是否抄袭,是否模仿,而在于对于问题和需求是否真正理解和把握。