读发布!设计与部署稳定的分布式系统(第2版)笔记08_自黑与放大

news2024/11/16 9:18:03

 

1. 自黑式攻击

1.1. 自黑只会偶尔成为人类的美德

1.2. 对系统来说,绝对不会推崇自黑

1.3. “自黑式攻击”是指系统或有人类参与的扩展系统联合外部对自身发起攻击

1.4. 好的营销可以随时杀死你

1.4.1. 并不是每个自黑的“伤口”,都可以归咎于营销部门

1.5. 典型例子

1.5.1. 公司市场部发出的致“精选用户组”的一份邮件

1.5.2. 该邮件包含一些特权或优惠信息,其复制速度比木马病毒快得多

1.5.3. 定价错误使得一个SKU的订购次数等于其他所有产品的订购总数

1.5.4. 在基于ATG的基础设施中,锁管理器总是会处理分布式锁管理,以确保缓存的一致性

1.5.4.1. 锁管理器资源只有一个,随着网站横向扩展,锁管理器会成为瓶颈,并且最终会成为风险

1.5.4.2. 如果一个热门项目被无意修改,最终就可能会导致数以百计的服务器上出现数千个请求处理的线程,都在排队等待该项目的写入锁

2. 共享资源

2.1. 以面向服务的架构或“公共服务”项目为幌子,共享资源会成为水平扩展层级所有成员都需要使用的某个设施

2.2. 可以是集群管理器或锁管理器

2.3. 当共享资源流量过载时,它会成为限制系统容量的瓶颈

2.4. 当共享资源有冗余且是非独占的时,就没有问题

2.4.1. 可以同时为多个消费者提供服务

2.5. 最具扩展性的架构是无共享架构

2.5.1. 在无共享架构中,系统容量与服务器的数量几乎呈线性关系

2.5.2. 无共享架构的问题在于,它会牺牲故障转移来获得更好的扩展性

2.5.3. 通过减少共享资源的扇入个数,可以近似实现无共享架构,即减少调用共享资源的服务器

3. 避免自黑式攻击

3.1. 构建无共享架构

3.1.1. 在无共享架构中,每台服务器在不知道任何其他服务器的情况下,仍然能够运行

3.1.2. 服务器不共享数据库、集群管理器或任何其他资源,这是水平扩展的理想状态

3.1.3. 通过中间件模式减少过量请求造成的影响,或尽量通过冗余和后端同步协议,实现共享资源本身的水平扩展

3.1.4. 当共享资源不可用或没有响应时,还可以为系统设计一个后备模式

3.1.5. 如果提供悲观锁的锁管理器不可用,那么应用程序可以进入后备模式并使用乐观锁

3.2. 保护共享资源

3.2.1. 当流量激增时,编程错误、意外的放大效应和共享资源都会产生风险

3.2.2. 前端负载的增加,会导致后端处理量呈指数级增长

3.3. 预留一部分基础设施,或整备一些新的云资源,用于应对商业促销或流量激增

3.4. 当访问流量激增时,可以使用自动化扩展技术

3.4.1. 注意服务器启动的延迟时间

3.5. 保持沟通渠道畅通

3.5.1. 应对人为的攻击,关键在于培训、教育和沟通

3.6. 快速地重新分配实惠的优惠

3.6.1. 任何一个认为能限量发布特惠商品的人,都在自找麻烦

3.6.2. 根本就没有限量分配这回事

3.6.3. 即使限制了一个超划算的特惠商品可以购买的次数,系统仍然会崩溃

4. 放大效应

4.1. 生物学中的平方-立方定律

4.1.1. 虫子的重量随着体积增加而增加,符合时间复杂度O(n^3)

4.1.2. 虫子的腿部力量会随腿的横截面积的增加而增加,符合时间复杂度O(n^2)

4.1.3. 如果让虫子增大为原来的10倍,那么变大后的虫子的“力量与体重”之比就会变成原来的1/10

4.1.4. 虫子的腿根本支撑不了10倍大的个头

