大型网站技术架构—核心原理与案例分析

大型网站

特点

  • 高并发,大流量
  • 高可用
  • 海量数据
  • 渐进式发展

发展历程

大型网站的发展随着业务需求渐进式变化。

演化价值观

业务发展是驱动大型网站技术发展的主要力量。伴随着业务的逐步发展,小网站慢慢演化为一个大型网站,而不可能从无到有搭建一个大型网站

大型网站架构模式

  • 分层

    目的:分层架构便于将系统分开部署,分工合作开发和维护;便于调用可以复用的服务

  • 分割
    分割是纵向切分,按照网站的业务进行划分开来,将各模块包装成高内聚低耦合的单元。比如将网站业务划分为搜索,账户,登陆等。
    目的:便于开发和维护,不同模块之间不会干扰;便于模块的分布式部署,提高网站的并发能力和功能扩展能力。

  • 分布式
    分割分层的目的还是为了将系统切分后进行分布式部署。不同模块部署在不同服务器上,能够利用更多的计算机资源完成任务。

问题:网络调用需要通过网络,影响性能;一台服务器宕机可能导致比无法提供服务,导致系统出现问题;数据的一致性问题。
常用方案:分布式应用和服务;分布式静态资源;分布式数据和存储;分布式计算

  • 集群
    集群和分布式的区别在于集群里每台服务器不是相同的应用程序,有些应用经常要被访问,需要多台服务器分担响应的负担,通过负载均衡设备共同对外提供服务。
    目的:分担服务器负担,加快响应。

  • 缓存
    将数据存储在访问速度较快的节点上。
    实现方法:CDN,反向代理,本地缓存,分布式缓存;

  • 异步
    异步操作与同步区别在于调用其他方法之后,不需要等其返回结果,而直接执行下面的任务。
    目的:加快响应速度,消除并发高峰,提高系统可用性。但可能对业务流程造成影响。消息队列里的任务不一定能完成,但完成结果已经提前返回。

  • 冗余
    服务器冗余运行,数据库冗余备份(冷备份,热备份,灾备数据中心)。

  • 自动化
    自动化发布,自动化检测, 自动化测试,减少人为操作带来的失误、

  • 安全
    手机验证登陆,密码,验证码

网站结构

性能

性能测试指标:响应时间,并发数量,负载能力,吞吐量,性能计数器(服务器或者操作系统的数据指标)
性能测试方法:负载测试,压力测试,稳定性测试

优化策略:环节分析(分析时延较长的环节),性能优化

web前端性能优化

  1. 浏览器访问优化
    • 减少http请求。http无状态应用协议,通信链路连接建立成本较高。
    • 使用浏览器缓存。
    • 压缩
    • 减少Cookie传输
  2. CDN加速
  3. 反向代理
    保护服务器,在客户端和服务器端建立安全屏障。反向代理服务器上配置缓存服务,存储静态资源。

应用服务器性能优化

  1. 缓存
    网站性能优化第一定律:优先考虑使用缓存优化性能。数据缓存建立在二八定律上,通常情况下80%的请求访问20%的数据。当出现 频繁修改数据,没有热点访问 缓存效率降低

  2. 分布式缓存架构

    • Jboss cache 互相同步
    • Memcached 不需要
  3. 异步操作
    使用消息队列实现操作异步化。当请求高峰期时,用户写入请求对数据库将造成巨大压力,造成响应缓慢。使用消息队列,用户请求发送后会立即得到反馈,请求进入消息队列后,由消费者进程读取消息执行相应的操作。以此实现异步操作。

  4. 集群

  5. 代码优化

    • 多线程处理多用户并发访问,每个用户请求用一个线程处理。原因:IO阻塞和多CPU,多线程可以最大限度使用CPU。

    • 资源复用减少开销大的系统资源的创建和销毁,数据库连接、网络通信连接、线程等。从编程角度分两种模式:单例模式和对象池。对象池复用对象实例,减少对象的创建以及资源消耗。

    • 数据结构 hash表加快数据的读写性能。

    • 垃圾回收机制 理解JVM中的垃圾回收机制,当内存中的对象失效后更快的收集,以释放内存。

存储优化

  1. 机械硬盘 & 固态硬盘
    机械硬盘:马达驱动磁头臂,将磁头带到磁盘指定位置访问该位置数据,随机访问时效率低下,顺序访问时高。
    固态硬盘:可以快速随机访问,噪声、震动小。

  2. B+树 & LSM树

  3. RAID & HDFS
    RAID:数据分开并行写入多块磁盘中。
    HDFS:具有高度容错性的Hadoop分布式文件系统

网站的高可用架构

网站可用性度量和考核

可用性度量:不可用时间描述,99%,全年有1%的时间不可用。
可用性考核:对网站故障进行分类加权计算故障大小,故障时间*权重

