分布式事务
分布式事务分布式事务的概念分布式事务指的是一个请求在多个系统的调用链当中如何确保数据一致。
分布式事务协议分布式事务协议:
2PC
3PC
TCC
2PC 两阶段提交协议2PC是非常经典的强一致、中心化的原子提交协议,协议中定义了两类节点:一个中心化协调者节点和多个参与者节点。2PC分为两个阶段:
准备阶段:
协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待所有参与者答复;
各参与者执行事务操作,将Undo和Redo信息记入事务日志中(但不提交事务);
如参与者执行成功,给协调者反馈YES,即可以提交;如执行失败,给协调者反馈NO,即不可提交。
提交阶段(所有参与者均反馈YES):
协调者向所有参与者发出正式提交事务的请求(即Commit请求);
参与者执行Commit请求,并释放整个事务期间占用的资源;
各参与者向协调者反馈Ack完成的消息;
协调者收到所有参与者反馈的Ack消息后,即完成事务提交。
提交阶段(任何一个参与者反馈NO):
协调者向所有参与者发出回滚请求(即Rollback请求);
参与者使用阶段1中的Undo信息执行回滚操作,并释放整 ...
RabbitMQ面试题
RabbitMQ是什么?RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
PS: 也可能直接问什么是消息队列?消息队列就是一个使用队列来通信的组件。
RabbitMQ特点?
可靠性: RabbitMQ使用一些机制来保证可靠性, 如持久化、传输确认及发布确认等。
灵活的路由 : 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能, RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个 交换器绑定在一起, 也可以通过插件机制来实现自己的交换器。
扩展性: 多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展 集群中节点。
高可用性 : 队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队 列仍然可用。
多种协议: RabbitMQ除了原生支持AMQP协议,还支持STOMP, MQTT等多种消息 中间件协议。
多语言 ...
RabbitMQ
MQ 的相关概念什么是MQMQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不 用依赖其他服务。
为什么要用MQ流量消峰
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物 ...
MyCat-高可用集群搭建、架构剖析
MyCat高可用集群搭建集群架构MyCat实现读写分离架构在之前的笔记中, 已经讲解过了通过MyCat来实现MySQL的读写分离,从而完成MySQL集群的负载均衡, 如下面的结构图:
但是以上架构存在问题 ,由于MyCat中间件是单节点的服务,前端客户端所有的压力过来都直接请求这一台MyCat,存在单点故障。所以这个时候, 我们就需要考虑MyCat的集群 。
MyCat集群架构通过MyCat来实现后端MySQL的负载均衡 ,通过HAProxy再实现MyCat集群的负载均衡:
HAProxy 负责将请求分发到 MyCat 上,起到负载均衡的作用,同时 HAProxy 也能检测到 MyCat 是否存活,HAProxy 只会将请求转发到存活的 MyCat 上。如果一台 MyCat 服务器宕机,HAPorxy 转发请求时不会转发到宕机的 MyCat 上,所以 MyCat 依然可用。
HAProxy介绍:
HAProxy 是一个开源的、高性能的基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件。 使用HAProxy可以快速、可靠地实现基于TCP与HTTP应用的负载均衡解决方 ...
MyCat-分片、性能监控、读写分离
MyCat分片垂直拆分概述
一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分。
案例场景
在业务系统中,有以下表结构,但是由于用户与订单每天都会产生大量的数据,单台服务器的数据存储及处理能力是有限的,可以对数据库表进行拆分,原有的数据库表:
准备工作
准备三台数据库实例
123192.168.192.157192.168.192.158192.168.192.159
在三台数据库实例中建库建表,即将准备好的三个SQL脚本, 分别导入到三台MySQL实例中 。
首先上传文件:put ‘’ 上传文件路径 ‘’ ,如下:
1put D:/tmp/user.sql
之后登录MySQL数据库之后, 使用source命令导入 :
schema.xml的配置123456789101112131415161718192021222324252627282930313233343536373839404142434445<?xml version="1.0" ...
MyCat-简介、入门、配置文件详解
MyCat简介MyCat 引入 如今随着互联网的发展,数据的量级也是成指数式的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求,这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合时NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了—MyCat 。
MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到”云”端,解决海量数据存储和业务规模迅速增长情况下的数据存储和访问的瓶颈问题 。
MyCat 历史
MyCat背后是阿里曾经开源的知名产品—Cobar。Cobar的核心功能和优势是MySQL数据库分片,此产品曾经广为流传,据说最早的发起者对MySQL很精通,后来从阿里跳 ...
Zookeeper
Zookeeper是什么
ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态。
根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
Zookeeper 特性Zookeeper 保证了如下分布式一致性特性:
顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
单一视图:无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
可靠性:一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来。
实时性(最终一致性): Zookeeper 仅仅能保证 ...
Git、RESTful API
GitGit工作流程一般工作流程如下:
克隆 Git 资源作为工作目录。
在克隆的资源上添加或修改文件。
如果其他人修改了,你可以更新资源。
在提交前查看修改。
提交修改。
在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
下图展示了 Git 的工作流程:
Git 工作区、暂存区和版本库
工作区:就是你在电脑里能看到的目录。
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。
图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个”游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
图中的 objects ...
Spring
Spring知识点脑图Spring思维脑图 ProcessOn Mind
Spring基本概念Spring IOC 的理解IOC (Inverse of Control)控制反转。将之前程序中需要手动创建对象的操作,交由 Spring 框架来实现,创建对象的操作被反转到了 Spring 框架。对象的生命周期由 Spring 来管理,只需要直接从 Spring 那里去获取一个对象。
Spring DI 的理解DI(Dependency Injection)依赖注入。Spring 框架创建 Bean 对象时,动态的将依赖对象注入到 Bean 组件中,实现依赖对象的注入。
BeanFactory 接口和 ApplicationContext 接口不同点
ApplicationContext 接口继承 BeanFactory 接口,Spring 核心工厂是 BeanFactory,BeanFactory 采取延迟加载,第一次 getBean 时才会初始化 Bean,而ApplicationContext 是会在加载配置文件时初始化 Bean。
ApplicationContext 是对 Be ...
设计模式
设计模式设计模式是什么设计模式是一个通过定义、使用、测试去解决特定问题的方法,是针对软件设计中在给定条件下会重复性发生的问题而提出的一种通用性的可重用解决方案,设计模式不是可以直接转化为代码的完整设计,它是用于描述在不同情况下解决问题的通用方案。
设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
设计模式的作用设计模式通过提供经过验证的行之有效的开发范式加快开发过程,预防重大的隐患问题,提高代码可读性。
设计模式的分类这里主要讨论GoF所提出的23种设计模式,可将其分为三种类型:
创造型设计模式
结构型设计模式
行为型设计模式
创造型设计模式注重完成对象的实例化,相比于直接实例化对象,根据实际情况选择合适的设计模式完成对象的实例化,可以为复杂的业务场景带来更高的灵活性。创造型设计模式主要包括以下几种:
抽象工厂设计模式
生成器设计模式
工厂方法设计模式
原型设计模式
单例设计模式
结构型设计模式结构型设计模式用于指导我们完成对代码的结构划分,如此,代码结构会 ...