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

news/2024/7/7 19:45:35

 

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://lihuaxi.xjx100.cn/news/1269606.html

相关文章

Spring Boot 日志的主要组件及其特点

Spring Boot 日志的主要组件及其特点 在开发应用程序时,日志是非常重要的一部分。它可以帮助我们了解应用程序的运行情况,发现并解决问题。在 Spring Boot 中,有许多不同的日志框架可供选择。本文将介绍 Spring Boot 日志的主要组件及其特点…

干货 | 水文数据跨域分级安全管理

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。 一、研究背景 水文和水利都是国民经济建设和社会发展的基础信息资源,对于水文数据来说,它更加偏生态性,比如流域的情况,主要影响在政府政策制定。…

leetcode 1184. 公交站间的距离

题目描述解题思路执行结果 leetcode 1184. 公交站间的距离. 题目描述 公交站间的距离 环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距…

with tf.GradientTape() as tape

Tensorflow 会把 ‘tf.GradientTape’ 上下文中执行的所有操作都记录在一个磁带上 (“tape”)。 然后基于这个磁带和每次操作产生的导数 import tensorflow as tf#对于不可训练的变量,比如tf.constant() 必须指定tape.watch对其监控 x tf.constant(3.0) with tf…

Yolov7 引入CVPR 2023 BiFormer: 基于动态稀疏注意力构建高效金字塔网络架构,对小目标涨点明显

目录 1.BiFormer介绍 2.基于Yolov5的BiFormer实现 2.1 BiFormer加入common.py中 2.2 BiFormer加入yolo.py中: 2.3 yolov7-tiny_BiFormerBlock.yaml

微服务工程搭建

工程创建 目前的java项目一般是分模块进行开发的,每个模块相对独立。使用Maven构建的项目,其结构与Maven设计的结构相符,常用到聚合和继承等Maven依赖的特性,详情可参阅Maven实战。 项目初始化 商品服务、仓储服务、订单服务、…

工程机械比例阀电流采集方案

工程机械的需求量变得越来越大,而关于工程机械,其比例阀的控制问题不容忽视。比例阀是一种新型的液压控制装置。在普通压力阀、流量阀和方向阀上,用比例电磁铁替代原有的控制部分,并按输入的电气信号连续、按比例地对油流的压力、…

Ant Design Vue 中将 Table 表格中的数字类型转换为文字的方法详解

系列文章目录 文章目录 系列文章目录前言一、需求背景和问题二、使用自定义 render 函数实现转换三、通用的转换方法总结 前言 在使用 Ant Design Vue 开发时,有时需要将 Table 表格中的数字类型字段转换为对应的文字表示,以提供更直观的数据展示。本文…