- 博客(150)
- 收藏
- 关注
原创 分布式事务之柔性事务
一. 定义在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈。在分布式领域基于CAP理论以及BASE理论,有人就提出了柔性事务的概念。CAP(一致性、可用性、分区容忍性)理论大家都理解很多次了,这里不再叙述。说一下BASE理论,它是在CAP理论的基础之上的延伸。包括基本可用(Basically Available)、柔性状态(Soft State)、最终一致性(Even...
2018-08-19 14:35:40
11915
原创 Elasticsearch原理简介
一. 简介Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,它建立在全文搜索引擎 Apache Lucene(TM) 的基础上. 当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作: • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。 • 实时分析的分布式搜索引擎。 • 可以扩展...
2018-08-18 17:48:11
3265
原创 事件溯源Event Sourcing
一. 什么是Event Sourcing?一个对象从创建开始到消亡会经历很多事件,以前我们是在每次对象参与完一个业务动作后把对象的最新状态持久化保存到数据库中,也就是说我们的数据库中的数据是反映了对象的当前最新的状态。而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实...
2018-08-12 12:08:57
2585
原创 CQRS架构
命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现分离。这属于DDD应用领域的一个模式,为了使得项目逻辑更加清晰,便于对不同部分进行针对性的优化。一. 背景问题在以前的管理系统中,命令(Command,通常用来更新数据,操作DB和查询(Query)通常使用...
2018-08-11 23:34:58
9134
转载 一篇超实用的服务异常处理指南
服务异常的处理流程负载 2.1 查看机器 cpu 的负载 top -b -n 1 |grep java|awk ‘{print “VIRT:”5,"RES:"5,"RES:"5,"RES:"6,”cpu:”9"9"9"%","mem:"10”%”}’2.2 查找 cpu 占用率高的线程 top -p 25603 -H printf 0x%x 25842 jst
2018-05-26 17:15:05
1026
转载 Java工程师成神之路(2018修订版)
主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 v1.1 2018-03-18 增加新技术知识、完善知识体系一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、...
2018-03-25 18:20:08
762
1
转载 浅谈命令查询职责分离(CQRS)模式
在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体。在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题。虽然在DB上可以做一些读写分离的设计,但在业务上如果在读写方面混合在一起的话,仍然会出现一些问题。本文介绍了命令查询职责分离模式(Command Query Responsibility S...
2018-02-10 08:55:07
1043
原创 一次AOP配错自动创建事务代理的bean引发的疑案
一.案发背景问题出现在一次发现自己的请求没有被日志记录,发现是AOP中没有配置那个服务,于是在BeanNameAutoProxyCreator是个根据bean名生成自动代理的代理创建器,声明了UrlAuditServiceImpl 这个Bean需要自动生成代理,然后被打日志的拦截器生成代理来打印日志。当时在线下的测试中,自己的接口测试都没有问题,并且也能符合预期的打印出日志,于是自己就将代码合
2018-01-07 23:16:56
408
转载 IDEA快捷键For Windows
IDEA快捷键Windows版当我们已经打开IDEA的时候,可以直接找到这些文档。打开IDEA后,在首页的顶部菜单栏中,最后一项,Help→Keymap Reference,这样依次点击之后,会出现一个PDF文档,就是IDEA的快捷键了。注意:IDEA各个版本的快捷键会有小变动,以下是2017.1.2版本里面的快捷键的PDF,如有不同可以通过上面的方式查看你自己的版本的快捷键,可以用翻译工
2017-11-18 18:19:08
2193
转载 Linux文本处理三剑客之grep命令
一、简介grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。通常grep会结合管道|来使用,比如把上一个命令得到的结果通过管道|传递到grep进行筛选二、选项-a 不要忽略二进制数
2017-10-16 15:14:43
327
转载 Linux Shell脚本详细教程
Shell简介:什么是Shell,Shell命令的两种执行方式Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
2017-10-16 14:43:35
18140
1
转载 Linux文本处理三剑客之sed命令
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件
2017-10-16 14:40:21
381
原创 ArrayList循环遍历删除元素
list里删除一个元素这个需求是经常遇见的,因为最近要进行代码反讲,正好遇上这样的代码,总结一下处理这个需求的方式和从源码分析下这样处理的原理
2017-10-15 15:50:24
1234
转载 Linux文本处理三剑客之awk命令
转载地址:点击打开链接awk是一种编程语言,用于在Linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk做大的优势。
2017-10-15 15:01:46
583
转载 微服务架构的核心要点和实现原理
微服务架构中职能团队的划分传统单体架构将系统分成具有不同职责的层次,对应的项目管理也倾向于将大的团队分成不同的职能团队,主要包括:用户交互UI团队、后台业务逻辑处理团队与数据存取ORM团队、DBA团队等。每个团队只对自己分层的职责负责,并对使用方提供组件服务质量保证。如果其中一个模块化组件需要升级、更新,那么这个变更会涉及不同的分层团队,即使升级和变更的改变很小,也需要进行跨团队沟通:需求
2017-09-24 21:13:48
762
转载 MYSQL中的MVCC
什么是MVCCMVCC即Multi-Version Concurrency Control,中文翻译过来叫多版本并发控制。MVCC是解决了什么问题众所周知,在MYSQL中,MyISAM使用的是表锁,InnoDB使用的是行锁。而InnoDB的事务分为四个隔离级别,其中默认的隔离级别REPEATABLE READ需要两个不同的事务相互之间不能影响,而且还能支持并发,这点悲观锁是
2017-08-27 22:34:17
1020
1
原创 一个注解引发的血案
一. 案发现场这天晚上正在家里看书,突然公司带来一个电话,一个师兄和我说日常环境出现了空指针问题,要我有空明天看一下,于是我立刻上机器上看了下,是一个自定义缓存类抛出的异常: 最近在开发的项目里使用了SpringCache 的缓存系统,并且实现了自定义的缓存:<bean id="tairCacheContainer" class="com.taobao.film.common.cache.T
2017-07-19 14:03:20
575
原创 缓存穿透和缓存失效的预防和解决
一.缓存穿透:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。解决办法:1.布隆过滤对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被
2017-07-14 23:43:32
5162
1
原创 如何设计RPC框架
一.RPC简介RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服
2017-07-14 08:40:37
3566
原创 tomcat 线程模型
最近看到了内网ATA上的一篇断网故障时Mtop触发tomcat高并发场景下的BUG排查和修复(已被apache采纳),引起了我的好奇,感觉原作者对应底层十分了解,写的很复杂。原来对于tomcat的线程模型不怎么清楚,但是它又是我们日常最常用的服务器,于是我对它的线程模型进行了补习。一. tomcat支持的请求处理方式Tomcat支持三种接收请求的处理方式:BIO、NIO、APR BIO模式:阻塞式
2017-07-12 09:01:43
19288
原创 并发AQS同步器
一.AQS容器架构AQS同步器拥有首节点(head)和尾节点(tail)。同步队列的基本结构如下: 队列的基本操作有:未获取到锁的线程加入同步队列(同步队列设置尾节点): 同步器AQS中包含两个节点类型的引用:一个指向头结点的引用(head),一个指向尾节点的引用(tail),当一个线程成功的获取到锁(同步状态),其他线程无法获取到锁,而是被构造成节点(包含当前线程,等待状态)加入到同步队
2017-07-10 23:02:17
465
转载 Mysql优化总结
一、MySQL 数据库性能优化之SQL优化注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础1.优化目标减少 IO 次数。IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。2.
2017-07-06 23:25:30
861
转载 一致哈希性算法
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1
2017-07-04 08:14:42
350
原创 分布式锁的实现
目前主流的实现方法有以下三种: 一.基于数据库表要实现分布式锁,最简单的方式可能就是直接创建一张锁表,然后通过操作该表中的数据来实现了。当我们要锁住某个方法或资源时,我们就在该表中增加一条记录,想要释放锁的时候就删除这条记录。创建这样一张数据库表:CREATE TABLE `methodLock` ( `id` int(11) NOT NULL AUTO_INCREME
2017-07-03 08:20:08
553
原创 ZooKeeper学习概述
一. ZooKeeper简介在集团的大量中间件中,服务的通知注册与集群管理的实现用到了zookeeper,在学习这些中间件的同时不由得对zookeeper本身产生了好奇与学习的动力,在看过不少技术文章与教程对它的概述后,对它有了一个大概的了解,并进行了总结: zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和
2017-07-02 17:29:42
380
原创 分布式事务的解决方案
随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本文将简单介绍如何有效的解决分布式的一致性问题,其中包括什么是分布式事务,二阶段提交和三阶段提交。一、普通事务与分布式事务1.1普通事务 事务是数据库管理系统执行过程中的一个逻
2017-07-01 21:07:50
673
转载 HBase详细概述
原文地址:http://blog.csdn.net/u010270403/article/details/51648462本文首先简单介绍了Hbase,然后重点讲述了hbase的高并发和实时处理数据 、HBase数据模型、HBase物理存储、HBase系统架构,HBase调优、HBase Shell访问等。不过在此之前,你可以先了解 Hadoop生态系统 ,若想运行
2017-06-24 10:25:15
571
原创 微服务架构综述
微服务架构在近几年一直很热门,尤其是随着敏捷开发、持续集成交付、DevOps、云技术、虚拟技术docker化等的深入人心,经常能在技术论坛,博客上看到相应的文章推送。正好现在我们之间使用的也是微服务架构,将一个原本巨大的单体应用进行拆分(比如有基础服务,用户中心,有提供给PC,H5的服务等),用RPC框架HSF进行微服务之间的通讯以及服务治理。于是我对微服务的概念有了一定的体会,想结合自己看过的一些
2017-06-18 23:35:20
4174
1
原创 JVM编译优化
在部分的商用虚拟机中,Java 程序最初是通过解释器(Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,即时编译器(Just In Time Compiler )会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化。一.HotSpot 内的即时编译器1.解释器和编译器各有各的
2017-06-09 00:16:14
4872
原创 HSF的原理分析
一.HSF的基本概念HSF全称为High-Speed Service Framework,旨在为淘宝的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。 二.知识准备通
2017-05-19 00:02:01
84549
11
原创 JVM调优
在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标:1.GC的时间足够的小2.GC的次数足够的少3.发生Full GC的周期足够的长 前两个目前是相悖的,要想GC时间小必须要一个更小的堆,要保证GC次数足够少,必须保证一个更大的
2017-04-28 08:39:59
402
原创 JDK8 从永久代到元空间
一.永久带到元空间的变迁 其实,移除永久代的工作从JDK1.7就开始了。JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。但永久代仍存在于JDK1.7中,并没完全移除,譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了
2017-04-22 17:54:19
6717
6
原创 Ibatis 关于DynamicSql源码的解读
一. 业务背景由于最近在做数据罗盘的开发,其中会有挺多的排序,聚会运算的要求。而我们利用了集团的garuda运算平台,想利用它建的智能索引和智能查询优化器来优化sql处理复杂业务,所以sql会堆上一些较复杂业务。比如:现在有一个需求,需要对一个二维的数组List里的数据进行迭代遍历,一维数组我们都知道可以用iterate标签遍历,如下:<iterate conjunction="," propert
2017-03-15 15:33:45
4593
转载 ibatis的dynamicSQL中,关于prepend的使用
ibatis的文档中,关于动态SQL的举例如下: Java代码 "someName" parameterClass="Account" resultMap="account-result" > select * from ACCOUNT "where"> "and" property="id" compareValue="0">
2016-10-14 00:23:33
3094
原创 Ibaitis Caused by: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean.
由于业务代码需要,用iterate来遍历整个数组,来批量查询,sqlMap如下 select id,name from yw_tag where 1=1 and id in #ids[]# 但是Junit测试一致报错:错误如下Caused by: com.ibatis.common.bean
2016-07-22 08:48:32
11009
1
原创 mysql内存已满错误解决(ErrorCode28)
今天在创建数据库和设计表时出现过比如: Error writing file './solomo/activity.frm' (Errcode: 28) 的错误看到Errode:28,我查了一下:[plain] view plain copy# perror 28 OS error code 28: No space l
2016-05-21 10:25:59
5854
原创 Serlvet 处理http请求并保持长连接
一.Servlet,一个请求在容器中是如何处理的Servlet规定的,相应客户请求访问特定Servlet流程如下:1.客户端发出请求。2.Servlet容器接收客户请求解析。3.Servlet容器创建一个ServletRequest对象。其中包含客户请求信息及其他关于客户的信息如请求头,请求正文,客户机的IP等。4.容器创建一个ServletResponse对象。5.容
2016-05-18 09:46:16
8379
1
转载 tomcat组成及工作原理
1 - Tomcat Server的组成部分1.1 - ServerA Server element represents the entire Catalina servlet container. (Singleton)1.2 - ServiceA Service element represents the combination of one or more
2016-03-22 21:10:17
553
原创 https处理的一个过程,对称加密和非对称加密
一,对称加密所谓对称加密,就是它们在编码时使用的密钥e和解码时一样d(e=d),我们就将其统称为密钥k。对称加解密的过程如下:发送端和接收端首先要共享相同的密钥k(即通信前双方都需要知道对应的密钥)才能进行通信。发送端用共享密钥k对明文p进行加密,得到密文c,并将得到的密文发送给接收端,接收端收到密文后,并用其相同的共享密钥k对密文进行解密,得出明文p。一般加密和解密的算法是公开的
2016-03-19 23:50:37
6820
原创 SSL协议以及握手过程
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加
2016-03-19 15:51:47
1397
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