读发布!设计与部署稳定的分布式系统(第2版)笔记04_集成点

news2024/12/25 2:24:25

 

1. 第一个拥有10亿用户的网站

1.1. 2016年,Facebook宣布其每日活跃用户数量为11.3亿

1.2. 对整个应用程序来说,“五个9”的可靠性远远不够,这每天会让成千上万的用户失望

1.3. 假如按照六西格玛质量标准来衡量,那么Facebook每天会惹怒768000个用户

1.4. 每页200个请求,每日11.3亿个活跃用户,每百万次机会有3.4个缺陷

2. 当集成一个个的系统时,系统相互之间的紧耦合就会变为常态

2.1. 大型系统往往比小型系统更快地陷入失效

2.2. 紧耦合会令系统某一部分的裂纹开始蔓延并成倍增大,最终跨越层级或系统的边界

3. 问题膨胀

3.1. 轻微的失误转化为重大的系统失效

3.2. 冷却监控和控制系统中隐藏的连锁反应,就是导致美国三里岛核反应堆事故的部分原因

4. 每一个反模式都会在系统中产生、加速或增加裂纹

4.1. 仅仅避免使用这些反模式还不够,因为所有事物都会出问题,失误不可能避免

4.2. 不要假装可以消除所有可能的失误来源,无论是系统本身的失误还是人为引起的失误

4.3. 要做最坏的假设,失误肯定会发生

5. 集成点

5.1. 集成点是系统的头号杀手

5.2. 所有的都是集成项目

5.3. 蝴蝶图

 

5.4. 蜘蛛图

5.4.1. 精心设计

 

5.4.2. 随意设置

 

5.5. 所有这些连接都是集成点,它们中的每一个都有可能破坏系统

5.6. 小型服务的数量设计得越多,与SaaS提供商的整合程度就越高,越是采用API优先的策略,越会让情况变得更糟

6. 套接字协议

6.1. 较高层级的许多集成协议通过套接字运行

6.2. 除了命名管道和进程间通信(共享内存),几乎所有的通信都基于套接字来实现

6.3. 最简单的系统失效方式是远程系统拒绝连接

6.4. TCP部分则是一个关于如何在离散的数据包基础上,构建出看似连续连接的协议

6.4.1. TCP还定义了“同时打开”的握手方式,即在发送SYN/ACK之前,这两台机器会互相发送SYN数据包。然而在基于客户端-服务器交互的系统中,这是相对少见的

6.5. 如果想要结束阻塞调用,就必须设置套接字超时时间。在超时情况下,程序能够处理相关的异常

6.6. 网络系统失效按速度分为快慢两种

6.6.1. 快速的网络系统失效,会让调用代码立即出现异常

6.6.1.1. “拒绝连接”是非常快速的系统失效,只需要几毫秒的时间就能返回给调用方

6.6.2. 缓慢的系统失效,比如一个被丢弃的ACK,会让线程在抛出异常之前被阻塞几分钟

6.6.2.1. 一个缓慢的响应比没有响应糟糕得多

6.7. 问题

6.7.1. 防火墙内的“已建立连接”表

6.7.1.1. 该表是有时长限制的

6.7.1.2. 即使TCP本身允许无限时长的连接,该表也不允许

6.7.1.3. 防火墙丢弃了这些数据包,而不是通知发送方无法到达目标主机

6.7.1.4. 闲置时长会轻松超过防火墙中配置的1小时闲置连接超时

6.7.2. TCP从来也不是为处于网络连接中间的那种智能设备而设计的,任何第三方都无法告诉连接终端它们的连接正在被拆除

6.8. 方案

6.8.1. ping数据包本身就是解决方案所需要的,其可以用来重置防火墙连接的“最后数据包”时间,可以使连接保持活动状态

6.8.2. “无效连接检测”既能让连接保持活动状态,又可以让人睡个安稳觉

6.8.3. 为了更好地理解问题,需要知道如何继续深入至少两个抽象层次,才能了解层次的“实际情况”,找到问题所在

6.9. tcpdump是从网络接口捕获数据包的常用UNIX工具

6.10. Wireshark可以在网线上嗅探数据包

6.10.1. 类似tcpdump,但它也能在图形用户界面中显示数据包的结构

6.10.2. 需要在X Window系统上运行

6.10.2.1. 无法安装在Docker容器或AWS实例中

7. HTTP协议

7.1. 所有基于HTTP的协议都使用套接字

7.2. 可能会给调用方带来的影响

