自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 如何构建分布式系统的知识体系

对于开发工程师们来说,相信对于这种招聘要求的描述并不陌生:”熟悉分布式系统的设计和应用;熟悉分布式、缓存、消息、搜索等机制;能对分布式常用技术进行合理应用,解决问题”。 现在基本上大多数大、中型企业都会要求工程师们,除了要能在分布式环境中进行开发,还要了解其中的原理、机制,对于架构师来说还需要能...

2018-09-02 21:57:48 2678 7

原创 分布式微服务架构的技术体系

花了一些时间对微服务架构体系的理论以及实践进行了总结。一部分课程已经整理完毕上线了。 课程链接:微服务架构的技术体系详解 课程简介: 微服务架构的技术体系、社区目前已经越来越成熟。在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构演进时,很多架构师、运维工程师会考...

2018-07-10 20:55:19 5288 5

原创 JVM性能调优实践——G1 垃圾收集器分析、调优篇

前言 关于G1 GC以及其他垃圾收集器的介绍可以参考前一篇JVM性能调优实践——G1 垃圾收集器介绍篇。了解了G1垃圾收集器的运行机制之后,就可以针对一些GC相关参数来调整内存分配以及运行策略。下文的调优主要针对G1垃圾收集器进行介绍,以及会分析一下G1 GC的日志格式。 ...

2018-06-04 13:58:15 10790 13

原创 JVM性能调优实践——G1 垃圾收集器介绍篇

前言 前面两篇主要整理了性能测试的主要观察指标信息:性能测试篇,以及JVM性能调优的工具:JVM篇。这一篇先简单总结一下GC的种类,然后侧重总结下G1(Garbage-First)垃圾收集器的分代,结合open-jdk源码分析下重要算法如SATP,重要存储结构如CSet、RSet、TLAB、PL...

2018-05-30 17:34:59 15981 39

原创 JVM性能调优实践——JVM篇

前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性能指标分析。 JVM的调优和故障处理可以使用JDK的几个常用命令工具。因为本文是基于D...

2018-05-24 11:46:49 28097 5

原创 JVM性能调优实践——性能测试篇

前言 本文主要基于工作中,关于性能调优的一些零散的信息整理。总结性的信息,以测试环境为例。系统信息如下: os: Linux 64位 jdk:java version “1.8.0_121”, HotSpot(TM) 64-Bit Server VM docker version: 1...

2018-05-15 17:11:56 5261 0

原创 Mysql InnoDB连接池占满问题

