回滚

JAVA架构师必备词汇和知识点

江枫思渺然 提交于 2020-03-26 08:00:50
01 高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机制(上线回滚、数据库版本回滚、事务回滚) 02 高并发 应用缓存 HTTP 缓存 多级缓存 分布式缓存 连接池 异步并发 03 分布式事务 二阶段提交(强一致) 三阶段提交(强一致) 消息中间件(最终一致性),推荐阿里的 RocketMQ。 04 队列 任务队列 消息队列 请求队列 05扩容 单体垂直扩容 单体水平扩容 应用拆分 数据库拆分 数据库分库分表 数据异构 分布式任务 06 网络安全 SQL 注入 XSS 攻击 CSRF 攻击 拒绝服务(DoS,Denial of Service)攻击 架构师必备工具 01 操作系统 Linux(必备)、某软的 02 负载均衡 DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB 03 分布式框架 Dubbo、Motan、Spring-Could 04 数据库中间件 DRDS 、Mycat、360 Atlas、Cobar (不维护了) 05 消息队列 RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka 06 注册中心 Zookeeper、Redis 07 缓存 Redis、Oscache

架构必备词汇

情到浓时终转凉″ 提交于 2020-03-26 07:28:42
高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机制(上线回滚、数据库版本回滚、事务回滚) 高并发 应用缓存 HTTP缓存 多级缓存 分布式缓存 连接池 异步并发 分布式事务 二阶段提交(强一致) 三阶段提交(强一致) 消息中间件(最终一致性),推荐阿里的RocketMQ 队列 任务队列 消息队列 请求队列 扩容 单体垂直扩容 单体水平扩容 应用拆分 数据库拆分 数据库分库分表 数据异构 分布式任务 网络安全 SQL注入 XSS攻击 CSRF攻击 拒绝服务(DoS,Denial of Service)攻击 架构装逼必备工具 操作系统 Linux(必备)、某软的 负载均衡 DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB(阿里云) 分布式框架 Dubbo、Motan、Spring-Could 数据库中间件 DRDS (阿里云)、Mycat、360 Atlas、Cobar (不维护了) 消息队列 RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka 注册中心 Zookeeper、Redis 缓存 Redis、Oscache、Memcache、Ehcache 集成部署 Docker、Jenkins

架构装逼必备词汇(转某大牛微博)

做~自己de王妃 提交于 2020-03-26 06:39:54
高可用 负载均衡(负载均衡算法) 反向代理 服务隔离 服务限流 服务降级(自动优雅降级) 失效转移 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时) 回滚机制(上线回滚、数据库版本回滚、事务回滚) 高并发 应用缓存 HTTP缓存 多级缓存 分布式缓存 连接池 异步并发 分布式事务 二阶段提交(强一致) 三阶段提交(强一致) 消息中间件(最终一致性),推荐阿里的RocketMQ 队列 任务队列 消息队列 请求队列 扩容 单体垂直扩容 单体水平扩容 应用拆分 数据库拆分 数据库分库分表 数据异构 分布式任务 网络安全 SQL注入 XSS攻击 CSRF攻击 拒绝服务(DoS,Denial of Service)攻击 来源: https://www.cnblogs.com/xqzj/p/7658024.html

工作流程引擎回滚应用场景与设计需求

a 夏天 提交于 2020-03-25 17:36:24
3 月,跳不动了?>>> 工作流程引擎回滚的应用背景: 场景1:一件流程在完成后,发现这个流程有问题,需要退回到流程指定的节点上与当时该节点的处理人身上,让他重做。 场景2:一个主流程启动了n个子流程,他在监控子流程时发现子流程问题,需要重新去做。 这两种场景下,都是在流程完全处理完后,并且流程引擎已经把该流程归档后要求重新回滚到指定的节点与该节点的处理人身上去,让其在重新去处理。 ccflow工作流程引擎 回滚流程对应的API : /// <summary> /// 恢复已完成的流程数据到指定的节点,如果节点为0就恢复到最后一个完成的节点上去. /// 恢复失败抛出异常 /// </summary> /// <param name="flowNo">要恢复的流程编号</param> /// <param name="workid">要恢复的workid</param> /// <param name="backToNodeID">恢复到的节点编号,如果是0,标示回复到流程最后一个节点上去.</param> /// <param name="note">恢复的原因,此原因会记录到日志</param> public static string Flow_DoRebackWorkFlow(string flowNo, Int64 workid, int backToNodeID,

