芥为之舟

企业流程架构五步法

当企业进行IT系统建设和改造的时候,一般会选择先从内部进行流程的梳理,厘定业务结构和组织架构设计,最后再对IT架构进行定义。EPF(Enterprise Process Framework)是一套关于流程梳理和IT项目实施的方法论。我自己也参与过若干个采用EPF作为理论指导的大型项目并取得了不错的成果,在这边记录一下EPF的实现过程和个人的心得。 EPF的意义 对于业务方,EPF可以作为...

ThreadPoolExecutor运行原理

Java并发工具集(J.U.C)是开发中使用使用最多的功能之一,其主要的目的是简化Java并发程序的开发过程。其中使用最频繁的则要数线程池技术。还记得刚从事工作的时候,就参考《Thinking In Java》中的例子实现了在ExecutorService基础之上的文件并发处理程序,现在还在生产环境上稳定运行。本文主要分析J.U.C中线程池的执行过程和工作原理,作为自己学习的一点总结,以下的...

Java性能优化指南(二)

在编写代码的时候,应该记住一些基本的最佳实践,从而规避潜在的性能问题。同样的任何的优化,都脱离不了具体的业务场景,各种优化原则也只有在正确的场景下才能发挥作用。 堆内存使用实践 分析堆内存 要了解系统的内存使用情况,首先要能够分析内存的使用情况,这里主要指的是JVM中的堆。 需要对堆内存进行分析的时候,一般都是出现内存溢出错误(OutOfMemoryError)的时候,可能的原因有如下...

Java性能优化指南(一)

2015年在大物流项目中,给项目团队做了几次Java性能优化和问题排查的分享,不过效果都不是很好。一直觉得偏向技术实践类的东西,单纯的听和单纯的讲收获都很有限,最好的做法是阅读学习-理解-实践-总结,这样的方式。这一份原来是我在阅读《Java性能优化权威指南》时候的阅读笔记,最近整理后在这边做一下分享。 想要让程序运行得飞快,需要深入了解程序的工作原理,在Java世界里面,这既包括了特定的...

Saga分布式事务处理

Saga 解耦和一致性 目前大量的系统采用SOA或者MicroServices的架构,其目的在于应用的解耦,和组织结构上的敏捷和灵活。结果就是服务、数据库的分离等技术呈现形态。当一个应用变成一系列解耦的服务之后,其要完成的目标和原来一体化的应用结构并没有不同。一个典型的服务化架构如下 因此产生的一个最大的问题,就在于事务的处理。单体应用,我们可以通过数据库来实现ACID的保证。那么如...

NGINX运行原理

NGINX NGINX以轻量和高性能,备受推崇,本文主要记录我在使用NGINX过程中的一些体会。 进程模型 在工作中,NGINX一般是作为负载均衡的角色存在,高效和稳定是负载均衡的核心诉求,24G内存的NGINX机器的并发支撑可以达到百万级别,对于绝大多数的业务场景来说都已经足够。探知NGINX高效的秘密首先要从其进程模型说起。 NGINX默认情况下,使用Master+Workers...

Spring事务揭秘

Did it yourself 如在介绍Mybatis的几篇文章说到的,我们平常使用的事务是依赖于数据库来完成的,而在编程过程中使用最多的Spring事务也只是封装了和数据库交互的Connection从而进一步利用Connection来完成对不同事务的管理。假设由我们自己来实现一个事务,一个典型的例子就是两个独立的数据库操作,需要保证其在一个操作单元中,更确切点就是需要保证原子性。 cl...

事务ACID,锁以及MVCC

ACID 大家都熟悉关系型数据库事务的ACID特征。以我的理解,ACID的核心问题是一致性问题,这里的一致性是一个语义上的一致性,也就是保证数据处于一个有意义的状态下或者从一个有意义的状态迁移到另外一个有意义的状态,有意义也可以理解成为广义上的数据是正确的,比如转账的例子,A向B转账作为一个事务,存在两个操作分别是A扣款,和B存款,和两个关联数据A的账户和B的账户,数据一致性要求保证在从数...