早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。

主要环节

  • 业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信。
  • 集群化(应用服务器;基于RPC的微服务应用等)
  • LVS负载均衡,负责将请求转发给不同业务集群
  • 反向代理服务器,常用的如Nginx
  • 应用服务器,servlet容器,如tomcat
  • 应用和数据服务分离,分别部署在不同的服务器
  • 后端应用合理分层,通常分为表现层或网关层、业务逻辑层、数据持久层
  • 缓存。分为两种:本地缓存;分布式缓存
  • CDN化。静态内容部署到CDN,就近获取,加速网站响应。
  • 数据库读写分离。数据库采用主从热备,应用服务器在写数据时访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。
  • 分库分表,引入分布式数据框架
  • 引入NoSQL,支持海量数据存储
  • 借助elastics search等开源搜索引擎
  • 异步化,系统解耦。
  • 缩短业务流程,加快网站访问速度
  • 消除并发访问高峰

架构五要素:

  • 高性能
  • 可用性(Availability)
  • 伸缩性(Scalability)
  • 扩展性(Extensibility)
  • 安全性

1、高性能

性能的测试指标主要有:

  • 响应时间:指应用执行一个操作需要的时间
  • 并发数:指系统能够同时处理请求的数目
  • QPS:指单位时间内系统处理的请求量
  • 系统性能计数器:描述服务器或者操作系统性能的一些数据指标

性能优化,根据网站分层架构,可以分为三大类:

  • Web 前端性能优化
  • 减少 http 请求
  • 使用浏览器缓存
  • 启用压缩
  • CSS 放在页面最上面,JavaScript 放在页面最下面
  • 减少 Cookie 传输
  • 应用服务器性能优化:主要手段有 缓存、集群、异步
  • 多线程(设计为无状态,使用局部对象,并发访问资源使用锁)
  • 资源复用(单例,对象池)
  • 数据结构
  • 异步操作(消息队列,削峰作用)
  • 多台应用服务器组成一个集群共同对外服务,提高整体处理能力。
  • 使用 CDN,将网站静态内容分发至离用户最近的网络服务商机房,使用户通过最短访问路径获取数据。可以在网站机房部署反向代理服务器,缓存热点文件,加快请求响应速度,减轻应用服务器负载压力
  • 应用服务器端,可以使用服务器本地缓存和分布式缓存(网站性能优化第一定律:优化考虑使用缓存优化性能)
  • 代码层面,也可以通过使用多线程、改善内存管理等手段优化性能。
  • 数据库服务器端,索引、缓存、SQL 优化等性能优化手段
  • NoSQL 数据库通过优化数据模型、存储结构、伸缩特性等
  • 存储服务器性能优化
  • 机械硬盘 vs. 固态硬盘
  • B+ 树 vs. LSM 树
  • RAID vs. HDFS

2、高可用

高可用的网站架构:目的是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问,主要手段数据和服务的冗余备份及失效转移

  • 高可用的应用:显著特点是应用的无状态性
  • 通过负载均衡进行无状态服务的失效转移
  • 应用服务器集群的 Session 管理
  • 高可用的服务:无状态的服务,可使用类似负载均衡的失效转移策略,此外还有如下策略
  • 超时设置
  • 异步调用
  • 服务降级
  • 限流
  • 高可用的数据:主要手段是数据备份和失效转移机制
  • 失效确认
  • 访问转移
  • 数据恢复
  • 冷备:缺点是不能保证数据最终一致和数据可用性
  • 热备:分为异步热备和同步热备
  • 数据一致性(Consisitency)
  • 数据可用性(Availibility)
  • 分区耐受性(Partition Tolerance)
  • CAP 原理
  • 数据备份
  • 软件质量保证
  • 自动化测试
  • 预发布验证
  • 灰度发布
  • 网站实时监控
  • 警报系统
  • 自动优雅降级
  • 用户行为日志采集(服务器端和客户端)
  • 服务器性能监控
  • 监控数据采集
  • 监控管理