7.2.1. 服务提供方可能会接受TCP连接,但不会响应HTTP请求

7.2.2. 服务提供方可以接受连接但不能读取请求

7.2.3. 服务提供方可能会发回调用方不知道该如何处理的响应状态

7.2.4. 在服务提供方发回的响应中,可能带有调用方不期望或不知道如何处理的内容类型

7.2.4.1. 当DNS查找失败时,互联网服务提供商可能会注入一个HTML页面

7.2.5. 服务提供方可能声称要发送JSON,但实际上发送了纯文本,或者是内核二进制文件,抑或是Weird Al Yankovic创作的MP3音乐

7.3. 建议

7.3.1. 避免使用那些将响应直接映射到领域对象的客户端程序库

7.3.2. 要将响应视为数据,除非已经确认响应符合设计预期

8. 供应商的API程序库

8.1. 阻塞是影响供应商API程序库稳定性的首要问题

8.1.1. 无论是内部资源池、套接字读取指令、HTTP连接,还是最一般的Java序列化,处处可以发现不安全的编程实践

8.2. 供应商可能会对其销售的服务器软件进行强化,但对客户端API程序库则很少这样做

8.3. 程序库的代码只是出自常规开发工程师之手,与其他任何随机抽样的代码一样,在质量、风格和安全性等方面具有不稳定性

8.4. 它们几乎不受控制

8.5. 需要等待供应商官方补丁版本

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

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

相关文章

LIN-网络管理:休眠(Go To Sleep)和唤醒(Wake up)

