文档章节

漫谈《大型网站技术架构》

j
 jredream
发布于 2017/04/07 15:37
字数 2076
阅读 29
收藏 2
点赞 0
评论 0

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。

目录(?)[+]

转载请标明出处: 
http://blog.csdn.net/forezp/article/details/69196483 
本文出自方志朋的博客

本文的内容来自阿里巴巴员工李智慧的著作《大型网站技术架构 核心原理与案例分析》,这本书很值得一看,故整理之。

一、大型网站的架构演化

1.1 大型网站软件的特点

  • 高并发、大流量
  • 高可用:系统7*24小时不间断提供服务
  • 海量数据
  • 用户分布广泛
  • 安全环境恶劣
  • 需求变更快,发布频繁
  • 渐进式发展

1.2 大型网站架构演化发展历程

  • 初始阶段的网站架构:例如 LAMP 架构
  • 应用和数据服务分离:三台服务器:应用服务器,文件服务器和数据库服务器
  • 使用缓存改善网站性能:分为两种,缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器的远程缓存
  • 使用应用服务器集群改善网站并发处理能力:通过负载均衡调度服务器来分发请求到应用服务器集群中的任何一台机器
  • 数据库读写分离: 主写从读。
  • 使用反向代理和 CDN 加速网站响应:这两者基本原理都是缓存。反向代理部署在网站的中心机房,CDN 部署在网络提供商的机房。
  • 使用分布式文件系统和分布式数据库系统: 将不同的业务分布,将不同的业务的数据库部署在不同的机器上。
  • 使用 NoSQL 和搜索引擎: 源自互联网技术,对可伸缩的分布式有更好的支持。
  • 业务拆分:将整个网站通过分而治之的手段将网站业务分成不同的产品线。
  • 分布式服务: 比如最近流行的微服务,横行、纵向切片,将服务集群化,相互关联化。

架构设计_分布式服务.png

1.3 大型网站架构演化的价值观

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

1.4 网站架构设计误区

  • 一味追随大公司的解决方案
  • 为了技术而技术
  • 企图用技术解决所有问题

二、大型网站架构模式

2.1 网站架构模式

  • 分层
  • 分割
  • 分布式 
    • 分布式应用和服务
    • 分布式静态资源
    • 分布式数据和存储
    • 分布式计算
  • 集群
  • 缓存 
    • Cdn
    • 反向代理
    • 本地缓存
    • 分布式缓存
  • 异步 
    • 提供系统可用性
    • 加快网站响应速度
    • 消除高并发访问高峰
  • 冗余 服务器冗余运行,数据库冗余备份
  • 自动化
  • 安全 : 防止XSS攻击、sql注入

三、大型网站核心架构要素

  • 性能
  • 可用性
  • 伸缩性 不断地向服务器集群加服务器
  • 扩张性

四、瞬时响应:网站的高性能架构

4.1 网站性能测试

  • 不同视角下网站的性能 
    • 用户视角网站性能 响应时间
    • 开发人员视角的网站性能 响应时间、并发亮
    • 运维人员视角的网站性能 资源
  • 性能测试指标 
    • 响应时间
    • 并发数
    • 吞吐量 qps tps hps
    • 性能计数器
  • 性能测试方法 
    • 性能测试
    • 负载测试
    • 压力测试
    • 稳定性测试
  • 性能测试报告
  • 性能优化策略 
    • 性能分析
    • 性能优化

4.2 web前端性能优化

  • 浏览器访问优化 
    • 减少http请求
    • 使用浏览器缓存
    • 启用压缩
    • css放在网页最上面 js最下面
    • 减少cookie传输
  • CDN加速。(content distribute network)
  • 反向代理

4.3 应用服务器性能优化

  • 分布式缓存 
    • 缓存的基本原理
    • 合理的使用缓存 
      • 频繁修改数据
      • 没有热点的访问
      • 数据不一致与脏读
      • 缓存可用性
      • 缓存预热
      • 缓存穿透 缓存不存在,直接访问数据库
    • 分布式缓存架构
    • Memcached
  • 异步操作
  • 使用集群
  • 代码优化 
    • 多线程
    • 资源复用
    • 数据结构
    • 垃圾回收

4.4 存储性能优化

  • 机械硬盘 vs. 固态硬盘
  • B+ 树 vs. LSM 树
  • RAID vs. HDFS

五、万无一失:网站的高可用架构

5.1 网站可用性的度量和考核

  • 网站可行性度量
  • 网站可用性考核

5.2 高可用的网站架构

5.3 高可用的应用

  • 通过负载均衡进行无状态服务的失效转移
  • 应用服务器集群的session管理 
    • session复制
    • session绑定
    • 利用cookie记录 session
    • session服务器

5.4 高可用的应用

  • 分级管理
  • 超时设置
  • 异步调用
  • 服务降级 随机拒绝访问(twitter)
  • 幂等性设计