3、伸缩性

大型网站需要面对大量用户的高并发访问和存储海量数据,不可能只用一台服务器就处理全部用户请求,存储全部数据。网站通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。

对于应用服务器集群,只要服务器上不保存数据,所有服务器都是对等的,通过使用合适的负载均衡设备就可以向集群中不断加入服务器。

对于缓存服务器集群,加入新的服务器可能会导致缓存路由失效,进而导致集群中大部分缓存数据都无法访问。虽然缓存的数据可以通过数据库重新预热,但是如果应用已经严重依赖缓存,可能会导致整个网站崩溃。需要改进缓存路由算法保证缓存数据的可访问性。

关系数据库虽然支持数据复制,主从热备等机制,但是很难做到大规模集群的可伸缩性,因此关系数据库的集群伸缩性方案必须在数据库之外实现,通过路由分区等手段将部署有多个数据库的服务器组成一个集群。

至于大部分 NoSQL 数据库产品,由于其先天就是为海量数据而生,因此其对伸缩性的支持通常都非常好,可以做到在较少运维参与的情况下实现集群规模的线性伸缩。

概括起来伸缩性的分为如下几个方面:

  • 应用服务器集群的伸缩性设计
  • 轮询(Round Robin, RR)
  • 加权轮询(Weighted Round Robin, WRR)
  • 随机(Random)
  • 最少链接(Least Connections)
  • 源地址散列(Source Hashing)
  • DNS 域名解析负载均衡
  • 反向代理负载均衡(在 HTTP 协议层面,应用层负载均衡)
  • IP 负载均衡(在内核进程完成数据分发)
  • 数据链路层负载均衡(数据链路层修改 mac 地址,三角传输模式,LVS)
  • 分布式缓存集群的伸缩性设计
  • Memcached 客户端(包括 API,路由算法,服务器列表,通信模块)
  • Memcached 服务器集群
  • 分布式缓存的一致性 Hash 算法(一致性 Hash 环,虚拟层)
  • 数据存储服务集群的伸缩性设计
  • 关系数据库集群的伸缩性设计
  • NoSQL 数据库的伸缩性设计

4、可扩展

系统架构设计层面的“开闭原则”,构建可扩展的网站架构

  • 利用分布式消息队列降低耦合性
  • 分布式消息队列
  • 事件驱动架构(Event Driven Architecture)
  • 利用分布式服务打造可复用的业务平台
  • 分布式服务框架设计(Thrift,Dubbo)
  • 可扩展的数据结构(如 HBase的 ColumnFamily 设计)
  • 利用开放平台建设网站生态圈

5、网站的安全架构

XSS 攻击和 SQL 注入攻击是构成网站应用攻击最主要的两种手段,此外还包括 CSRF,Session 劫持等手段。

  • 攻击与防御
  • Error Code
  • 表单 Token
  • 验证码
  • jsonp请求的,Referer 校验
  • SQL 注入
  • html 危险字符转义
  • XSS 攻击:跨站点脚本攻击(Cross Site Script)

对js转义,使其失去执行功能,只作为纯字符串展示

  • CSRF 攻击:跨站点请求伪造(Cross Site Request Forgery)

防范:httpOnly;增加token校验;通过Referer识别。

  • 网站安全漏洞扫描

