容灾:mongo主从配置
站内链接:
容灾-mysql 高可用
容灾-策略和架构
容灾-数据同步和复制
容灾-redis 高可用
容灾-mongo 高可用
db-mongo 基本使用
db-mongo 基本特征
架构SLASLA(Service Level Agreement)是一种服务级别协议,用于定义服务提供商与客户之间的服务水平要求和责任。SLA 通常包含以下内容:
服务范围:明确描述所提供的服务的具体范围和内容,包括功能、性能、可用性等方面的要求。
响应时间:规定在客户提出请求后,服务提供商需要在多长时间内做出响应。
解决时间:规定在出现问题或故障时,服务提供商需要在多长时间内解决问题或恢复服务。
可用性要求:定义服务的可用性要求,例如系统正常运行时间的百分比或故障允许的最大时间。
故障处理:规定在服务中出现故障时,服务提供商需要采取的具体措施和处理流程。
客户支持:明确规定服务提供商为客户提供的支持方式、时间和响应要求。
问题来了,SLA 是怎么量化的?其实就是按照停服时间算的。怎么算的?举个例子:
1 年 = 365 天 = 8760 小时99.9 停服时间:8760 * ...
编程设计:设计模式
站内链接:
设计(1)-常用术语
设计(2)-分层结构
设计(3)-微服务
设计(4)-设计模式分类
设计(5)-代码重构
1. ClassifyUML 类图
关联关系: 表示对象之间的引用关系, 用于表示一类对象与另一类对象的关系,其可以分为单向关联、双向关联
单向关联: 一个带箭头的实线
双向关联: 一个无箭头的实线,双方各自持有对方类型的成员变量
自关联: 一个指向自身的箭头实线,类自身包含自身类对象实例
聚合关系: 这是关联关系的一种,这是强关联,表示整体和部分之间的关系,其中对象可以脱离整体独立存在,带空心菱形的实线来表示
组合关系:这也是关联关系的一种,这是更强关联,也是表示整体和部分的关系,但是部分对象不可以脱离整体独立存在,带实心菱形的实线来表示
依赖关系:这是一种使用关系,这是对象间耦合度最低的关联方式,通过局部变量或方法参数来访问被依赖类的某个功能,带箭头的虚线来表示
继承关系:带空心三角箭头的实线来表示
实现关系:这是接口和实现类之间的关系,带空心三角箭头的虚线来表示
七大原则
单一职责原则(Single Responsibility Princ ...
容灾:redis线上问题处理
站内链接:
容灾-mysql 高可用
容灾-策略和架构
容灾-数据同步和复制
容灾-redis 高可用
容灾-mongo 高可用
CPU 占比高问题
报表系统
报表系统涉及实时数据和离线数据,离线读 pg,实时读 redis。
现象: 实时报表主要访问 redis 数据,监控发现 Redis CPU 占用过高,高峰期 2 个从库实例的 CPU 达到 100%,由于 redis 是单进程单线程结构,所以单核 CPU 达到 100%导致查询阻塞。
该系统的框架结构:1 主 1 从 ,应用手动读写分离,持久化主从默认都开启开启 rdb 持久化,没有做 aof,参数基本走默认
基本当 Redis 服务的 CPU 占比过高时,可以考虑以下解决思路:
检查业务端优化 redis 的使用是否合法:评估 Redis 的使用模式,考虑是否存在频繁的读写操作、大量的 Key 操作、复杂的数据结构等因素导致 CPU 负载过高。可以通过优化数据结构、减少不必要的操作、合并批量操作等方式来降低 CPU 负载。
检查持久化策略是否影响 CPU:如果 Redis 启用了持久化机制(如 RDB 快照或 AO ...
容灾:模型和架构
站内链接:
容灾-mysql 高可用
容灾-策略和架构
容灾-数据同步和复制
容灾-redis 高可用
容灾-mongo 高可用
灾备术语容灾目的容灾的最主要需求或目的是确保业务的连续性和可用性。容灾的目标是在面临自然灾害、人为错误、硬件故障或其他意外事件时,能够快速恢复业务功能并减少业务中断时间。容灾的关键是保护数据、应用和基础设施,以确保业务能够在灾难发生时继续运行,减少数据丢失和业务损失。
通过实施容灾策略,可以实现以下目的:
业务连续性:容灾策略可以确保在灾难事件发生时,业务能够持续运行,减少业务中断时间,降低对用户和客户的影响。
数据保护:容灾策略包括数据备份、复制和同步等措施,以确保关键数据的安全性和完整性。在灾难发生时,可以迅速恢复数据并减少数据丢失的风险。
故障恢复:容灾策略提供了快速的故障恢复能力,使业务能够在短时间内从灾难中恢复,减少生产环境和业务系统的停机时间。
降低风险:容灾策略可以降低因自然灾害、人为错误、硬件故障等导致的风险。通过备份数据和应用、设置备用设备和环境,可以减少故障发生时的影响。
合规要求:许多行业和法规要求组织实施容灾计划以确保数 ...
算法:树搜索
站内链接:
算法(1)-检索-简介
算法(2)-检索-散列检索
算法(3)-检索-顺序检索
算法(4)-检索-树检索
算法(5)-排序-简介
算法(6)-排序-分配排序
算法(7)-排序-插入排序
算法(8)-排序-选择排序
算法(9)-排序-交换排序
算法(10)-排序-外排序
二叉树定义和图解二叉查找树(二叉排序树)是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。
1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2)若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3)任意节点的左、右子树也分别为二叉查找树。
下面是掘金文章上一个简单的二叉树查找图解示例:
使用场景二叉树在一般情况下可以极大的提高搜索效率,但它本身有如下缺点,从而导致搜索效率降低:
a. 不平衡性:如果插入的数据是有序的或者近似有序的,二叉查找树可能会退化成一个链表,导致树的高度接近 n,使得查找、插入和删除的平均时间复杂度变为 O(n),失去了平衡查找树的优势。
b. 对有重复数据的 ...
数据库:Redis消息队列实现
站内链接:
redis 配置和安装
redis 命令
1. 消息队列消息队列是一种异步的服务间通信方式, 常常用于分布式和微服务框架中, 其有如下几个基本特点:
a. 消息在消费和删除之前一直在队列中存在
b. 每条消息仅可被一个用户处理一次
从每条消息的消费者数量来看, 消息队列模式分为两种:
a. P2P: 基于 list 的消息队列就是点对点
b. 发布订阅模式: 发布者可以向多个消息频道推送消息
在整个消息流动过程中有三个角色扮演者:
producer: 负责将消息推入消息队列
consumer: 负责从队列中获取消息并处理
broker: 消息处理中心, 负责消息的存储, ack, retry 等
在平常工作中消息队列是一种必不可少的技术, 比如:
a. 应用解耦, 微服务架构: 应用之间互相解耦, 通过消息来进行交互, 从而避免接口异常导致信息传递失败, 前者比后者更加稳定
b. 异步处理, 这在分布式场景中被使用, 例如 celery 的异步任务
c. 限流和削峰, 如果没有消息队列, 则在大并发直接到达服务器从而导致造成瘫痪, 通过消息队列将无法处理的 ...
操作系统:四种远程登录方式模式
站内链接:
操作系统环境-shell 分类介绍
操作系统环境-操作系统术语
操作系统环境-远程登录模式
操作系统内核-同步编程到异步编程的技术演进
操作系统内核-术语
操作系统内核-会话
终端介绍
需求和问题对于远程执行服务器脚本, 在平常使用过程中很少涉及, 一般仅仅在运维自动化相关项目中会碰到, 比如 paramiko 或者 fabric 等组件底层实现中会出现远程脚本调用的操作. 在远程执行服务器脚本的时候会碰到很多问题:
脚本执行是否挂载后台运行的问题
脚本执行中环境变量的载入问题
脚本执行中 sleep 等待的问题, 脚本执行过程中
脚本执行中超时问题导致的脚本执行失败或者脚本执行时间过长(雪崩效应)
脚本执行中因特殊网络问题导致复用的网络连接无法使用进而对本次调动产生严重影响的问题
对于不同的问题需要由不同的产品校验方案和检查手动进行适配处理, 当然在处理这些问题之前我们至少应该简单的介绍下远程执行服务器脚本和远程登录服务器之后再执行脚本的异同点, 以便能更好的处理后续碰到的其他问题. 计算机世界中万事万物都是互相连接的, 只有了解了某一个技术底层基础 ...
自动化:dockerfile指令
站内链接:
docker 基础知识
docker 数据卷相关
docker 命令
docker 安装配置
docker 虚拟化介绍
dockerfile 介绍
介绍镜像和容器在docker基础知识中我们了解到如下一个工作流:
构建镜像, 设置 tags, 推送到远程仓库
使用方 pull 镜像到本地并存储
用户基于镜像 run 运行一个容器, 可以对容器进行 start, stop, restart 等操作
用户可以在容器的基础上 commit 产生一个新的镜像, 并由此重新进入 1 步骤
docker 解析器在分析 dockerfile 时:
根据基础镜像运行一个匿名容器
逐行运行保留字指令, 若指令会对容器产生改动则会自动进行 commit 生成一个新的镜像层, 在新的镜像层基础上再运行新的匿名容器, 所以不存在两条 RUN 命令, 第一条使用 cd 命令, 第二条就进入 cd 命令下了, 因为每一条命令都会生成一个新的分层存储, 在第一次执行RUN cd /app时仅仅当前进程的工作目录变更, 仅仅是内存层面的变化, 当第二次执行 RUN 命令的时候, 上下文环境又变为 ...
svn:基本介绍
站内链接:
git 分支操作
git 配置
git 术语
git 团队写作管理
git 仓库介绍
git submodule 介绍
git tag 介绍
git 原理介绍
git 工作流
svn 介绍
介绍和术语介绍Subversion(SVN)是一个开源的版本控制系統, 根据提交版本管理不断变化的数据, 这些数据都存储在 repository 中. 版本控制一开始来源于工程领域, 其是维护工程蓝图的标准做法, 能追踪工程蓝图从诞生一直到定案的过程, 以便将来查阅特定版本修订情况的系统. 基于 VSC 系统可以做到如下功能:
将选定的文件回溯到之前的状态
将整个项目都回退到过去某个时间点的状态, 在某些关键的时间点记录版本号信息, 极大的便捷版本发布流程
比较文件的变化细节以查出最后谁修改了哪个地方, 进而找到问题所在, 最后记录问题解决的方法
工程化的思维去管理项目文件, 避免文件管理混乱问题
基于权限控制来确保文件的安全
目前, 大部分的公司都是用 git 版本控制系统进行代码管理, 虽然 SVN 在一些行业中仍然有其使用场景, 但这里仅仅做一些基本的介绍, 一些涉及到 S ...
unix功能:ufw和firewalld介绍
网站内部链接:
iptables 介绍
firewalld 介绍
ufw介绍ufw, Uncomplicated Firewall, 其在 Ubuntu 8.04 LTS 后的所有发行版中默认可用, 其图形用户界面为Gufw, 其是为轻量化配置 iptables 而开发的一款工具, 提供了更加友好的交互逻辑和简便的配置规则.
ubuntu 上安装 ufw, 默认情况下其已经安装: apt-get install ufw
安装完成之后需要开启 ufw: ufw enable/disable
格式命令的基本格式:
123456789101112131415161718# 0. 显示规则并展示规则序号ufw status numbered# 1. 默认规则default ARG# 2. 日志等级和开关logging LEVEL# 3. 限制规则limit ARGS# 4. 删除规则delete RULE/NUM# 5. 插入规则insert NUM RULE# 6. 重启防火墙reload# 7. 重置防火墙reset# 8. 显示防火墙报告show ARG
使用
查看当前 ufw ...