5.5 高可用的数据

  • CAP原理 
    • 数据持久性
    • 数据可访问性
    • 数据一致性 
      • 数据强一致性
      • 数据用户一致性
      • 数据最终一致性
  • 数据备份
  • 失效转移 
    • 失效确认
    • 访问转移
    • 数据恢复

5.6 高可用软件质量保障

  • 网站发布
  • 自动化测试
  • 预发布验证
  • 代码控制 
    • 主干开发,分支发布
    • 分支开发,主干发布
  • 自动化发布
  • 灰度发布

5.7 网站运行监控

  • 监控数据采集 
    • 用户行为日志收集
    • 服务器性能检测
    • 运行数据报告
  • 监控管理 
    • 系统报警
    • 失效转移
    • 自动优雅降级

六、永无止尽:网站的伸缩性架构

6.1 网站伸缩性设计

  • 不同功能进行物理分离实现伸缩
  • 单一功能通过集群实现伸缩

6.2 应用服务器集群伸缩设计

  • http重定向负载均衡
  • Dns域名解析负载均衡
  • 反向代理负载均衡
  • ip负载均衡
  • 数据链路层负载均衡
  • 负载均衡算法 
    • 轮询
    • 加权轮询
    • 随机
    • 最少链接
    • 原地址散列

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

  • Memcached分布式缓存集群的访问模型
  • Memcached分布式缓存集群的伸缩性挑战
  • 分布式缓存的一致性hash算法

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

  • 关系数据库集群的伸缩性设计
  • Nosql数据库的伸缩性设计

七、随机应变:网站的可扩展性架构

7.1 构建可扩展性的网站架构

7.2 利用分布式消息队列降低系统耦合性

  • 事件驱动架构
  • 分布式消息队列

7.3 利用分布式服务打造可复用的业务平台

  • web service与企业级分布式服务
  • 大型网站分布式服务的需求与特点 
    • 负载均衡
    • 失效转移
    • 高效的远程通信
    • 整合异构系统
    • 对应用最少侵入
    • 版本控制
    • 实时监控
  • 分布式服务框架设计

7.4 可扩展的数据结构

7.5 利用开放平台建设网站生态圈

  • api接口
  • 协议转移
  • 安全
  • 审计
  • 路由
  • 流程

8、固若金汤:网站的安全架构

8.1 道高一尺魔高一丈的网站应用攻击与防御

  • xss攻击 
    • 消毒
    • httponly
  • 注入攻击 
    • 开源
    • 错误回显
    • 盲注
    • 消毒
    • 参数绑定
  • csrf攻击 
    • 表单token
    • 验证码
    • referer check
  • 其他攻击和漏洞 
    • error code
    • html注释
    • 文件上传
    • 路径遍历
  • web应用防火墙
  • 网站安全漏洞扫描

8.2 信息加密技术及密钥安全管理

  • 单向散列加密
  • 对称加密
  • 非对称加密
  • 密钥安全管理

8.3 信息过滤与反垃圾

  • 文本匹配
  • 分类算法
  • 黑名单

8.4 电子商务风险控制

  • 风险 
    • 账号风险
    • 买家风险
    • 卖家风险
    • 交易风险
  • 风控 
    • 规则引擎
    • 统计模型

本文转载自:http://blog.csdn.net/forezp/article/details/69196483 

共有 人打赏支持
j
粉丝 1
博文 12
码字总数 2581
作品 0
海淀
架构学习资料汇总

知名网站架构分析 探索Google App Engine背后的奥秘(1)–Google的核心技术 探索Google App Engine背后的奥秘(2)–Google的整体架构猜想 探索Google App Engine背后的奥秘(3)- Google App Eng...

peter8015
2016/04/22
186
0
D瓜哥分享的架构资料

扯扯蛋 以前见过零零散散地介绍一些知名网站架构的分析文章。最近D瓜哥也想研究一下各大知名网站的架构。所以,就搜集了一下这方面资料。限于时间问题,这篇文章分享的文章并没有都看完,所以...

hejunbinlan
2015/09/06
209
2
聊聊架构_Index