高可用的网站架构

  1. 硬件故障是常态,在保证硬件故障时服务仍然可用,数据依然保存能够被访问。
  2. 手段:数据和服务的冗余备份和失效转移。
  3. 高可用架构:网站结构分层,应用层、数据层、服务层。不同层部署在不同的集群上,同一层,可以再细粒度划分。
    • 应用层:使用负载均衡设备将一组服务器组成一个集群对外提供服务,当一台服务器不可用时候,从集群列表删除。保持集群整体的高可用。
    • 服务层:集群,应用层通过分布式服务调用框架访问服务层服务。
    • 数据层:冗余备份。

高可用的应用

  1. 负载均衡实现无状态服务的失效转移
  2. 应用服务器集群的Session管理
    • session复制
    • session绑定
    • session服务器

高可用的服务

为各种业务提供基础公共服务。

  1. 分级管理 核心服务和应用使用更好的硬件
  2. 超时设置 服务响应超时时进行重试或者进行采用其他操作,防止继续占用系统资源
  3. 异步调用
  4. 服务降级 用户高并发访问某应用时候,可以拒绝不重要的服务或者关闭部分不重要的功能。
  5. 幂等性设计 应用调用服务如果成功,但是由于网络原因,应用没有得到及时响应,可能会重复调用,导致业务出现问题。比如转账。因此保证这些业务一次调用和多次调用的结果具有一致性。

高可用的数据

方法:冗余备份和失效转移

  1. 数据备份:
    • 热备份
      • 异步热备方式 异步写入从存储服务器
      • 同步热备方式 同步写入从存储服务器
    • 冷备份
  2. 失效转移
    步骤:失效确认,访问转移,数据恢复
    失效确认:心跳检测、应用程序访问失败报告。

高可用网站的软件质量保证

网站运行监控

网站的伸缩性架构

不改变网站的软硬件设计,仅仅通过改变部署的服务器的数量就扩大或者缩小网站的处理能力。

  1. 不同功能进行物理分离实现伸缩
  2. 单一功能通过集群规模实现伸缩

应用服务器的集群的伸缩性设计

  1. HTTP重定向负载均衡。 评价:简单。负载均衡效果取决于重定向服务器的性能,并且客户端需要两次像服务器发送请求,性能较低。包括DNS域名解析实际上为三次发送请求。

  2. DNS域名解析负载均衡。评价:简单,省去了单独维护管理负载均衡服务器的麻烦,DNS服务器支持基于地理位置的域名解析,返回离用户最近的服务器的IP地址。缺点是DNS负载均衡的控制权在域名服务商,不易管理。通常DNS服务器作为第一层负载均衡服务器,返回的IP地址对应的服务器为第二层负载均衡服务器,而不是真正访问的服务器。

  3. 反向代理服务均衡。反向代理服务器作为负载均衡服务器,将访问请求分发到后面的web服务器。评价:优点简单,反向代理服务器和负载均衡服务器集成,缺点反向代理服务器可能成为性能瓶颈。

  4. IP负载均衡。修改访问的IP地址,请求包到达内网时修改IP地址,响应包出内网时改为原来的IP地址,对外透明。评价:优点部署简单,在内核进程中完成数据分发,性能较好。缺点响应包也需要经过负载均衡服务器,当有高并发访问时,负载均衡服务器出现瓶颈。

  5. 数据链路层负载均衡。

  6. 负载均衡算法
    轮询、加权轮询、随机、最少连接、原地址散列

分布式缓存集群的伸缩性设计

  • 余数hash算法 无法实现伸缩
  • 一致性hash算法 可以实现伸缩,但不能完成绝对的负载均衡
  • 虚拟层上实现hash算法 能够基本实现负载均衡

数据存储服务器集群的伸缩性设计

网站的可扩展架构

网站的安全架构

  1. 攻击防御
    • XSS攻击 跨站点脚本攻击 反射型、持久性;诱使用户点击含有恶意脚本的链接,执行响应操作
    • CSRF攻击 跨站点请求伪造 ,伪造用户请求,诱使用户以合法身份进行非法操作
    • SQL注入
  2. 信息加密
    • 单向散列加密 密码保存
    • 对称加密
    • 非对称加密
    • 密钥管理 分布式存储密钥,将密钥切片分开存储。
  3. 信息过滤与反垃圾
    • 文本匹配 Trie树
    • 反垃圾 分类算法(贝叶斯等)
    • 黑名单 布隆过滤器
  4. 风险控制
    • 风险:买家,卖家,平台,交易四种风险。
    • 控制:规则引擎,统计模型

网站技术架构图

posted @ 2019-02-28 11:11  御心飞行  阅读(560)  评论(0编辑  收藏  举报