[工具] Git版本管理(一)(基本操作)

五迷三道 提交于 2020-03-25 04:11:34
一、版本控制的发展 1.用文件来做版本控制 我们在写论文、做方案等的时候,一般都会同时在文件夹中存在很多版本的文件。 例如: 这种方式很常用,在很多领域都是用这种方式来进行版本控制的。 2.本地版本控制 实用一个本地软件,对所有的文件版本做管理,只提供给我们看到一个版本的文件。 然后可以通过命令等方式来切换版本。 3.集中式版本控制 代表: SVN 实用一个服务器来进行版本控制,充当中心仓库。所有的开发者在自己电脑上进行开发,并提交给中心仓库。 缺点:当断网或服务器宕机的时候,无法提交。 4.分布式版本控制 代表: git 结构和SVN很像,不同的是除了在服务器上维护所有的版本,还在用户的本地计算机也维护一套所有的版本。 这样,用户可以在自己的本地进行版本控制,然后在合适的时机同步给中心服务器即可。 二、安装git软件 下载地址: https://git-scm.com/download/win windows上安装git软件,只需一直下一步即可。 在Linux上(CentOS)安装git,只需使用命令: yum install git -y Windows下安装完毕后,点击鼠标右键: 只要看到Git GUI Here 以及Git Bash Here就说明git安装好了。 三、初次使用git 1.使用流程 1)首先创建工作目录 我们首先要创建一个工作目录,例如D盘下的leo目录。

【巨杉数据库SequoiaDB】巨杉 Tech | 并发性与锁机制解析与实践

微笑、不失礼 提交于 2020-03-25 01:09:23
01 概述 数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 OLTP 场景下通常要求具有很高的并发性。并发事务实际上取决于资源的使用状况,原则上应尽量减少对资源的锁定时间,减少对资源的锁定范围,从而能够尽量增加并发事务的数量,那么影响并发的因素有哪些呢?本文将从巨杉分布式数据库本身的机制以及隔离级别、数据库锁、参数、及实际例子进行详解,读完本文将对巨杉数据库并发性与锁机制有一个初步的了解。 02 隔离级别与并发性 在单用户环境中,每个事务都是顺序执行的,而不会遇到与其他事务的冲突。但是,在多用户环境下,多个事务并发执行。因此每个事务都有可能与其他正在运行的事务发生冲突。有可能与其他事务发生冲突的事务称为交错的或并行的事务,而相互隔离的事务称为串行化事务,这意味着同时运行它们的结果与一个接一个连续地运行它们的结果没有区别。在多用户环境下,在使用并行事务时,会发生四种现象: 丢失更新:这种情况发生在两个事务读取并尝试更新同一数据时

事务补偿

会有一股神秘感。 提交于 2020-03-23 10:43:25
99% 的人都能看懂的「补偿」以及最佳实践 也许你对降级已经有了一些认识,这次,我们来聊一聊在保证对外高可用的同时,憋出的“内伤”该如何通过「补偿」机制来自行消化。 「补偿」机制的意义 以电商的购物场景为例: 客户端 ----> 购物车微服务 ----> 订单微服务 ----> 支付微服务。 这种调用链非常普遍。 那么为什么需要考虑补偿机制呢? 正如之前几篇文章所说,一次跨机器的通信可能会经过 DNS 服务,网卡、交换机、路由器、负载均衡等设备,这些设备都不一定是一直稳定的,在数据传输的整个过程中,只要任意一个环节出错,都会导致问题的产生。 而在分布式场景中,一个完整的业务又是由多次跨机器通信组成的,所以产生问题的概率成倍数增加。 但是,这些问题并不完全代表真正的系统无法处理请求,所以我们应当尽可能的自动消化掉这些异常。 可能你会问,之前也看到过「补偿」和「事务补偿」或者「重试」,它们之间的关系是什么? 你其实可以不用太纠结这些名字,从目的来说都是一样的。就是一旦某个操作发生了异常,如何通过内部机制将这个异常产生的「不一致」状态消除掉。 题外话:在笔者看来,不管用什么方式,只要通过额外的方式解决了问题都可以理解为是「补偿」,所以「事务补偿」和「重试」都是「补偿」的子集。前者是一个逆向操作,而后者则是一个正向操作。 只是从结果来看,两者的意义不同。「事务补偿」意味着“放弃”

