读发布!设计与部署稳定的分布式系统(第2版)笔记02_停飞的代码异常

news2024/9/27 9:21:52

 

1. 以前“计划内的停机”很正常,现在则不被接受

2. 高可用性架构

2.1. CF系统不会遇到任何常见的单点失效问题

2.1.1. 硬件的每一部分都有冗余

2.1.1.1. CPU

2.1.1.2. 驱动器

2.1.1.3. 网卡

2.1.1.4. 电源

2.1.1.5. 网络交换机

2.1.1.6. 风扇

2.1.2. 为了防止某个机架受到损坏或破坏,服务器甚至被分散安装到不同的机架上

2.1.3. 如果发生火灾、洪水、炸弹袭击,位于48千米外的第2个机房可以随时把系统接管过去

3. 集群配置的常见问题

3.1. 没有足够的心跳

3.2. 心跳数据和生产数据由相同的交换机传输

3.3. 服务器设置为使用物理IP地址而不是虚拟IP地址

3.4. 设计的软件包之间混乱的依赖关系

4. 遭遇停机

4.1. 首要的任务都是恢复服务

4.2. 要先恢复服务,之后才是调查原因

4.2.1. 数百种疾病都能引起发烧

4.2.2. 为了判断可能的病因,需要进行化验或观察,了解更多信息

5. 事后分析

5.1. 谁最后动的就赖谁

5.1.1. post hoc, ergo propter hoc

5.1.2. 由于在数据库故障切换和维护之后,系统很快就失效了,因此疑点自然聚焦在故障切换操作上

5.2. 可靠的线索

5.2.1. 在停机事故发生时复制下来的服务器日志

5.2.1.1. 软件事故的事后分析实际上更难完成,因为事件结束了,没有留下可供分析的实物

5.2.2. RMI使得跨机器之间的通信方式就像在本机内部通信,但这种方式无法为通信调用设置超时时间,所以有一定的风险

5.2.2.1. 调用方很容易被其调用的远程服务器中的问题拖垮

5.3. 不可靠的线索

5.3.1. 人们对所见之事的陈述

6. 原因

6.1. JDBC规范允许java.sql.Statement.close()抛出一个SQLException异常,所以代码必须处理该异常

6.1.1. 如果在关闭statement时抛出异常,则数据库连接不会被关闭,从而导致资源泄漏

6.1.2. 这个异常在正常情况下几乎是不会被抛出来的

6.1.2.1. 当Oracle驱动程序在遇到IOException的情况下尝试关闭数据库连接时,例如执行数据库故障切换,SQLException异常就会抛出

6.1.2.2. 在执行该statement语句进行一些网络I/O操作时,会抛出SQLException异常。而在关闭该statement语句时也会抛出SQLException异常,因为驱动程序会尝试告诉数据库服务器释放与该语句相关的资源

6.2. 假设JDBC连接是在故障切换之前创建的

6.2.1. 当数据库服务器执行故障切换时,用于创建连接的数据库服务器IP地址将从一台主机变成另一台主机,但TCP连接的当前状态不会将数据库主机地址转变为第二个主机地址

6.2.2. 任何对套接字的写入操作,最终都会抛出一个IOException异常

6.2.3. 意味着资源池中的每个JDBC连接都是能引发事故的“地雷”

6.3. 被迫停飞的原因只是一个未被捕获的SQLException异常

7. 预防管用吗

7.1. 指望着每一个像这样的软件缺陷最终都能被揪出来,就是天方夜谭

7.2. 除非其中一位代码评审员知道Oracle JDBC驱动程序的内部实现细节,或者代码评审团队对每个Java方法都花费几个小时来评审,否则是不会发现的

7.3. 只有在知道问题的情况下,编写发现问题的测试才会变得简单

7.3.1. 在定位了问题之后,该团队在压力测试环境中进行了测试,确实重现了同样的差错

7.4. 系统中的一个软件缺陷可能会传播到所有其他受影响的系统中

7.4.1. 每个企业内部都有相互关联和相互依赖的系统

7.4.2. 不能允许软件缺陷导致一连串的系统失效

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

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

相关文章

Redis哨兵模式的配置

1.环境准备 master节点1个slave节点2个sentinel【哨兵】节点3个redis版本5.0.3操作系统:Centos7 2.主从节点配置 创建redis-conf目录,此目录用于存放主从节点的配置文件 复制redis.conf,然后创建三个配置文件:redis-6379.conf&…

循环缓冲题目

题目:一环形缓冲区由 6 个缓冲区 0~5 组成,其中 Full 表示装满数据的缓冲区,Empty 表示空缓冲区。按照顺时针方向,指针 Pf 指向第一个 “满” 缓冲区,指针 Pe 指向第一个 “空” 缓冲区。进程 In 在 Pe 指示下不断向 E…

XSS数据接收网站——XSS在线平台

文章目录 前言使用步骤1、进入到xss在线平台主页2、创建项目3、生成攻击poc4、查看返回结果 前言 平台的网址是: 链接: XSS在线平台 使用步骤 1、进入到xss在线平台主页 2、创建项目 我的项目,点击创建,项目名称和描述随便填,…

Docker安装和使用,Docker拉取Mysql.

