4 网站架构模式(1)

  • 分布式数据和存储:大型网站需要处理以P为单位的海量数据,单台计算机无法提 供如此大的存储空间,这些数据需要分布式存储。除了对传统的关系数据库进行分布式 部署外,为网站应用而生的各种NoSQL产品几乎都是分布式的。

  • 分布式计算:严格说来,应用、服务、实时数据处理都是计算,网站除了要处理这 些在线业务,还有很大一部分用户没有直观感受的后台业务要处理,包括搜索引擎的索 引构建、数据仓库的数据分析统计等。这些业务的计算规模非常庞大,目前网站普遍使 用Hadoop及其MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而 不是移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算。

此外,还有可以支持网站线上服务器配置实时更新的分布式配置;分布式环境下实 现并发和协同的分布式锁;支持云存储的分布式文件系统等。


4 集群

使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模 块(比如网站的首页),还需要将独立部署的服务器集群化,即多台服务器部署相同应用 构成一个集群,通过负载均衡设备共同对外提供服务。

更多用户访问的时候,只需要向集群中加入新的机器即可。同时因为一个应用由多台服 务器提供,当某台服务器发生故障时,负载均衡设备或者系统的失效转移机制会将请求 转发到集群中其他服务器上,使服务器故障不影响用户使用。所以在网站应用中,即使 是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小的集群,目的 就是提高系统的可用性。


5 缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能 的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件 设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。

  • CDN:即内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求 总是先到达他的网络服务商那里,在这里缓存网站的一些静态资源(较少变化的数据), 可以就近以最快速度返回给用户,如视频网站和门户网站会将用户访问量大的热点内容 缓存在CDNo

  • 反向代理:反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求 到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源, 无需将请求继续转发给应用服务器就能返回给用户。

  • 本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访 问数据,而无需访问数据库。

  • 分布式缓存:大型网站的数据量非常庞大,即使只缓存一小部分,需要的内存空间

也不是单机能承受的,所以除了本地缓存,还需要分布式缓存,将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。

使用缓存有2个前提条件,医师数据访问热点不均衡,某些数据会被更频繁的访问,

这些数据应该放在缓存中;二是数据在某个时间段内有效,不会很快过期,否则缓存的 数据就会因已经失效而产生脏读,影响结果的正确性。网站应用中,缓存除了可以加快 数据访问速度,还可以减轻后端应用和数据存储的负载压力,这一点对网站数据库架构 至关重要,网站数据库几乎都是按照有缓存的前提进行负载能力设计的。


6 异步

计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间直接关系越

少,就越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦合的手段除了前 面提到的分层、分割、分布等,还有一个重要手段是异步,业务之间的消息传递不是同 步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。

在单一服务器内部可通过多线程共享内存队列的方式实现异步,处在业务操作前面 的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;在分布式系统中, 多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看作内存队列的分 布式部署。

异步架构是典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不 变,彼此功能实现可以随意变化而不互相影响,这对网站扩展新功能非常便利。除此之 外,使用异步消息队列还有如下特性。

  • 提高系统可用性。消费者服务器发生故障,数据会在消息队列服务器中存储堆积, 生产者服务器可以继续处理业务请求,系统整体表现无故障。消费者服务器恢复正常后, 继续处理消息队列中的数据。

  • 加快网站响应速度。处在业务处理前端的生产者服务器在处理完业务请求后,将数 据写入消息队列,不需要等待消费者服务器处理就可以返回,响应延迟减少。

  • 消除并发访问高峰。用户访问网站是随机的,存在访问高峰和低谷,即使网站按照一般访问高峰进行规划和部署,也依然会岀现突发事件,比如购物网站的促销活动,微博上的热点事件,都会造成网站并发访问突然增大,这可能会造成整个网站负载过重, 响应延退,严重时甚至会出现服务宕机的情况。使用消息队列将突然增加的访问请求数据 放入消息队列中,等待消费者服务器依次处理,就不会对整个网站负载造成太大压力。

但需要注意的是,使用异步方式处理业务可能会对用户体验、业务流程造成影响, 需要网站产品设计方面的支持。


7 冗余

网站需要7x24小时连续运行,但是服务器随时可能出现故障,特别是服务器规模比 较大时,岀现某台服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可 以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当 某台服务器宕机时,可以将其上的服务和数据访问转移到其他机器上。

