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

news/2024/5/13 22:25:15/文章来源:https://blog.csdn.net/weixin_34122548/article/details/85873349

转载请标明出处: 
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://www.luyixian.cn/news_show_716173.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 验证码不正确,dedecms织梦网站后台登录一直提示验证码不正确

原标题:dedecms织梦网站后台登录一直提示验证码不正确有时候我们在登陆织梦网站后台的时候,我们按照上面显示的验证码进行输入;但是后台一直不能登录成功,一直提示验证码不正确,就是登不进去,但是我明明输入…

html5购物网站前言,HTML5的结构和语义——前言(一)

HTML5的结构和语义——前言(一)2018年03月28日| 萬仟网IT编程| 我要评论超文本标记语言(HTML)5 第一次向HTML 中引入新的元素。新的结构元素包括aside、figure 和section。新的内联元素包括time、meter 和progress超文本标记语言(HTML)5 第一次向HTML 中引入新的元素。新的结构…

网站

------------------------- ------------------ 转载于:https://www.cnblogs.com/Ph-one/p/4734547.html

网站301跳转到新域名

2019独角兽企业重金招聘Python工程师标准>>> 经常有站长提问如何做网站301跳转? 网站301跳转中有一种特殊情况,用户网站更换了域名,但有不想浪费老域名带来的流量,于是就需要做一个跳转,将老网站域名跳转到新新网站域…

lvs+keepalived实现LB热备实现网站高可用

在lvs高负载中,LB节点(也就是常说的DR)会存在单点问题;这里使用了keepalived来解决单点问题;实现冗余; 看图操作; LB1:eth0:192.168.182.133 (vip:eth0:0 192.168.182.2…

大型网站架构之分布式消息队列

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务常用消息队列参考(推荐&am…

ASP.NET Core 一步步搭建个人网站(2)_一键部署和用户注册登录

俗话说,磨刀不费砍柴工。为了更方便的进行项目管理,我们先将个人网站项目配置一下,满足以下2个目标: VS2017中支持Git存储库,绑定Github项目,实现本地VS程序与线上Github一键代码提交和同步;搭建…

网站Web项目树形菜单的实现过程(ExtJS+SpringMVC+Spring+Hibernate+MySQL)

常见的OA或者bbs或者网站,左侧往往带有菜单,使用者就可以通过菜单项进入响应的功能模块或者板块或者专区,如下所示:PKU的BBS明显使用了ExtJS的海王星主题,而且使用的就是普通的tabPanel组件实现的菜单。如下图下图是Ex…

Linux配置虚拟网站主机

1.1 问题本例要求以案例1的结果为基础,通过httpd网站服务器实现虚拟主机的支持,完成下列任务: 1)修改 /etc/hosts 文件,临时解决DNS名称识别问题 在文件尾添加“Web服务器IP地址 tts8.tedu.cn ne.tedu.cn”内容2&#…

学python还是php_米凯seo: 到底是学Python、PHP还是Ruby?

编程语言种类繁多,每种语言都有它们的独特的优势。开发者在对编程语言的进行选择时往往很讲究。因此,这篇文章将从各个角度对 PHP、Ruby、Python 三种当前比较流行的语言的优势和劣势进行对比,希望你能从中受益。 在进入主题之前,…

专业团队:推荐一个网站,生成巨幅文字注释

通过学习本文的知识,你将可以在你的项目代码里创造大量的注释。让你的注释闪瞎团队所有人的钛合金X眼,我们是专业团队。 Console.WriteLine(" ██╗ ██╗ █████╗ ██╗ ████████╗███████╗██████╗ ██╗ …

学习python必备的学习网站

Django框架学习必备网站: 官方网站 https://www.djangoproject.com/1.11版英文文档 https://docs.djangoproject.com/en/1.11/1.11版中文文档 https://yiyibooks.cn/xx/Django_1.11.6/index.htmlDjango Book 教程 https://djangobook.com/Flask框架学习必备…

大型系统的java中间件实践_《大型网站系统与JAVA中间件实践》读书笔记-消息中间件...

消息中间件1.消息中间件的价值1.1 透过示例看消息中间件对应用的解耦1.1.1.通过服务调用让其他系统感知事件发生的方式假设我们要做一个用户登录系统,其中需要支持的一个功能是,用户登录成功 后发送一条短信到用户的手机,算是一个用户安全的选…

基于django的视频点播网站开发-step3-注册登录功能...

用户注册登录是一个网站的基本功能,django对这部分进行了很好的封装,我们只需要在django的基础上做些简单的修改就可以达到我们想要的效果。在本讲中,我们会用到user中的用户授权方面的一些函数,还会对django中的user进行扩展&…

vueweb端响应式布局_壹起航:三点看出响应式网站建设好不好

有许多人听说过响应式网站模板(yiqihang.cn),也有人没有听说过响应式网站,有人说响应式网站作用不错,有人说响应式网站没有都去了解过,不好说终究好不好。那么响应式网站建设有哪些优势和缺点呢,如何知道这个响应式网站…

java 开发适合开发什么网站_Java开发这必备的10个参考网站,学习效率直线飙升...

作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站。以下千锋广州Java小编收集的 Java 开发者必备的网站,这些网站可以提供信息、以及一些很棒的讲座 , 还能解答一般问题、面试问题等…

转:Chrome浏览器查看网站登录 Cookie 信息的方法

当我们使用自动签到等程序的时候一般都要用到网站Cookie,我们可以借助浏览器的扩展来获取Cookie信息,但其实通过浏览器本身的功能就可以查看Cookie信息。以Chrome类浏览器为例有以下三种方法。 chrome浏览器: 方法一: 1.打开设…

php seo技巧,十个对排名最有效的SEO​技巧

十个对排名最有效的SEO技巧。做网站排名的人都知道,一个网站能否达到设定的排名值是需要许多的技巧,这些SEO的技巧对于网站的排名来说有着不可替代的作用,在平时的优化当中细细留心,一定会对网站的排名优化有所帮助!第一&#xff…

2017-11-28 在线编程网站对中文代码的支持

参考哪些比较好的在线编程网站?, 测试各个网站对中文命名的代码的支持, 包括调试信息等(见向LeetCode报告编译信息中Unicode显示问题). 有趣的是, 在范围有限的评测中, 国产的在线编程网站似乎对中文命名的代码普遍支持更好. 不知开发者是否对这个功能有特别的关注,…

第14.3节 使用google浏览器获取网站访问的http信息

为了简单处理,本次介绍的内容是基于网站已经登录的情况下去获取网页访问的http信息。 首先需要使用谷歌浏览器登录指定网站,并访问需要爬取的网页,如老猿使用谷歌浏览器登录csdn,并访问老猿Python的主页:https://blog.…