分布式事务解决方案整理

╄→гoц情女王★ 提交于 2020-03-22 18:19:03
分布式事务解决方案整理 1.2PC/3PC模式 1.1 介绍: 依赖资源管理器(mysql, redis)支持XA协议, 数据库充当RM角色,应用需要充当TM的角色,即生成全局的txId,调用XAResource接口,把多个本地事务协调为全局统一的分布式事务, 所有结点要么全做要么全不做。 1.2 特点: 需要依赖资源管理器RM(数据库)对XA的支持。 整个处理过程需要锁住事务资源,性能比较低。 场景一: 1)协调者节点向所有参与者节点发出”正式提交(commit)”的请求。 2)参与者节点正式完成操作,并释放在整个事务期间内占用的资源。 3)参与者节点向协调者节点发送”完成”消息。 4)协调者节点受到所有参与者节点反馈的”完成”消息后,完成事务。 场景二: 1)协调者节点向所有参与者节点发出”回滚操作(rollback)”的请求。 2)参与者节点利用之前写入的Undo信息执行回滚,并释放在整个事务期间内占用的资源。 3)参与者节点向协调者节点发送”回滚完成”消息。 4)协调者节点受到所有参与者节点反馈的”回滚完成”消息后,取消事务。 2. TCC模式 2.1介绍 2PC的另类实现,TCC事务机制相对于传统事务机制(X/Open XA Two-Phase-Commit),其特征在于它不依赖资源管理器(RM)对XA的支持,而是通过对业务逻辑的调度来实现分布式事务,

Git基础命令

帅比萌擦擦* 提交于 2020-03-18 22:31:57
第一阶段 :git初始化的操作 想要让git对一个目录进行版本控制需要以下步骤: 首先进入管理目录 执行初始化操作 git init 查看管理目录下的文件的状态 git status 注:红色的文件要么是新增的要么是修改过的 管理指定的文件(红变绿) git add 文件名 git add . 个人信息配置:用户名、邮箱;(安装完只需要配置一次,以后都不需要在操作) git config --global user.email "邮箱" git config --global user.name "名字" 生成版本 git comment -m "描述信息" 查看日志 git log Git的三大区域 介绍: 作区(写代码的地方)—git add暂存区(临时存储)—git commit本地库(历史版本) 第二阶段:Git进阶 回滚 首先需要查看历史版本:通过 git log 需要回滚到那个版本就将那个版本的版本号加在指令后面 git reset --hard 版本号 例如:git reset --hard c8c22b9cf18f228b35b2e25d4b4ad494dcf5661a 如果我们又后悔了需要返回刚刚的那个版本怎么办?这个时候 git log 已经查不到感刚刚回滚的版本号了;需要我们用到一个新的命令: git reflog 这样我们就能看到我们刚刚回滚的版本号了

mysql误删除数据后如何恢复

随声附和 提交于 2020-03-18 17:55:10
Mysql 误删除是我最头痛的一件事,网络也有很多惨痛的教训,为了减少企业损失,应迅速恢复业务数据,后续在人员操作行为上建立完善的制度及流程,将风险扼杀在摇篮才是上上策。 本次使用的原美团开源Mysql 数据闪回工具 传送门:https://github.com/Meituan-Dianping/MyFlash 一,MyFlash简介 MyFlash的前身是binlong2,后续是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析V4版本的二进制日志,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。 该工具已经在美团点评内部使用 二,MyFlash使用限制 二进制日志格式必须为【row】行级模式 ,且binlog_row_image =full 仅支持5.6与5.7 (如果是低版本的mysql 二种方案 1,升级mysql 2,使用binlog2) [binlog2sql工具的下载地址:] 只能回滚DML(增,删,改) 三,详细说明 3.1 安装部署 git clone https://github.com/Meituan-Dianping/MyFlash.git cd MyFlash/ [root@gitlab MyFlash]# yum install glib2* [root@gitlab MyFlash]# gcc -w