访问和负载很小的服务也必须部署至少两台服务器构成一个集群,其目的就是通过 冗余实现服务高可用。数据库除了定期备份,存档保存,实现冷备份外,为了保证在线 业务高可用,还需要对数据库进行主从分离,实时同步实现热备份

为了抵御地震、海啸等不可抗力导致的网站完全瘫痪,某些大型网站会对整个数据 中心进行备份,全球范围内部署灾备数据中心。网站程序和数据实时同步到多个灾备数 据中心。


8 自动化

在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目 前大型网站的自动化架构设计主要集中在发布运维方面。

发布对网站都是头等大事,许多网站故障出在发布环节,网站工程师经常加班也是 因为发布不顺利。通过减少人为干预,使发布过程自动化可有效减少故障。发布过程包 括诸多环节。自动化代码管理,代码版本控制、代码分支创建合并等过程自动化,开发 工程师只要提交自己参与开发的产品代号,系统就会自动为其创建开发分支,后期会自 动进行代码合并;自动化测试,代码开发完成,提交测试后,系统自动将代码部署到测 试环境,启动自动化测试用例进行测试,向相关人员发送测试报告,向系统反馈测试结 果;自动化安全检测,安全检测工具通过对代码进行静态安全扫描及部署到安全测试环 境进行安全攻击测试,评估其安全性;最后进行自动化部署,将工程代码自动部署到线 上生产环境。

此外,网站在运行过程中可能会遇到各种问题:服务器宕机、程序Bug、存储空间不 足、突然爆发的访问高峰。网站需要对线上生产环境进行自动化监控,对服务器进行心 跳检测,并监控其各项性能指标和应用程序的关键数据指标。如果发现异常、超出预设 的阈值,就进行自动化报警,向相关人员发送报警信息,警告故障可能会发生。在检测 到故障发生后,系统会进行自动化失效转移,将失效的服务器从集群中隔离出去,不再 处理系统中的应用请求。待故障消除后,系统进行自动化失效恢复,重新启动服务,同 步数据保证数据的一致性。在网站遇到访问高峰,超出网站最大处理能力时,为了保证 整个网站的安全可用,还会进行自动化降级,通过拒绝部分请求及关闭部分不重要的服 务将系统负载降至一个安全的水平,必要时,还需要自动化分配资源,将空闲资源分配 给重要的服务,扩大其部署规模。


9 安全