文章目录 一、LIN总线的两种状态二、休眠模式(Go To Sleep)①利用诊断帧中的主机请求帧 0x3C 作休眠命令②当总线静默(没有显性和隐性电平之间的切换)4s~10s 时,节点自动进入休眠状态。 三、唤醒模式(Wake up&#xff…

智能图片降噪-Topaz Photo AI

今天给各位小伙伴们测试了一款可以使视频智能无损放大的软件——Topaz Photo AI。 小编在很早之前也有了解过Topaz系列的软件,都是通过人工智能处理的,对小白新手们很适用,由于使用人工智能方面的软件或程序对硬件要求都比较高,因…

交通指南系统

一、实验目的 1. 掌握图的基本存储方法; 2. 掌握有关图的操作算法并用高级语言实现; 3. 熟练掌握图的两种搜索路径的遍历方法。 二、实验内容 假设以一个带权有向图表示某一区域的公交线路网,图中顶点代表一些区域中的重要场所&#xff0…

设计模式(二十二):行为型之备忘录模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

【C】转义字符以及注释的介绍

转义字符 转义字符顾名思义就是转变意思。就是把原来字符的意思转变了&#xff0c;让它拥有别的意思。 如果我们想要在屏幕上打印&#xff1a;c:\code:\test.c 这样一串文字的话&#xff0c;我们代码肯定会这样写&#xff1a; #include<stdio.h> int main() {printf(&q…

压缩感知入门④基于总体最小二乘的扰动压缩感知重构算法

压缩感知系列博客&#xff1a;压缩感知入门①从零开始压缩感知压缩感知入门②信号的稀疏表示和约束等距性压缩感知入门③基于ADMM的全变分正则化的压缩感知重构算法压缩感知入门④基于总体最小二乘的扰动压缩感知重构算法 文章目录 1. Problem2. 仿真结果3. MATLAB算法4. 源码地…

Bean 的六种作用域

观前提示:本篇博客演示使用的 IDEA 版本为2021.3.3版本,使用的是Java8(又名jdk1.8) 前端使用VSCode(Visual Studio Code1.78.2) 电脑使用的操作系统版本为 Windows 10 目录 前言 Bean Spring 容器在初始化⼀个 Bean 的实例时&#xff0c;同时会指定该实例的作⽤域。 1. …

chatgpt赋能python:Python怎样能通过值找到键

Python怎样能通过值找到键 Python是一种高级编程语言&#xff0c;它在工业、医疗、科学、财务等多个行业中被广泛使用&#xff0c;是数据科学、人工智能和深度学习等领域的首选语言。在Python编程中&#xff0c;有时候我们需要在字典中根据值查询对应的键&#xff0c;本文将介…

chatgpt赋能python:Python排序算法大全

Python排序算法大全 导言 排序是程序员日常工作中最常见的操作之一。Python提供了许多实现排序算法的库和函数&#xff0c;本文将带您了解这些排序方法。 初级排序算法 冒泡排序 Bubble Sort 冒泡排序是一种简单的排序算法。它通过不断交换相邻的元素&#xff0c;将大的元…

【微服务架构设计和实现】4.2 服务边界的定义和划分

第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;【容器化应用程序设计和开发】 第三章&#xff1a;【基于容器的部署、管理和扩展】 第四章&#xff1a;【4.1 微服务架构概述和设计原则】 4.2 服务边界的定义和划分 4.2 服务边界的定义和划分4.2.1 什么是服务边…

docker创建Ubuntu,Ubuntu创建桌面环境,本机使用VNC连接

题目&#xff1a;docker创建Ubuntu&#xff0c;Ubuntu创建桌面环境&#xff0c;本机使用VNC连接 文章目录 前言docker创建基于Ubuntu:20.04的容器使用ssh连接容器容器安装桌面环境本机电脑使用VNC连接测试用python来创建的ui能否显示坑参考 前言 为什么我想要用ubuntu的桌面环…

RFID课程要点总结_2 Identification

2. Identification 简单说RFID就是物体上贴tag&#xff0c;用reader上的antenna去读取&#xff0c;这三个是主要组成。 Reader’s function Energy supply: 比如有的标签自身不带能量需要reader提供信号中蕴含的能量 Communication: 最基本的功能&#xff0c;和tag识别&…

Flink CDC、OGG、Debezium等基于日志开源CDC方案对比

先上一张图&#xff0c;后面再慢慢介绍&#xff1a; CDC概述 CDC 的全称是 Change Data Capture &#xff0c;在广义的概念上&#xff0c;只要能捕获数据变更的技术&#xff0c;我们都可以称为 CDC 。我们目前通常描述的CDC 技术主要面向数据库的变更&#xff0c;是一种用于捕…

56、基于51单片机智能医院红外点滴检测输液器报警系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

引 言 目前&#xff0c;国际上每年每人的静脉输液量平均为2.5-3.3瓶&#xff0c;就我国而言&#xff0c;每年每人平均输液量8瓶&#xff0c;总量超过100亿瓶&#xff0c;其中每年约有39万人死于输液不良反应 。在如今新冠肺炎疫情持续的情况下&#xff0c;静脉输液仍是临床医学…

chatgpt赋能python:Python中如何选取list13列

Python中如何选取list 1 3列 介绍 对于SEO优化来说&#xff0c;选取适当的数据是至关重要的一步。Python是一门强大的编程语言&#xff0c;可以帮助人们快速而准确地处理数据&#xff0c;进而选择最佳数据进行SEO。在Python中&#xff0c;我们可以使用一些简单的方法来选择li…

kubespray部署kubernetes集群

kubespray部署kubernetes集群 1、kubespray简介 Kubespray 是开源的部署生产级别 Kubernetes 集群的项目&#xff0c;它整合了 Ansible 作为部署的工具。 可以部署在 AWS&#xff0c;GCE&#xff0c;Azure&#xff0c;OpenStack&#xff0c;vSphere&#xff0c;Packet(Bare m…

马原否定之否定观点

事物普遍联系和发展 事物之间的普遍联系的 答案B C考察的是联系的条件性 1.联系对事物的发展有制约和支撑的作用 2.联系的条件可以相互转化 所以我们可以将不利条件转化成有利条件 3.建立联系必须尊重客观规律。 对立统一是事物发展的根本规律、 唯物辩证法揭示了事物发展一…

ELK日志收集系统集群实验

目录 一、实验拓扑 二、环境配置 (一)设置各个主机的IP地址为拓扑中的静态IP&#xff0c;在两个节点中修改主机名为node1和node2并设置hosts文件 1、在虚拟机node1上操作 2、在虚拟机node2上操作 3、测试node1与node2的通联性 三、 安装node1与node2节点的elasticsearch…

大数据Doris(四十四):kafka json 数组格式数据导入到Doris

文章目录 kafka json 数组格式数据导入到Doris 一、创建 Doris 表 二、创建 Kafka topic

[论文笔记]Bidirectional LSTM-CRF Models for Sequence Tagging

引言 本文是论文Bidirectional LSTM-CRF Models for Sequence Tagging的阅读笔记。这篇论文是15年发表的,比上次介绍的那篇还要早。 首次应用双向LSTM+CRF(BI-LSTM-CRF)到序列标注数据集。BI-LSTM-CRF模型可以有效地使用双向输入特征,也因为CRF层可以利用句子级标签信息。…