
组件
文章平均质量分 94
布道
专注但要有大局观(先大后小,思路为先,实验为辅)
展开
-
选 Zookeeper 作为注册中心我们还要注意些什么
Zookeeper是一个分布式协调框架,而在它的基本用法在上一节讲过了,很多同学可能会Zookeeper这么好,直接做微服务的注册中心也没啥问题的,其实关于这样点社区里也喋喋不休,几乎在dubbo的每届大会中有大篇幅的讲解。接下来将针对大牛在大厂大集群的实践中去探讨一些坑:1.注册中心是CP还是AP在之前的章节分享过关于Consul、zooKeeper、etcd、eureka作为注册中心的...原创 2019-09-01 15:00:09 · 2862 阅读 · 0 评论 -
fastDFS精讲
在一般大中型的企业对文件的存储需求多种多样,特别是在容器化技术非常流行的时代下,依然有很多采用fastDFS,Distributed file system, DFS,又叫做网络文件系统,Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。分布式文件系统是被设计用在局域网,而分布式数据存储,则是泛指应用分布式运算技术的文件...原创 2019-08-30 22:06:07 · 918 阅读 · 0 评论 -
Zookeeper快速入门
Zookeeper是一个分布式协调框架,近年来已经成为一个热门的话题,不懂用法及原理几乎会被鄙视。下面将分享下,很久之前的笔记,同时也喜欢可以达到为故而知新的目的。目录1.介绍2.应用场景3.基本概念3.1.Paxos算法3.2.ZAB协议3.3.选举3.4.集群角色3.5.会话3.6.数据模型3.7.数据节点3.8.版本3.9....原创 2019-08-28 23:00:59 · 7415 阅读 · 5 评论 -
测试4个Java运行时代码生成器的性能:cglib, javassist, JDK proxy & Byte Buddy
虽然Java的强类型及动态类型系统让你可以写出表述性强,健壮的应用程序,但是它限制了框架API与用户类型协作的能力。为此,出现了很多使用了反射API的开源库,但却破坏了类型安全,因此Java的反射API并不总是与用户类型交互的最佳方式。为了保留用户类型,最好使用了运行时代码生成的方式。程序代码生成是Java平台的固有特性当编译Java应用程序时,Java编译器为字节码服务而不是可执行程序...翻译 2019-06-29 22:33:38 · 5383 阅读 · 2 评论 -
Mybatis的核心实现Plugin、Interceptor
本章讲Interceptor其实在分享怎样的设计才是具备良好的拓展性的程序,注重内功修为的童靴可能更感兴趣。Mybatis中的插件允许你针对核心组件接口Executor 、StatementHandler、ParameterHandler、ResultSetHandler中任何一个方法进行拦截调用。而每个Interceptor(拦截的接口)其实是通过JDK的动态代理技术生成的代理类,每当执行这4种...原创 2019-06-27 17:01:15 · 2638 阅读 · 2 评论 -
Mybatis中的resultMap和resultType 和parameterMap与 parameterType的区别
说实话Mybatis的知识点不少,在之前讲过mybatis的一级缓存与二级缓存(作用于在Executor组件)。而今天的主题是parameterMap、parameterType、resultType、parameterMap,它们作用于ParameterHandler组件与ResultSetHandler 组件层。如果有人问你这类问题,其实是在考你的基本功(是否知道mybatis的架构或源码)...原创 2019-06-26 22:09:42 · 8792 阅读 · 1 评论 -
Nginx 的多进程异步模型要了解下么
Ngnix 是互联网企业使用最为广泛的高性能的反向代理服务器,为何叫反向代理之前也讲过。它可以为后端分布式服务提供负载均衡的功能,它可以将后端多个服务地址聚合为单个地址来对外提供服务。它正是采用了多进程 PreForking 异步模型达到了业界公认的高并发的处理能力。说实话使用java语言通过编码层面去实现多进程几乎奢想(找不到相关资料),接下来将使用Python来体验下多进程的魅力!N...原创 2019-06-20 22:38:14 · 895 阅读 · 0 评论 -
FastThreadLocal要了解下
Netty 作为高性能框架,对 JDK 中的很多类都进行了封装了和优化,Netty 使用了 FastThreadLocalRunnable 对所有 DefaultThreadFactory 创建出来的 Runnable 都进行了包装。netty的FastThreadLocal和FastThreadLocalThread的实现相较于Thread和ThreadLocal不再发生内存泄漏,据说读性能是...原创 2019-05-17 23:21:19 · 5414 阅读 · 0 评论 -
RxJava在业务系统中的实践
在java的世界里由于大多数接口和API都是阻塞式的交互,进而影响到很多童靴的编程思想和编程习惯。因而,有一些专家讲java的编程模型是阻塞式模型(与Node.js区别大),不是没有道理的。从高性能的视角看,任何阻塞点都可能导致性能的退步。而响应式编程其天然就是非阻塞的,当数据准备完成后自动触发下一个动作而不是等待数据完成。这种思想再结合异步化编程使得我们在统一线程模型,降低多线程编程成本的同时提...原创 2019-05-15 22:17:11 · 849 阅读 · 0 评论 -
gRPC快速入门
gRPC 是 Google 开源的基于 Protobuf 和 Http2.0 协议的通信框架,底层由netty提供。之前也简单的介绍过HTTP/2 重要特性,gRPC提供四种模式:unary,client streaming,server streaming 以及 bidirectional streaming,对于底层 HTTP/2 来说,它们都是 stream,并且仍然是一套 request...原创 2019-05-14 20:18:23 · 1826 阅读 · 0 评论 -
响应式编程 RxJava系列
近两年来国内的技术圈子中越来越多的开始提及ReactiveX,一方面反映出现在的高级开发者的追求越来越高逼格,另一方面也反映从从结构化编程到面向对象编程到函数式编程的发展历程,越来越多的应用和面试中都会有ReactiveX,响应式编程中RxJava可谓如鱼得水。最近也一直在使用rxjava,刚好有时间就把之前分享的整理出来的。前言:异步那些年我们追过的异步骚操作:ListenableF...原创 2019-04-26 20:46:42 · 28159 阅读 · 0 评论 -
RxJava 健壮性行总结:错误处理
Rxjava是一种Java语言实现的响应式编程,是创建基于事件的异步程序,是以数据流为核心,处理数据的输入,处理以及输出的。本节将要分享RxJava2一些异常处理方面的经验:当出现异常时,通过 onErrorReturn* 转换成一个正常值返回 当出现异常时,通过 onErrorResumeNext 自定义一个Publisher返回,意味着可以转换一个异常类型; 异常可以被转换,但源数据...原创 2019-04-26 15:21:58 · 1961 阅读 · 0 评论 -
Pandora Boot和spring Boot
在阿里集团内部,几乎所有的应用都用到了各式各样的中间件,比如HSF、TDDL、Diamond等等。本身中间件之间可能就有版本依赖的问题,比如你的应用HSF和Diamond分别依赖了同名jar包的不同版本,maven只会引入其中一个版本。同样的中间件和应用之间也存在同样的Jar包依赖的问题,出于要解决这些依赖冲突的问题,阿里就开发了Pandora ,中文名潘多拉,简单的来说就是一个类隔离容器。P...原创 2019-04-26 10:50:42 · 15645 阅读 · 5 评论 -
RxJava 转换操作符详解及lift 源码解析
RxJava 提供了对事件序列进行变换的支持,这是它的核心功能之一,也是大多数人说『RxJava 真是太好用了』的最大原因。所谓变换,就是将事件序列中的对象或整个序列进行加工处理,转换成不同的事件或事件序列。特别是map、flatMap、concatMap都是接受一个函数作为参数(Func1),非常常用,但很多人不知道它们通过 lift() 实现。目录1. map2. flatMap...原创 2019-04-06 20:51:58 · 966 阅读 · 0 评论 -
RxJava使用场景总结
RxJava早已经成为java圈最近3年来最流行的类库,无数优秀的开源框架中对其进行接入。但什么场景下使用,其实没有定论,以下是个人整理总结的。1. 代码迷之缩进代码中存在大量的缩进,对其可读性非常差,而RxJava提供了非常多的函数足以胜任你98%的需求。//这么多缩进,难受不public void getPng() { for (File folder : folder...原创 2019-04-04 22:31:47 · 881 阅读 · 0 评论 -
RxJava 源码解析篇
说实话rxjava 的确是我见过最绕,最强大,最复杂的类库之一,对于一般的开发者基本上都是望文却步!比如在netflix hystrix的AbstractCommand中有使用RxJava,那简直是帅到了极致,从头到尾都是链式响应,非常高逼格。为了加深对它的理解,本文将对此展开对Observer、Observable、Subscribe的源码的探索。//创建被观察者(也就是开关):Obse...原创 2019-04-04 14:54:20 · 482 阅读 · 0 评论 -
cglib 的BeanCopier高性能解密
在一些系统代码中,随处可见的BeanCopier(源于org.springframework.cglib.beans),它主要用在将PO与DTO互转。一些人在惊叹它的高性能的同时,不曾了解它的实现原理(它不使用的反射)!它基于CGLIB代理,CGLIB(Code Generation Library)是高效的代码生成包,底层依靠ASM(开源的Java字节码编辑类库)操作字节码实现。JDK动态代...原创 2019-04-02 21:52:19 · 6133 阅读 · 0 评论 -
MyBatis缓存机制
MyBatis的前身是iBATIS,它是一款优秀的支持自定义SQL查询、存储过程和高级映射的持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。在日常工作中,它是常见的Java数据库访问层框架,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患。目录1. 基本功1.1 整体架构...原创 2019-03-20 23:14:20 · 6478 阅读 · 0 评论 -
nginx gzip带来的启示
网站的流量越来越多大,对于使用nginx的优化变得非常重要,经过gzip(GNU-ZIP)压缩后页面大小可以变为原来的30%甚至更小,当用户浏览页面的时候速度会块得多。gzip是规定的三种标准HTTP压缩格式之一,目前绝大多数的网站都在使gzip传HTML、CSS、JavaScript等资源文件。目录1. gzip交互流程2. 任何内容都可以开启gzip压缩?3. ngi...原创 2019-03-18 16:08:40 · 1536 阅读 · 0 评论 -
自研数据聚合组件
随着服务化越来越多,单个VO或BO属性拆分之痛已成为业务系统日益突出的问题。大量重复的代码逻辑都是用来处理依赖(查询方面的数据聚合操作),而通讯方式通常都是rest-http。功能特性多数据源支持:springBean和普通类(理论上包含http-eureka、esb) 后置填充(目标方法执行后介入) 单VO及List支持 并发填充支持 List开启性能优化 接入方的参数传...原创 2019-03-13 09:53:02 · 916 阅读 · 0 评论 -
彻底解决POI 读写excel 发生OOM问题
说实话之前之前没怎么接触过POI组件,只知道有这么一个东西可以解决excel读写问题,但不用不知道,使用起来真心无语,到处都是坑。接下来我讲分享一些在项目中遇到的坑及解决方法,其实社区也有不少类似文章,但讲的都比较零散。1..xls与.xlsx首先,科普一些基础常识:.xls 是用03版Office Excel ,新建Excel默认保存的Excel文件格式的后缀是.xls,不可以打开...原创 2018-12-10 16:55:06 · 36007 阅读 · 0 评论 -
一步步解决mybatis使用FORCE INDEX的坑
由于项目中需要使用mysql的强制索引,于是乎就在mapper.xml中添加一个,结果运行后报错:Caused by: com.kxtx.security.data.exception.DataPermissionException: SQL 语句解析失败,请检查:SELECT id, order_no, order_type, waybill_id, waybill_no, extend_...原创 2018-11-28 11:12:59 · 16120 阅读 · 1 评论 -
GenericObjectPool对象池异常排查
在Java中有很多池管理的概念,典型的如线程池,数据库连接池,查看源码会发现这些池管理类都是继承于GenericObjectPool<T>,所以了解GenericObjectPool的工作机制。1.为何需要它采用对象池化的本意,是要通过减少对象生成的次数,减少花在对象初始化上面的开销,从而提高整体的性能。然而池化处理本身也要付出代价,因此,并非任何情况下都适合采用对象池化。最后...原创 2017-08-29 18:12:56 · 5648 阅读 · 2 评论 -
Dubbo高性能之道
1.背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本 此时,用于简化增删改查工作量的数据访问框架(ORM)是关键 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加...转载 2017-01-10 14:41:51 · 8561 阅读 · 0 评论 -
OSGI 学习笔记
OSGI最初是从嵌入式设备中发展起来的。后来由于Eclipse的成功,居于Equionx的RCP开发在桌面领域大方异彩。现在,互联网和基于浏览器的企业应用已成为整个IT业界最重要的组成部分,OSGI开始为服务器端应用和企业应用领域提供支持。OSGI 框架是一个微核结构的容器,所有的模块都需要运行在容器范围内,在 OSGI中所有模块的部署都必须以 Bundle的方式来进行部署。目录1. 前景...原创 2016-04-26 22:01:49 · 2999 阅读 · 0 评论 -
如何在高并发分布式系统中生成全局唯一Id
又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上。最近还写了一个发邮件的组件以及性能测试会在这个月整理出来,还弄了个MSSQL参数化语法生成器,会在9月整理出来,有兴趣的园友可以关注下我的博客。 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案。我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例:1.原创 2013-08-16 17:16:35 · 3039 阅读 · 0 评论