5 人生的旅客

尚未进行身份认证

暂无相关描述

等级
博文 38
排名 3w+

分布式系统那些事-分布式ID生成策略

1.数据库自增ID的弊端暴露业务数据,比如用户表采用自增ID,别人可以根据ID知道系统有多少用户分库分表时无法保证ID唯一性2.需要什么样的ID生成策略全局唯一有序性高性能,生成ID时延低可扩展,支持数据库水平扩展安全性,不能暴露业务数据3.几种ID生成方案3.1.UUIDUUID(UniversallyUniqueIdentifier)的...

2018-07-19 13:59:05

分布式系统那些事-2PC和3PC协议

前言在分布式系统中,每个节点虽然都能明确知道自己事务操作结果是成功还是失败,但是无法直接获取到其他分布式节点的操作结果。因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个称为“协调者(Coordinator)”的组件来统一调度所有的分布式节点的执行逻辑,这些被调度的节点称为“参与者(Participant)”。协调者负责调度参与者的行为,并最终决定...

2018-06-27 22:04:10

分布式系统那些事-CAP和BASE理论

CAP理论定义CAP定理(CAPtheorem),又被称作布鲁尔定理(Brewer’stheorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:一致性(Consistence)每次读取到的数据都是最近一次写的数据,等同于所有节点访问同一份最新的数据副本。可用性(Availability)每次请求都能在一定时间内获取到非错的响应——但是不保证获取的...

2018-06-27 18:32:34

扩展阿里巴巴Java开发规约插件

前言工作中难免会遇到维护别人代码的情况,那么首先就得看懂别人写的代码。如果对方写的代码混乱臃肿,维护成本必然很高,如果对方写的代码优雅清晰,那维护的人看起来必然心情愉悦。正所谓“前人栽树,后人乘凉;前人埋坑,后人骂娘”。代码首先是给人看的,其次才是给机器看到,如何编写出任何人都看到懂的代码?答案是制定规范!每个公司都会有自己的编码规范,但是往往的情况是赶项目进度或者懒惰或者个人水平...

2018-01-29 09:26:13

java.lang.UnsupportedOperationException问题探究

异常代码ListInteger>list=Arrays.asList(1,2,3);list.add(4);list.remove(1);list.clear();运行这段代码,执行的三个方法都会抛异常:java.lang.UnsupportedOperationException原因分析跟踪源码,Arrays中asList实现:/**

2018-01-22 16:07:17

MySQL优化系列之查询优化

前言MySQL优化有两大层面,第一是数据库层面,第二是硬件层面。数据库层面可以细分为以下几个方面:数据库schema设计优化SQL查询优化锁策略优化存储引擎优化服务器配置优化主从,读写分离集群,负载均衡本文讲解SQL查询优化分析你的SQLExplain查看SQL执行计划Explain命令用来帮助我们获取Query的执行计划,用法很简单:在你的Query前

2017-09-14 16:12:21

MySQL优化系列之数据库schema设计优化

前言MySQL优化有两大层面,第一是数据库层面,第二是硬件层面。数据库层面可以细分为以下几个方面:数据库schema设计优化SQL查询优化锁策略优化存储引擎优化服务器配置优化主从,读写分离集群,负载均衡本文讲解数据库schema设计优化高效的模型设计适度冗余(反范式)在很多人眼里,数据库schema满足的范式级别越高越好,目的是尽量减少数据的冗余,保持数据一致。但是适当的冗余能减少多

2017-09-14 16:07:55

MySQL Replication主从复制搭建

MySQL安装环境版本:Linux:CentOS6.5MySQL:5.7.19IP:192.168.48.33(Master)、192.168.48.34(Slave)安装步骤:1.根据Linux版本下载RPMwgetdev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm2.安装RPMyuminstallmysql-communi

2017-09-11 23:51:02

MySQL Replication主从复制原理及拓扑结构

复制解决的问题1.备份容灾不同备库分布在不用的地理位置,物理隔绝,可以用来备份数据和容灾2.负载均衡复制可以将多个读操作分布到不用的备库服务器,实现对读密集型应用的优化3.高可用性能和故障切换复制能避免MySQL单点故障,某个节点发生宕机,可以快速记性故障切换,提高系统高可用性4.MySQL升级测试这种做法较普遍,使用一个更高版本的MySQL作为备库,保证在升级全部实例前,查询能正常在其他备库上进行

2017-09-11 23:04:24

RabbitMQ消息监听异常问题探究

问题场景在使用SpringRabbitMQ做消息监听时,如果监听程序处理异常了,且未对异常进行捕获,会一直重复接收消息,然后一直抛异常。为了更好的描述问题,下面写个简单的例子。通过访问null对象来引发空指针异常,消息监听处理程序代码清单:packageamqp;importorg.springframework.amqp.core.Message;importorg.springfram

2017-09-09 10:27:54

Spring整合Quartz浅析

Quartz概念基础Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现。核心元素概念:Job:是一个接口,只有一个方法voidexecute(JobExecutionContextcontext),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMa

2017-08-15 21:19:44

Spring整合Redis之哨兵与故障转移

前言上篇博客谈到了Spring整合redis集群以及故障转移演示,会发现redis集群模式存在一个很明显的问题:当某个主节点及其所有从节点挂掉,整个集群因为缺少该节点负责范围的哈希槽(hashslot)而宕掉,不具高可用性。redis引入了哨兵(sentinel)模式,能很好解决集群模式存在的不足。引用官网,redis哨兵系统有三个作用:-监控(Monitoring):Sentinel会

2017-08-10 10:22:43

Spring整合Redis之集群与故障转移

前言本文主要讲解spring整合redis集群,关于redis集群搭建网上相关文章挺多的,大家可以自己先搭建好,可以参考官网或中文版官网。本文假设你已经搭建好集群了,笔者redis(版本4.0.1)集群环境如下图:7000、7001、7002三个主节点,7003、7004、7005三个从节点。Redis集群共有16384个哈希槽(hashslot)用于存放key,当前3个节点哈希槽分布为:-

2017-08-06 18:26:17

关于RabbitMQ的一些问题

一、三种exhange用法有何区别?DirectExchange代码示例接收端配置文件清单comsumer-context.xml,监听directQueue队列消息(简化配置,关于spring-rabbitmq的配置可以参考楼主以前的这篇博客)<!--配置队列名--><rabbit:queuename="directQueue"/><!--配置监听--><rabbit:listener-c

2017-07-24 21:20:34

list转map工具类

前言项目中时长需要用到list转map的场景,比如需要查询所有用户的订单列表,但是用户和订单不在一个库的时候,无法进行join操作,就只能程序处理:先查询一批用户,再根据用户的id列表批量查询订单列表,然后在程序中拼接用户和其对应订单。因此写了个小工具类处理,现在分享出来。工具类代码packageutils;importjava.lang.reflect.InvocationTargetExce

2017-05-23 18:56:30

Spring整合RabbitMQ简介

AMQP简介AMQP(AdvancedMessageQueuingProtoco)高级消息队列协议,属于应用层协议。他有producer、exchange、binding、queue、consumer五种角色,producer将消息发送到exchange,bingding决定exchange的消息该发往哪个queue,consumer直接从queue中读取消息。exchange是AMQP协议的

2017-04-10 11:50:09

Spring整合MyBatis后引入自定义类型转化器TypeHandler

MyBatis预定义了许多类型转化器,并不一定能满足所有的需求,如笔者遇到这么个问题:数据库字段类型为datetime时间戳类型,项目组规定ResultMap映射实体时间必须是String类型,MyBatis自带的StringTypeHandler类型转化器转化后的时间字符串会有.0这个小尾巴,然后被测试MM提了BUG。常规的解决方式改下实体的get方法,截掉这个小尾巴就行了,但是笔者觉得不够优雅,

2017-03-27 08:52:08

IntelliJ IDEA远程调试

远程服务DEBUG模式启动  远程服务以debug模式启动需要执行java命令时带上以下JVM参数java-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=naddress指定调试端口,可以按需更改。无论你的服务是普通的java进程,还是jetty、t

2016-12-12 15:46:05

MyBatis树形结构查询

前言  对于树形结构的数据库设计通常是基于继承关系设计的,也就是通过父ID关联来实现的,还有就是基于左右值编码设计。本文以继承关系设计的树形结构来讨论下MyBatis树形结构查询。以深度为二的树为例,要将这种结构的数据查询出来,通常的做法是先查询一级数据,再查询二级数据,然后在程序里组装起来,想了下,其实还可以更简单,不用分开两次,就能将不同级别数据一次性查询映射出来。  1.数据准备以区域表

2016-11-24 14:59:18

Maven插件之MyBatis Generator

MyBatisGenerator(MBG)是MyBatis和iBATIS的逆向工程插件工具,可以根据表结构自动生成实体类、包含简单的CRUD操作的mapper映射文件和mapper接口,无需手工编码,非常的方便,具体用法只需以下三步。

2016-11-07 10:52:00
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!