互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也 积累了许多模式:通过密码和手机校验码进行身份认证;登录、交易等操作需要对网络 通信进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;为了防止 机器人程序滥用网络资源攻击网站,网站使用验证码进行识别;对于常见的用于攻击网 站的XSS攻击、SQL注入、进行编码转换等相应处理;对于垃圾信息、敏感信息进行过 滤;对交易转账等重要操作根据交易模式和交易信息进行风险控制。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大型网站架构演化 大型网站软件系统的特点 大型网站架构演化发展历程 初始阶段 应用服务和数据服务分离 使用缓存改善网站性能 缓存类型 本地缓存 分布式缓存 缓存产品 redis 业界主流 memcached 解决问题 数据库访问 使用应用服务器集群改善网站的并发处理能力 问题: 负载均衡情况下session状态的保持? 解决方案: 基于DNS的负载均衡 反向代理 ngix JK2 数据库的读写分离 问题: 读库与写库的数据同步 解决方案: 不同的数据库都有自己的数据库的主从复制功能 使用反向代理与CDN加速网站响应 反向代理产品 ngix 使用分布式文件系统和分布式数据库系统 使用no-sql和搜索引擎 站内搜索 lucene nutch 分词器 no-sql库 mongodb hadoop 业务拆分 web service restful 分布式服务 大型网站架构演化的价值观 核心价值:随网站所需灵活应对 驱动力量:网站的业务发展 网站架构设计误区 一味追随大公司的解决方案 为技术而技术 企图用技术解决一切问题 大型网站架构模式 架构模式 分层 分割 分布式 分布式应用和服务 分布式静态资源 分布式数据和存储 分布式计算 集群 缓存 CDN 反向代理 本地缓存 分布式缓存 异步 冗佘 冷备份 主从分离,实时同步实现热备份 灾备数据中心 自动化 发布过程自动化 ant maven. 自动化代码管理 svn cvs github 自动化测试 loadrunner hudson. 自动化安全测试 自动化部署 自动化报警 自动化失效转移 自动化失效恢复 自动化降级 自动化分配资源 安全 密码和手机校验码 数据库中的密码加密后存 -> 不可ni -> md5 加密 子主题 1 验证码 防止机器登录 对于攻击网站的XSS攻击,SQL注入,进行编码转换 对垃圾信息,敏感信息进行过滤 对交易转账等重要操作根据交易模式和交易信息进行风险控制 Sina微博的应用 大型网站架构要素 性能 可用性 伸缩性 扩展性 安全性 瞬时响应:网站的高性能架构 网站的性能测试 不同的视角 用户的视角 开发人员的视角 运维人员的视角 性能测试指标 响应时间 并发数 吞吐量 性能测试方法 性能测试 负载测试 压力测试 稳定性测试 web 前端性能优化 浏览器优化 减少http请求 使用浏览器缓存 启用压缩 css上,js下 减少cookie传输, 静态资源使用独立域名访问 CDN加速 反向代理 应用服务器性能优化 分布式缓存 缓存的原理 合理使用缓存 频繁修改的数据 没有热点的访问 数据不一致和脏读 缓存可用性 缓存预热 缓存穿透 缓存架构 jboss cache为代表的需要更新同步的分布式级缓存 以memcached为代表的不互相通信的分布式缓存 异步操作 使用集群 代码优化 多线程 资源复用 单例 对象池 数据结构 垃圾回收 存储性能优化 固态硬盘 RAID与HDFS 万无一失:网站的高可用性 高可性的度量与考核 度量 考核 高可用的网站架构 高可用的应用 高可用的服务 高可用的数据 CAP原理 数据备份 失效转移 高可用网站的软件质量保证 网站发布 自动化测试 预发布验证 代码控制 自动化发布 灰度发布 网站运行临控 临控数据采集 临控管理 永无止境:网站的可伸缩性 网站架构的伸缩性设计 不同功能进行物理分离实现伸缩 单一功能通过集群规模实现伸缩 应用服务器集群的伸缩性设计 http重定向负载均衡 DNS域名解析负载均衡 反向代理负载均衡 ip负载均衡 数据链路层负载均衡 负载均衡算法 分布式缓存集群的伸缩性设计 memcached分布式缓存集群的访问模型 memcached分布式缓存集群的伸缩性挑战 分布式缓存的一致性hash算法 数据存储服务器集群的伸缩性设计 关系数据库集群的伸缩性设计 nosql数据库的伸缩性设计 随需应变:网站的可扩展性 构建可扩展的网站架构 利用分布式消息队列降低系统耦合性 事件驱动架构 分布式消息队列 利用分布式服务打造可复用的业务平台 web service与企业级分布式服务 大型网站分布式服务的需求与特点 分布式服务框架设计 可扩展的数据结构 利用开放平台建设网站生态圈 固若金汤:网站的安全架构 网站应用攻击与防御 XSS攻击 反射型 持久型 防御方法 消毒 httponly 注入攻击 SQL注入攻击 攻击前提 获取数据库结构的方法 防御方法 消毒 参数绑定 OS注入攻击 CSRF攻击 防御方法 表单token 验证码 referer check 1. 网络流量统计 2. 防盗链 error code html注释 文件上传 web应用防火墙 modsecurity NEC的 siteshell 网站安全漏洞扫描 信息加密技术及密钥安全管理 案例: CSDN 信息加密技术分类 单项散列加密 对称加密 非对称加密 密钥安全管理 将密钥和算法放在一个独立的服务器上,对外提供加密和解密服务 密钥放在独立服务器中,算法放在应用程序中。 信息过滤与反垃圾 文本匹配_敏感词过滤 正则表达式 trie树 双数组trie树 多级Hash表 信息降噪 分类算法_内容识别 黑名单 电子商务风险控制 风险 账户风险 买家风险 卖家风险 交易风险 风控 人工 自动 规则引擎 统计模型 案例 网购秒杀系统架构 网购秒杀系统架构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值