读发布!设计与部署稳定的分布式系统(第2版)笔记06_用户

news2024/11/27 8:37:08

 

1. 系统的人类用户天生就具备进行创造性破坏的本事

1.1. 用户会消耗内存

1.2. 用户会做奇怪和随机的事情

1.2.1. fuzzing工具箱、基于属性的测试或模拟测试

1.3. 恶意用户总是存在的

1.3.1. 灾祸总会发生,坏人肯定存在

1.4. 用户会合伙对付你

2. 难伺候的用户

2.1. 通常就是想挣这些挑剔用户兜里的钱

2.2. 提高用户转化率或许能让公司的损益表更好看些,但这确实给系统增加了实现难度

2.3. 最好针对这些难伺候的用户积极地进行测试

2.3.1. 确定系统开销最大的事务,然后将这些事务的份额增加1~3倍

2.3.2. 系统平时承受的平均压力,肯定会小于上述负载测试产生的压力

2.3.3. 单单构建系统并处理系统最昂贵的事务这一件事,就会在硬件上多花费10倍的成本

3. 不受欢迎的用户

3.1. cookie是一种明智的选择

3.1.1. 未加密的cookie数据可能会被恶意顾客操纵

3.1.2. 安全性要求cookie不能包含实际数据,否则就必须加密

3.1.3. cookie开始用于小块数据,只能用持久cookie标记用户,或用临时cookie识别会话

3.2. 恶意用户

3.2.1. 真正有“才华”的黑客

3.2.1.1. 高级持久威胁

3.2.2. 脚本小子

3.2.2.1. 数量庞大而非常危险

4. 容量

4.1. 是指在给定工作负载下,系统既能保持提供可接受的性能,又能承受得住的最大吞吐量

4.2. 不断增长的用户流量最终将超过系统的容量

4.3. 裂纹在压力的作用下总是会蔓延得更快

5. 堆内存

5.1. 放入会话的每个对象都位于内存中,占用着能为其他用户提供服务的宝贵字节

5.1.1. 最好尽可能少地保留内存中的会话

5.1.2. 对于放入会话的每一份数据,都要考虑它是否可能永远不会再使用

5.1.3. 这些数据可能在接下来的30分钟里白白地占用内存,并使系统面临危险

5.2. 如果情况非常糟糕,日志系统甚至可能无法记录错误

5.3. 如果系统没有创建日志事件的内存,则不会记录任何内容

5.4. 存在这种可能,所以除了日志文件抓取之外,应该还需要做外部监控

5.5. 弱引用

5.5.1. 能够在内存富裕时保存会话内容(也就是在内存中),在内存紧张时自动节约内存

5.5.2. 垃圾收集器需要回收内存之前,弱引用都可以持有另一个对象,后者称为前者的有效载荷

5.5.2.1. 当该对象的引用只剩下软引用时,则软引用就可以被回收

5.5.2.2. 在创建弱引用对象时,可以将大型或昂贵的对象作为其有效载荷

5.5.2.3. 垃圾回收对象都是有效载荷,而不是弱引用本身

5.5.3. C#中叫System.WeakReference

5.5.4. Java中叫java.lang.ref.SoftReference

5.5.5. Python中叫weakref

5.5.6. 当内存不足时,垃圾收集器可以回收任何弱可达对象

5.5.7. 弱引用是应对不断变化的内存环境的有用方式,但也确实增加了复杂性

6. 堆外内存和主机外内存

6.1. 将内存分配给不同的进程

6.1.1. 不要将它放在堆内,即不要放在服务器进程的地址空间内,而是将其移交给其他进程

6.2. Memcached就是使用这种方法的一个很好的工具,它本质上是一个内存中的键-值存储,可以将其放在不同的机器上,也可以将其散布在多台机器上

6.3. Redis是将内存移出进程的另一个流行工具。它是一种快速的“数据结构服务器”,其定位介乎缓存和数据库之间

6.4. 在可寻址的内存空间和内存访问延迟之间进行权衡

6.5. 存储器层次根据大小和距离排列,寄存器是最快和最接近CPU的,其次是缓存,然后是局部存储器、磁盘、磁带等