简单做一下线上问题排查的记录。使用的Mysql引擎是 InnoDB 5.7。 排查log 通过排查应用日志(只有其中一台机器),可以马上定位到问题是数据库连接池满了。具体日志如下: 2018-05-10 10:42:16.824 WARN 5 [xec-3303...

2018-05-11 22:22:28 6150 0

原创 SpringData3.x以及SpringBoot2集成Elasticsearch5.x

说明 关于如何在SpringBoot 1.x 的版本中集成Elasticsearch 2.x可以参考前文Elasticsearch实践(二)在Springboot微服务中集成搜索服务。2017年底,SpringData项目终于更新了Elasticsearch5.x版本的对应release版本:3...

2018-01-26 11:14:50 14585 1

原创 基于Spring-statemachine的有限状态机(FSM)的介绍及示例

前言本文主要介绍一下状态机以及相关的一些概念。结合一个简单的订单状态流程,示例怎样在Springboot中集成Spring-statemachine。有限状态机(Finite-state machine)有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示...

2017-11-26 20:31:19 43097 16

原创 Elasticsearch实践(二)在Springboot微服务中集成搜索服务

关于如何用Docker搭建Elasticsearch集群环境可以参考前一篇:Elasticsearch实践(一)用Docker搭建Elasticsearch集群。本文主要介绍,如果在Springboot体系中集成Elasticsearch服务。本文基于:Elasticsearch版本是2.2.4,...

2017-11-23 14:32:57 35006 9

原创 Elasticsearch实践(一)用Docker搭建Elasticsearch集群

前言本系列文章主要是针对之前搭建以及实践基于springboot的搜索服务的总结。主要分为两部分: 1. 对于用Docker搭建分布式Elasticsearhc集群的一个介绍,以及一些实施中遇到问题的总结。(本篇) 2. 后面一篇会整理一下在基于Springboot的微服务体系中,如何更轻量级...

2017-11-18 10:21:24 24913 8

原创 基于docker-swarm搭建持续集成集群服务

前言本文只为自己搭建过程中的一些简单的记录。如果实践中有疑问,可以一起探讨。 为了能在本机(macOS)模拟集群环境,使用了vb和docker-machine。整体持续集成的几个机器设施如下: 服务节点:三个manager节点,一个worker节点。manager需要占用更多的资源...

2016-12-18 17:39:02 20826 0

原创 通过字节码分析JDK8中Lambda表达式编译及执行机制

关于Lambda字节码相关的文章,很早之前就想写了,线上产品的后端技术,能快速迭代,除了得益于整体微服架构之外,语言层面上,也是通过Java8的lambda表达式的运用以及rxJava响应式编程框架,使代码更加简洁易维护,调用方式更加便捷。本文将介绍JVM中的方法调用相关的字节码指令,重点解析JD...

2016-04-23 13:07:01 24545 15

原创 基于Redis实现分布式锁-Redisson使用及源码分析

在分布式场景下,有很多种情况都需要实现最终一致性。在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA事务(两阶段提交,数据源可分开),也可以借助消息中间件(消费者处理需要能幂等)。通过Observer模...

2016-04-14 13:40:26 32739 9

原创 领域服务、领域事件

综合前两篇总结,这篇对领域服务和领域事件做一个梳理。先说明下本文的领域服务和应用服务。SOA服务,或者应用间的RPC调用,Restful接口,或者通过消息中间件进行系统间的交互的,都可以归类为应用服务。相较之下,领域服务不一定涉及到远程调用或者重量级事务操作。所以上下文集成也就涉及到,怎样的方式去...

2016-03-12 19:19:09 22245 0

原创 领域驱动设计整理——实体和值对象设计

实体引言在领域驱动设计里,实体的设计可以说是通用语言的核心,也是最开始在模型划分中需要考虑的。怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。 实体是具有可变性的,这是一个和值对象比较...

2016-01-10 21:49:10 21466 0

原创 领域驱动设计整理——概念&架构

领域、子域、限界上下文DDD(Domain-Drive Design)的概念或者说业界的声音其实可以追溯到几十年前了。最近开始想要系统得整理一下DDD的一些东西。这一篇是一个简单的引子,也是mark一下自己接触到的概念和理解。 对于领域的概念其实很好理解,就如字面意思一样,比如出版书籍领域,广告...

2015-12-13 16:53:15 21161 0

原创 Docker 容器部署 Consul 集群

Consul 介绍  Consul 提供了分布式系统的服务发现和配置的解决方案。基于go语言实现。并且在git上开放了源码consul-git。consul还包括了分布式一致协议的实现,健康检查和管理UI。Consul和zk相比较起来,更加轻量级,而且一致性上基于RAFT算法,zk使用的Paxos...

2015-09-29 13:39:31 24018 0

原创 ASM(六) 利用TreeApi 动态生成以及转换方法字节码

一、MethodNode概述      ASM的TreeApi 对于Method的转换、生成也提供了一系列的组件和接口。其功能主要基于前一章提到的MethodNode类。MethodNode中大多数属性和方法都和ClassNode类似,其中最主要的属性就是InsnList了。InsnList是一...

2015-08-29 18:52:50 20796 1

原创 从字节码指令看重写在JVM中的实现

Java是解释执行的,包括动态链接的特性,都给解析或运行期间提供了很多灵活扩展的空间。面向对象语言的继承、封装和多态的特性,在JVM中是怎样进行编译、解析,以及通过字节码指令如何确定方法调用的版本是本文如下要探讨的主要内容,全文围绕一个多态的简单举例来看在JVM中是如何实现的。

2015-07-30 19:22:35 19147 0

原创 ASM(五) 利用TreeApi 解析生成及转换Class

篇开始介绍ASM另一部分主要的Api。TreeApi。这一部分源码是关联的asm-tree-5.0.4的版本。 在介绍前,先要知道一点, Tree工程的接口基本可以完成大部分我们之前介绍的Core中的功能。但是在实际使用中更加便利,当然也会更加消耗时间和性能。完成一个简单的生成编译后...

2015-07-15 19:57:27 19975 0

原创 ASM(四) 利用Method 组件动态注入方法逻辑

这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变...

2015-07-02 20:17:39 20010 2

原创 ASM(三) 利用Method组件动态生成方法的字节码

一、概述       ASM的CoreApi 中还提供了对class 中方法的生成和解析的组件。前面两篇着重介绍了ClassVisitor 组件的应用场景。ClassVisitor Api 中的visitMethod(int access, String name, String desc, St...

2015-07-01 21:48:30 19681 0

原创 JVM StackMapTable 属性的作用及理解

在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack M...

2015-07-01 21:48:24 22137 7

原创 JVM 字节码指令对于栈帧数据操作举例

这一篇其实是对前面一篇《JVM字节码执行模型及字节码指令集》的一个延续和举例。结合例子看一下条件判定和无条件跳转指令对虚拟机栈的数据操作。       我们先来看一段代码例子。这里addEspresso()添加浓度方法会判断参数,如果参数 package bytecode; /** * ...

2015-06-21 16:23:14 18186 0

原创 JVM字节码执行模型及字节码指令集

JVM执行模型,是如何把Class文件里的字节码转换成我们的虚拟机栈的操作指令,以及整个虚拟机栈的内部数据结构是怎样的,这篇文章后续会详细介绍,并且稍微扩展下JVM规范中的一些字节码指令集。

2015-06-19 16:25:05 21325 3

原创 ASM(二) 利用Core API 变更类成员

这一篇把这producer(ClassReader)和consumer(ClassWriter)来结合起来介绍一下如何动态添加 移除 Java 类成员以及利用一些ASM工具类。

2015-06-13 17:32:38 18613 0

原创 ASM(一) 利用Core API 解析和生成字节码

ASM是一个提供字节码解析和操作的框架。Cglib框架就是基于ASM框架实现的,被广泛应用的Hibernate,Spring就是基于Cglib 实现了AOP技术。     在说到AOP的Java实现,可能会优先想到java的Proxy api,通过invoke方法拦截处理相应的代码逻辑,但是pro...

2015-06-09 18:58:44 19600 0

原创 基于Docker的微服务架构的企业级服务集群实践(五)—— 服务集群

服务集群的解决方案 企业在实践使用Docker部署、运行微服务应用的时候,无论是一开始就布局微服务架构,或者从传统的单应用架构进行微服务化迁移。都需要能够处理更复杂的集群中的服务调度、编排、监控等问题。下面主要为大家介绍在服务集群下,如何更安全、高效得使用Docker,以及在架构设计上,需要考虑...

2018-05-31 09:53:39 1875 0

原创 基于Docker的微服务架构的企业级服务集群实践(四)—— 持续集成部署

微服务的持续集成部署 前三篇主要介绍了微服务的服务发现、服务通信以及API Gateway。整体的微服务架构的模型初见。在实际的开发、测试以及生产环境中。使用Docker实现微服务,集群的网络环境会更加复杂。微服务架构本身就意味着需要对若干个容器服务进行治理,每个微服务都应可以独立部署、扩容、监...

2018-05-31 09:53:28 3326 0

原创 基于Docker的微服务架构的企业级服务集群实践(三)——API Gateway的使用

使用API Gateway处理微服务请求转发、合并 前面两篇Docker微服务的服务发现以及Docker微服务的服务间通信机制。主要介绍了如何解决微服务的服务发现和通信问题。 在微服务的架构体系中,为了减少服务间的耦合,在划分服务间的限界上下文的时候。会尽量减少微服务之间的 调用。在实际的需求...

2018-05-31 09:53:16 3814 2

原创 基于Docker的微服务架构的企业级服务集群实践(二)——服务间通信

服务间的IPC机制 按照微服务的架构体系,解决了服务发现的问题之后。就需要选择合适的服务间通信的机制。如果是在Springboot应用中,使用基于Http协议的REST API是一种同步的解决方案。而且Restful风格的API可以使每个微服务应用更加趋于资源化,服务化的松耦合思想靠近。 如果...

2018-05-31 09:53:00 2732 0

原创 基于Docker的微服务架构的企业级服务集群实践(一)——服务发现

前言 基于Docker的容器技术是在15年的时候开始接触的。两年多的时间,作为一名Docker的DevOps,也见证了Docker的技术体系的快速发展。本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结。希望给在创业初期探索如何布局服务架构体系的DevOps,或者想初步了解企业级架...

2018-05-31 09:52:48 4940 0

原创 Vagrant中搭建Docker虚拟环境(下)-Mac

Docker 是一种支持轻量级、能快速到秒级部署的虚拟化容器。Docker构建在LinuxContiner上,跟普通的虚拟机不同,Docker是在操作系统层面上的虚拟化,而不是硬件层面上。所以Docker从应用级别的隔离上,系统资源消耗小,可以做到更轻量级的跨平台。 所以,我们可以...

2015-09-24 20:09:20 15685 0

原创 Vagrant中搭建Docker虚拟环境(上)-Mac

Vagrant提供了可配置、可复用的虚拟开发和部署环境,对于开发人员来说,Vagrant可以帮你统一团队成员的开发环境。也可以提供一套一致的线上线下环境。vagrant 在mac上通过命令行工具可以管理统一的镜像(BOX)所以vagrant还需要依赖VirtualBox等提供系统(支持linux,...

2015-09-24 19:54:16 14327 0

原创 Java 并发包之线程池和原子计数

对于大数据量关联的业务处理逻辑,比较直接的想法就是用JDK提供的并发包去解决多线程情况下的业务数据处理。线程池可以提供很好的管理线程的方式,并且可以提高线程利用率,并发包中的原子计数在多线程的情况下可以让我们避免去写一些同步代码。     这里就先把jdk并发包中的线程池处理器ThreadPool...

2015-07-01 21:48:19 13849 0

原创 Flex&iBatis&Hibernate&Spring—师徒奶茶系统V1总结

昨晚只睡了两个小时来改进这个属于我们“下午茶”师徒群的同学们。主要是用Flex做前端,Java做后台。其实整个系统搭建起来很容易,因为Flex&Java应该说是我最熟悉的吧。为了快速和友好的交互,当然还是用这个。不过这次比较傻的是,前几天实现的用户列表的增删查改是用iBatis,主要原因是...

2015-07-01 21:48:07 620 0

原创 寒假的唠叨

年快过完了,寒假也快结束了。与以往不同的是,这次放假不是回学校而是直接去公司实习。现在寒假过了大半了,想唠叨唠叨……      刚放假的时候买了6本书,包括Maven,云计算,架构设计,经济管理,世界咖啡以及不可或缺的小说。每周会定时买CBNWeekly(第一财经周刊)翻翻看。书没有都看完,杂志...

2015-07-01 21:47:56 1039 5

原创 iBATIS&Spring合奏(五)--整合lucene搜索表字段内容

之所以加上lucene来建立搜索引擎,是因为其轻便简单以及快速。Lucene作为开源社区很好的建立搜索引擎的框架也给我们(Java程序员)提供了很友好的方式。这次介绍的也是简单的整合,对于Lucene的一些复杂特性还请大家仔细阅读文档以及书籍或求助Google以及源码。       其实这篇博客早...

2015-07-01 21:47:51 9766 0

原创 iBATIS&Spring合奏(四)--设计模式in iBATIS

现在总结一下iBATIS框架中用到的优美的设计模式。并不是强调设计模式有多强大或者iBATIS有多牛叉,只是在看源码的过程中的一些丝丝缕缕,觉得有很多值得学习的地方。按照不同层次的实现一点点分析和整理。以下的类图和序列图有画的不到位的地方请见谅,因为实在不很在行,用EA画图很痛苦……       ...

2015-07-01 21:47:45 9882 0

提示
确定要删除当前文章?
取消 删除