4.2. “多对一”或“多对少”的关系

4.2.1. 如果这个关系中一方的规模增大,另一方就会受到放大效应的影响

4.2.2. 由于开发环境和测试环境的规模很少会与生产环境一致,因此很难在前两个环境中,看到放大效应跳出来“咬人”

4.2.3. 1台数据库服务器被10台机器调用时,可以很好地运行

4.2.4. 调用它的机器数量再额外添加50台时,数据库服务器就可能会崩溃

5. 点对点通信

5.1. 放大效应“咬人最凶”的情况

5.2. 当只有一两个实例进行通信时,机器之间的点对点通信可能工作得很好

5.3. 每个实例必须直接与其他实例进行沟通,连接的总数,会以实例数量平方的数量级上升

5.4. 连接数会扩展到时间复杂度O(n^2)

5.5. 务必将单个服务内的点对点通信,与服务之间的点对点通信区分开

5.6. 除非是微软或谷歌这样的公司,其他公司不可能构建与生产环境相同大小的测试农场

5.6.1. 这种类型的软件缺陷是不可能被测试出来的,必须通过设计来避免

5.6.2. 参照测试环境检查生产环境,以发现放大效应

5.7. 替换方式

5.7.1. UDP广播

5.7.1.1. 广播能够应对服务器数量的不断增长,但它不节省带宽

5.7.1.2. 与广播消息不相关的服务器产生一些额外的负载

5.7.2. TCP或UDP组播

5.7.2.1. 只允许相关的服务器接收消息,传送效率更高

5.7.3. 发布-订阅消息传递

5.7.3.1. 服务器在消息发送的那一刻没有监听,也可以收到消息

5.7.3.2. 传递的效率也较高

5.7.3.3. 通常会让基础设施成本大增

5.7.4. 消息队列

5.7.5. 在所有可行的方案中,选择最简单的那个来做

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<C++> C++11新的类功能

C11新的类功能 1.默认成员函数 原来C类中,有6个默认成员函数: 构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const取地址重载 最后重要的是前4个,后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。 C11 新增了两个…

Uniapp 开发 ①(快速上手)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…

Vue3在工作中使用的一些经验总结

1、隐藏el-tab-pane 设置隐藏 2、Vue中ref的使用 3、Vue中的api 4、component: () > import(‘/views/order/orderDetail‘), 5、ids selections.map((i) > i.ruleId); 6、路由配置的三种方式 项目中使用到的 7、Vue3新特性 8、template在Vue中的作用 9、…

电脑装机后使用Administrator作为电脑账号

目录标题 1 搜索cmd使用管理员权限运行(因为直接winr无法用权限打开)2 输入net user administrator /active:yes,之后系统会提示命令完成,通过这个指令就是让系统默认账户administrator成为超级管理员,方便接下来的操作…

学习mysql

Mysql SQL语言的规则与规范SQL大小写规范注释数据导入指令 基本的SELECT语句SELECT.列的别名去掉重复行空值参与运算着重号(当有表名是关键字时)显示表结构where 运算符算术运算符 比较运算符号性运算符非符号形运算符空运算符非空运算符最小值运算符最大值运算符BETWEEN AND运…

python处理Excel Pandas xlwings numpy, jupyter,docx,jieba 词频统计 flash

# 批量创建Excel import xlwings # xw.App(visibleTrue,add_bookTrue) 会打开Excel,且不会自动关闭 # xw.App(visibleTrue,add_bookTrue) 会打开Excel,但一晃就自动关闭了 app xlwings.App(visibleTrue, add_bookFalse) for language in [Java, Pyt…

C++——set/multiset再理解

目录 1. 关联式容器 2. 键值对 3. 树形结构的关联式容器 4. set容器 4.1 set的介绍 4.2 set的使用 5. multiset 5.1 multiset的介绍 5.2 mutiset的使用 1. 关联式容器 先前我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_…

边缘计算技术主要有哪几种?如何应用在实际场景中?