6.6. 网络变得相当快——访问“别人内存”的速度快于访问本地磁盘的速度

6.6.1. 应用程序最好通过远程调用获取一个值,而不是从存储中读取值

6.6.2. 局部存储器仍然比远程存储器更快

6.6.3. 一对矛盾

7. 服务器上的套接字

7.1. 查看TCP数据包的格式,就能看到端口号长16位,这表示端口号最大只能到65535

7.2. 互联网数字分配机构的建议范围是49152~65535

7.2.1. 服务器最多可以打开16383个连接

7.2.2. 可以将端口范围扩展为1024~65535

7.2.2.1. 最多可以有64511个连接

7.3. 虚拟IP地址

7.3.1. 操作系统将多个IP地址绑定到同一个网络接口

7.3.2. 每个IP地址都有自己的端口号范围

7.3.3. 要处理上百万个连接,总共只需要16个IP地址

7.3.3.1. 需要很多内核缓冲区

7.4. 已经关闭的套接字

7.4.1. 在应用程序代码关闭一个套接字后,TCP协议栈会多次改变其终结状态

7.4.2. TIME_WAIT

7.4.2.1. 可以调小TIME_WAIT间隔,尽快恢复使用这些端口

7.4.3. bogon是指游荡的数据包

7.4.3.1. 互联网上的bogon是一个真实但影响较小的问题

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

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

相关文章

【linux】opencv修改摄像头分辨率

起因 发现linux系统下调用opencv修改摄像头分辨率,一直修改不成功。 原本 正常在window下面读取摄像头数据是如下代码: # capture from web camcap cv2.VideoCapture(0)# set widthcap.set(3, 1280)# set heightcap.set(4, 720)while self._run_flag…

武职302303笔记-day01

这里写自定义目录标题 开发永和小票开发步骤1、对页面进行需求分析 使用CSS的方式 Order.html问题:html代码和css样式代码交织 idea开发后端程序使用chatGPT给我们打工QRCreate.java 开发永和小票 开发步骤 1、对页面进行需求分析 页面是很多文字组成,…

虹科分享丨如何保证我们的数据安全?|数据保护

一、数据安全 你可能已经正在寻找加密服务来帮助保护你的组织的数据,但如果你是一个不熟悉实践或管理数据的人员,"数据加密 "这个短语可能会感觉像技术术语或只是像一个模糊的概念,没有具体的解决方案。 但事实上,数据…

git、axios、模块化导出引入、promise、webpack、

GIT总结 git config --global user.name "你的用户名" git config --global user.email "你的邮箱" git config -l 命令来查看配置信息 git init 仓库初始化 touch index.html 创建index.html文件 git add index.html 文件加入暂存区 git add -A 将全部文件…

车载以太网 - 网络层 - IPv4/IPv6

目录 一、网络层基本信息介绍 1、网络协议适用范围 2、IPv4和IPv6的地址 3、Ethernet Frames 的类型 二、两种类型IP地址的定义: ECU通信的几种方式 路由器(Router)和IP 地址的概念 路由实例介绍 三、IPv4地址介绍 地址分类: 各类型IP可支持的最大网络数…

C语言实现移位密码

一.移位密码 移位密码(Caesar Cipher)也叫凯撒密码是一种简单的加密技术,它通过将明文中的每个字母按照指定的位数进行移位,从而生成密文。例如,在一个"左移3位"的移位密码中,文中的每个字母都向左移动3个位置&#xff…

7.2 SpringBoot实现上传图片API + url映射本地路径registry.addResourceHandler

文章目录 前言一、url映射本地路径二、上传图片API2.1 接口UploadService2.2 实现类UploadServiceImpl2.3 上传图片Controller 三、测试最后 前言 在图书借阅系统里,有很多图片需要前端展示,这些图片大都是由用户上传,保存在服务端&#xff…

chatgpt赋能python:Python拆数程序:如何快速分解数字?

Python拆数程序:如何快速分解数字? 在计算机编程中,数字拆分是一个非常重要的概念。拆分数字可以让我们更好地理解数字格式,进行计算和分析。而Python作为一种功能强大的编程语言,提供了许多高效的工具来帮助我们快速…