Docker Unbuntu安装dockerdocker的相关操作开启docker服务查看镜像搜索镜像拉取镜像删除镜像运行容器查看容器停止运行容器重新运行容器删除容器构建一个Docker镜像登陆Dockerhub提交镜像到dockerhub退出dockerhub进入正在运行的容器的交互式终端其他docker操作 docker拉取mysq…

qemu arm Linux 环境测试交叉编译的 glib 库 测试用例 tests

环境搭建 ubuntu 20.04 arm 平台交叉编译 glib 库 交叉编译 glib 库 glib 库 本身带有大量的测试用例 tests,分别在 glib 各个模块目录下的 tests 目录,如果是 ARM Linux 平台的交叉编译,可以开启 installed_tests 选项 开启 glib tests 测…

2.pixi.js编写的塔防游戏(类似保卫萝卜)-场景编辑器

游戏说明 一个用pixi.js编写的h5塔防游戏,可以用electron打包为exe,支持移动端,也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…

一种正弦信号叠加高频噪声的信号基频率准确测量方法

1.问题 当信号叠加有高频噪声时,特别是类似有变频器这类强干扰源存在的情况下,如何测得信号的准确频率,是个问题。FFT要求长时间采样,对于嵌入式应用,采样点数和时间消耗都是个问题。而即使用示波器的波形叠加功能&…

Debian12 U盘安装

今天买了一个蓝牙适配器,想着在我的Centos7上把这个蓝牙使用起来,但遗憾的是即使经过淘宝客服的远程操作也无法正常使用起来,原因是我的Centos版本太低,有些头文件缺失内容导致编译不过,然后蓝牙驱动无法正常安装。在客…

【八】spring boot集成数据库连接池druid

spring boot集成数据库连接池druid 最近在进行程序优化的过程中发现程序瓶颈在数据库连接这块,于是开始研究怎么对数据库连接池参数进行调优,在这个过程中发现很多人使用druid很不规范,经常会出现导入的包和配置参数不对应的情况,…

Mybatis-Plus《学习笔记(22版尚硅谷)》

一、MyBatis-Plus 1.简介 MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 我们的愿景是成为 MyBatis 最好的搭档&…

【SpringCloud入门】-- Ribbon入门

1.什么是Ribbon? Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式&…

LeetCode 2481. Minimum Cuts to Divide a Circle【数学,几何】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

AMD——CPU微架构分析

一、SoC架构 1.1 整体架构 Zeppelin 参考链接:wikichip: Zeppelin 通过infinity fabric总线将单die分成多die的SoC架构,每个Die包含两个CPU核(CCX)、2各DDR通道、USB、低功耗IO以及多个IFOP和IFIS serdes接口。 如下所述中&…

【Python 随练】三数字排序

题目: 输入三个整数 x, y, z,请按照从小到大的顺序输出这三个数。 简介: 在本篇博客中,我们将使用Python代码解决一个简单的排序问题:如何将输入的三个整数按照从小到大的顺序进行排序并输出。我们将提供问题的解析…

力扣动态规划专题(三)完全背包 518.零钱兑换II 377. 组合总和 Ⅳ 70. 爬楼梯 322. 零钱兑换 279.完全平方数 139.单词拆分 步骤及C++实现

文章目录 完全背包一维dp数组 滚动数组 518.零钱兑换II377. 组合总和 Ⅳ70. 爬楼梯322. 零钱兑换279.完全平方数139.单词拆分 完全背包 完全背包的物品数量是无限的,01背包的物品数量只有一个 完全背包和01背包分许步骤一样,唯一不同就是体现在遍历顺序上…

JVM内存分析:Aviator低版本内存泄漏问题分析

目录 1.频繁FullGC告警 2.堆转储操作生成dump文件 3.利用MAT工具分析dump文件 3.1 大对象视图分析内存泄漏原因 3.2 Aviator框架中什么地方用到ThreadLocal? 3.3 fnLocal为什么存在内存泄漏? 3.4 LambdaFunctionBootstrap为什么没有释放&#xff…

002mavenSettings配置

Maven –Settings 官网说明https://maven.apache.org/guides/mini/guide-mirror-settings.html 官网说明 模板 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"htt…

【Redis】持久化机制

一、三种持久化机制 RDF快照&#xff1a;通过某一时刻的快照&#xff0c;将数据以二进制形式永久存储在磁盘中。AOF&#xff1a;将每个修改命令通过write函数追加到文件中。混合持久化&#xff1a;AOF重写时&#xff0c;将重写这一刻之前的内存做RDB快照存储&#xff0c;并将此…

前端vue上拉加载下拉刷新组件,支持列表分页 本地分页

前端vue上拉加载下拉刷新组件,支持列表分页 本地分页, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id12942 喜欢我的前端组件分享文章的&#xff0c;帮忙加个关注&#xff0c;非常感谢&#x1f64f;&#x1f64f; 效果图如下: #### 使用方法…

StarRocks 文章收集

StarRocks在58的实践 StarRocks在58的实践 - 墨天轮StarRocks在58的实践 --2022-06-08https://www.modb.pro/db/639611 StarRocks之系统架构 StarRocks之系统架构 - 墨天轮https://www.modb.pro/db/610300 StarRocks小规模集群部署最佳实践(1/2) 0016.S StarRocks小规模集…