边缘计算是一种新的计算架构,它将计算资源移动到靠近终端用户的边缘设备中,以实现更快、更可靠、更安全的数据传输和处理。边缘AI智能则是指将人工智能算法和模型部署到边缘设备上,使其能够在设备本身上执行计算和决策,而不需要发…

【unity每日一记】资源和场景加载图文详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器…

Netty的零拷贝

技术主题 netty本质上就是一款优秀的网络编程框架,凭借自己基于NIO编程,零拷贝等技术细节, 技术原理 零拷贝机制(zero-copy)是在操作数据时不需要将数据从一块内存复制到另一块内存区域的技术,这样就避免…

Docker学习笔记1

PaaS: 一、虚拟化分类: 虚拟化资源提供者: 1)硬件平台虚拟化 2)操作系统虚拟化 虚拟化实现方式: type I: 半虚拟化 type II:硬件辅助全虚拟化 type III: 软件全虚拟化: …

【编译、链接、装载十】可执行文件的装载与进程

【编译、链接、装载十】可执行文件的装载与进程 一、进程虚拟地址空间1、demo 二、装载的方式1、分页(Paging)2、 页映射 三、从操作系统角度看可执行文件的装载1、进程的建立2、页错误 四、进程虚存空间分布1、ELF文件链接视图和执行视图2、堆和栈 一、…

mdk下堆栈地址相关的知识梳理

mdk中,堆栈地址范围不像在gcc工程中那么容易看出来。过程被mdk隐藏了,单纯从代码层面不好看出来。但是基本的流程是这样的:先确定代码其他部分使用RAM的情况,然后紧跟着已使用的RAM地址,在剩下的RAM地址中分配Stack_Si…

2023 年6月开发者调查统计结果——最流行的技术(1)

2023 年6月开发者调查统计结果——最流行的技术(1) 本文目录: 一、编程、脚本和标记语言 二、数据库 三、云平台 四、网络框架和技术 五、其他框架和库 六、其他工具 七、集成开发环境 八、异步工具 九、同步工具 ​十、操作系统 …

如何在医药行业运用IPD?

医药是关于人类同疾病作斗争和增进健康的科学。它的对象是社会的人。因此,医学与社会科学、医学伦理学具有密切关系。广义的医药行业分为医药工业、医药商业和医疗服务业三大组成部分,其中医药工业包括化学药制剂、原料药、中药饮片、中成药、生物药品、…

chatgpt赋能python:Python有宏定义吗?深入探究

Python有宏定义吗?深入探究 Python语言的高效性以及方便编程的语法,使其成为众多程序员的首选语言。而在编写代码的过程中,宏定义是一个非常有用的编程工具,可以帮助程序员简化代码、提高代码的可读性和可维护性。那么&#xff0…

chatgpt赋能python:Python构造器重载-介绍、实践与准则

Python构造器重载 - 介绍、实践与准则 Python是一种动态强类型编程语言,它支持基于对象的编程范例,这意味着对象被认为是Pyhon编程中的核心概念,同时Python在该领域也有广泛的应用。对于任何一个对象类型,一个类至少需要有一个构造器——它是…

【架构】业务中台应用架构

文章目录 一、什么是业务中台二、为什么需要业务中台三、对于业务中台的认知3.1、微服务不是业务中台3.2、业务中台不是前台应用3.3、业务中台是通用业务机制的实现 一、什么是业务中台 业务中台是以业务领域划分边界,形成高内聚、低耦合的面向业务领域的能力中心&…

SpringCloudAlibaba之Nacos安装指南

SpringCloudAlibaba之Nacos安装指南 文章目录 SpringCloudAlibaba之Nacos安装指南1.Windows安装1.1.下载安装包1.2.解压1.3.端口配置1.4.启动1.5.访问1.6.报错 2.Linux安装2.1.安装JDK2.2.上传安装包2.3.解压2.4.端口配置2.5.启动、关闭 3.Nacos的依赖 1.Windows安装 开发阶段…