【备战秋招】每日一题:华东师范大学保研机试-2022-罗马数字

为了更好的阅读体检,可以查看我的算法学习博客罗马数字 题目内容 罗马数字是古罗马使用的记数系统,现今仍很常见。 罗马数字有七个基本符号: I,V,X,L,C,D,M。 罗马数字IVXLCDM对应的阿拉伯数字1510501005001000 需要注意的是罗马数字与十进位数字的…

chatgpt赋能python:Python拆分语句,让数据处理更有效率

Python 拆分语句,让数据处理更有效率 Python是一种强大的编程语言,不仅支持各种应用开发,而且非常适合数据处理。Python的易用性和灵活性使其成为了数据科学家和工程师首选的编程语言之一。Python的字符串拆分功能能够轻松处理数据的分割和组…

从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)

目录 1. priority_queue的模拟实现 1.1 未完全的priority_queue 1.2 迭代器区间构造和无参构造 1.3 仿函数的介绍和使用 1.4 完整priority_queue代码: 1.5 相关笔试选择题 答案: 2. 反向迭代器 2.1 反向迭代器的普通实现 reverse_iterator.h&a…

性能测试基础知识(一)性能测试策略

性能测试策略 一、什么是性能测试?二、性能测试的目的三、性能测试策略1、基准测试2、并发测试3、负载测试4、压力测试5、其他测试 一、什么是性能测试? 性能测试是在一定的负载1条件下,系统的响应时间等特性是否满足特定的性能需求。需要有…

软考A计划-系统集成项目管理工程师-信息化知识(二)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

【高危】Apache Nifi JMS组件存在JNDI反序列化漏洞

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具, JndiJmsConnectionFactoryProvider 控制器组件用于配置 JMS 连接地址。 Apache NiFi 1.8.0 至 1.21.0 版本中,由于 JndiJmsConnectionFactoryProvider 控制器服务允许已授权的用户配置 URL…

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用

NUCLEO-F411RE RT-Thread 体验 (3) - GCC环境 uart驱动的移植以及console的使用 1、准备工作 在第一节里,我们用stm32cubemx将pa2 pa3管脚配置成usart2,用于跟st-link虚拟串口的打印用,那么我们先重定向printf函数,看这条通道是…

创建 Python 脚本以在 Linux 中打开新终端并运行命令

文章目录 创建在 Linux 中打开新终端并运行命令的 Python 脚本在 Linux 中创建 Python 脚本来检查 Python 版本使打开的终端保持活动状态并在其中运行命令的 Python 脚本在 Linux 中使用 Python 子模块 subprocess() 将命令传递到新终端总结 Linux 操作系统以其程序员广泛使用的…

PB9如何实现datawindow打印导出PDF,PB导出PDF

PB9如何实现datawindow打印导出PDF,PB导出PDF? 之前的saveas导出pdf,设置非常麻烦。需要 1. 安装gs705w32.exe 2. 安装虚拟打印机 Sybase\Shared\PowerBuilder\drivers\ADIST5.INF 手动添加打印机 这个方法现在对于win64不支持。 今天客…

window11 + python3.7+NVDIA11.7 +pytorch GPU 加速环境配置

window11 python3.7NVDIA11.7 pytorchGPU 加速环境配置 关于pytorch配置GPU环境我在网上看了很多,其实现在基本上没有windows 11 版本环境的配置但是其实没必要担心这个,这没有影响。 对于博主呢,其实不太像配置GPU的,因为其实…

【MYSQL篇】一文弄懂mysql索引原理

文章目录 索引是什么?索引定义索引类型 索引存储模型推演二分查找二叉查找树( Binary Search Tree)平衡二叉树(AVL Tree)多路平衡查找树(B Tree)B树(加强版B Tree) 小结 …

PyQt中数据库的访问(一)

访问数据库的第一步是确保ODBC数据源配置成功,我接下来会写数据源配置的文章,请继续关注本栏! (一)数据库连接 self.DBQSqlDatabase.addDatabase("QODBC") self.DB.setDatabaseName("Driver{sqlServer…