BAT架构师分享之:大型网站技术架构相关推荐

  1. 分布式架构实现概述(大型网站技术架构-读后感)

    分布式架构实现概述(大型网站技术架构-读后感) 主要包含4个篇章,第一篇介绍了网站的演化历程,大型网站架构的架构模式,开发大型网站应该具备的核心要素:第二篇主要围绕大型网站的具体架构实现方式进行讲解: ...

  2. 读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》

    大家好呀,我是小菜~ 帅哥美女,知道你们时间宝贵,那么就由小菜为你读好一本书,读一本好书,取其精华,与你共享~! 本文主要分享 <软件架构设计:大型网站技术架构与业务架构融合之道> 如有需 ...

  3. 大型网站技术架构(3):WEB 前端性能优化

    上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应用服务器 ...

  4. BAT架构师进阶:大型网站架构书籍推荐

    " 书籍推荐分为如下: 大型网站架构系列 分布式系统系列 BAT技术系列 架构设计系列 一:大型网站架构系列 第一本:<大型网站技术架构:核心原理与案例分析> 这本书主要从大型网 ...

  5. 《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

    来源:http://www.cnblogs.com/edisonchou/p/3862389.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  6. 读书笔记:大型网站技术架构-核心原理与案例分析

    李智慧<大型网站技术架构-核心原理与案例分析> 性能 可用性 伸缩性 扩展性 安全性 总结 这本书组织的很不错,语言精练,篇幅也不长,对网站架构的要点讲的狠清楚透彻,思路清晰.主要围绕架构 ...

  7. 读书笔记之 大型网站技术架构(核心原理与案例分析)

    前言 坚持看了十几天的书,终于完成了毕业后第一次静下心来,利用业务时间看书并做笔记的成就了.废话不多说,这回看的是一直很膜拜的李智慧大神写的大型网站技术架构-核心原理与案例分析. 简短的读后感 极其推 ...

  8. 软件架构设计 大型网站技术架构与业务架构融合之道

    前言 架构是一种综合能力,而不是某一方面的技能.也正因为如此,本书提供的是一个全面的解决方案.方法论.成体系的设计思维.因此,本书将从基础技术谈起,再到高层技术.再到业务.管理,提供一个架构能力的全局 ...

  9. 大型网站技术架构:核心原理与案例分析pdf

    下载地址:网盘下载 编辑推荐 编辑 本书作者是阿里巴巴网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历 ...

  10. 【阅】大型网站技术架构

    文章目录 前言 正文 后记 前言 <大型网站技术架构>,这是一本不仅有技术的技术书,从架构上讲解了一些通用技术,其中还进行了原理解释,还会讲到一些职场智慧,以及职业生涯规划. 对于大学生的 ...

最新文章

  1. 6个你必须知道的机器学习的革命性的教训
  2. Nature子刊:Neuropixels 探针单神经元分辨率的大规模神经记录
  3. git常见问题解决办法
  4. Lucene进阶操作,单字段、多字段和布尔搜索
  5. Java教程:SpringBoot常用配置
  6. LeetCode 2135. 统计追加字母可以获得的单词数(位运算+哈希)
  7. 优酷视频如何将地区设置为中国大陆
  8. UITableView 系列三 :分类显示和改变外观 (实例)
  9. dwz 之 IE下 页面加载完了却一直提示数据加载中,请稍等...
  10. 联想拯救者Y7000P win10+ubuntu20.04 双系统安装
  11. 程序员删库跑路案例之 —— 这家网站首页变图片
  12. 图谱实战 | 谈元鹏:电力领域知识图谱技术进展与应用实践
  13. 全球及中国阻力带行业市场前瞻及投资竞争力分析报告2022-2027年
  14. 数据库SQLite之嵌入式Linux实际网关项目使用初步
  15. 想学Python,这68个内置函数你一定要搞定!
  16. 使用JAVA调用热敏打印机接口实现打印功能
  17. 系统分析师---论软件的系统测试及应用
  18. 富而喜悦2023直播盛典 唐苓馨主题演说“特别的礼物”!
  19. 使用IO完善快递管理系统
  20. 布局AI+新药研发,深度智耀获红杉中国近1500万美元B轮融资

热门文章

  1. usaco Pollutant Control
  2. 【go】sdk + idea-plugin 开发工具安装
  3. C#利用lambda在函数中创建内部函数
  4. C++自动生成的成员函数
  5. The C10K problem原文翻译
  6. 何时使用margin和padding?
  7. C语言中字符数组和字符串指针分析
  8. 设计模式C#描述——单例与多例模式
  9. Request.ServerVariables获取环境变量
  10. 巧用CSS的Border属性