架构漫谈 【读后有感】架构漫谈(一):什么是架构? 【读后有感】架构漫谈(二):认识概念是理解架构的基础 【读后有感】架构漫谈(三):如何做好架构之识别问题 【读后有感】架构漫谈(四...

陶邦仁
2016/02/19
211
0
史上最全互联网分布式缓存技术视频教程(redis、memcached、ssdb)

课程主讲: 互联网应用高级架构师 白贺翔 涉及技术: Redis、SSDB、Memcached课程描述: 介绍互联网分布式技术的重要性、背景、应用范围;目前互联网行业使用分布式缓存进行设计的比例,以及...

2846613430
2016/04/19
747
0
DNS安全漫谈:谁来拯救脆弱的DNS?

DNS是网络应用的基础设施,它的安全性对于互联网的安全有着举足轻重的影响。对于经常使用电脑或者信息设备的人来说,经常会在网络设置中看到DNS。但是对于普通大众来说,DNS是非常陌生的。而...

DNSPod官方
2014/02/27
0
0
Android 架构文章--Awesome-Android-Architecture

Android 架构文章合集 携程 携程Mobile架构演化(视频) 携程Android App插件化和动态加载实践 阿里 陶钧谈淘宝客户端应用框架实践 QCon旧金山演讲总结:阿里无线技术架构演进 手机淘宝构架演化...

Juude
2016/01/07
1K
0
大型站点高并发架构技术

大型站点高并发架构技术 高并发: 高并发主要是由于网站PV访问量大,单台服务器涌承载大量访问所带来的压力,所以会采用多台服务器进行分流,采用服务器集群技术,对于每个访问会被发送到哪台...

浮躁的码农
01/15
0
0
大型网站架构技术的核心价值是随网站所需灵活应对

大型网站架构的核心价值不是从无到有搭建一个大型网站,而是能够伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站。在这个漫长的技术演化过程中,不需要放弃什么,不需要推翻什么,不需...

凯文加内特
2016/01/14
111
2
大型网站架构系列:20本技术书籍推荐

学习是技术人员成长的基础,本次分享20本技术方面的书籍,这些书不是每一本都是经典,但是每一本都有其特点。以下20本大部分本人都看过,因此推荐给大家。(本次推荐的20本只是一个参考,比如...

xumaojun
05/03
0
0
北京尚学堂|漫谈Java和PHP

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。 比较 PHP和JSP这两个Web开发技术,在目前的情况是其实是Java比较明显占有优势。以下是我就几个主要方面进行的比较: 一、 语言比较...

SXTkaifa
2016/11/23
12
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python以太坊类库web3.py概览

python通过web3.py库与以太坊交互共同入口是web3对象。web3对象提供API接口,python开发应用与以太坊进行交互如钱包创建、支付、转账等连接JSON-RPC服务器进行。 Providers提供者 Providers使...

智能合约
1分钟前
0
0
【Android学习笔记】设置App启动页

先将启动页放到项目资源中,图片一般是1080*1920的jpg。 新建一个activity,如图: 创建成功之后,打开刚刚创建的activity,来进行代码的编写: >>>阅读全文

全部原谅
3分钟前
0
0
什么是React-redux、为什么使用React-redux、怎么使用React-redux

1、什么是React-redux React-redux是用于连接React和Redux的 2、为什么使用React-redux 使用React-redux可以使redux部分代码更简洁更明了,比如组建中需要使用到的数据都在mapStateToProps方...

kimyeongnam
5分钟前
0
0
Spring核心——Stereotype组件与Bean扫描

在注解自动装载中介绍了通过注解(Annotation)自动向Bean中注入其他Bean的方法,本篇将介绍通过注解(Annotation)向容器添加Bean的方法。 Spring的核心容器提供了@Component和@Bean注解来标...

随风溜达的向日葵
5分钟前
0
0
利用世界杯,读懂 Python 装饰器

Python 装饰器是在面试过程高频被问到的问题,装饰器也是一个非常好用的特性, 熟练掌握装饰器会让你的编程思路更加宽广,程序也更加 pythonic。 今天就结合最近的世界杯带大家理解下装饰器。...

猫咪编程
9分钟前
0
0
flink fold example

flink fold例子 import org.apache.flink.api.common.functions.*;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.environment.S......

coord
10分钟前
0
0
c++ qt 组播总结

每个人都有不同的认知规律和习惯, 有的人喜欢搞一套严密的大理论, 论述起来滔滔不绝, 不管自己懂不懂, 反正读者/听者是没搞懂。 有的人喜欢从实践出发, 没看到代码, 不运行一下, 不看...

backtrackx
14分钟前
0
0
Sublime text2安装json格式化插件SublimePrettyJson[Windows]

一、下载SublimePrettyJson插件包 https://github.com/dzhibas/SublimePrettyJson 二、将下载的文件解压放到在package目录下面 C:\Users\lucky\AppData\Roaming\Sublime Text 3\Packages 每个......

lazy~
14分钟前
0
0
安装vue-cli 报4058错误

1. 4058是网络代理错误。 安装淘宝源修改一下就可以了: npm --registry https://registry.npm.taobao.org info underscore 改为cnpm执行: cnpm install --global vue-cli 安装成功: 试试版...

MrBoyce
16分钟前
0
0
CPU飙升分析

1、top -----看具体的进程 2、top -H -p pid ------该进程的线程 3、printf 0x%x 15248 ------将线程改为16进制 4、jstack 进程...

北极之北
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部