6 silk_bar

尚未进行身份认证

暂无相关简介

等级
TA的排名 6w+

支持分表的ORM框架实现

本文带大家实现一个支持分表的ORM框架,通过简单代码实现来理解核心原理惯例贴出GitHub地址:https://github.com/whiteBX/worm首先明确一个我们要实现的效果,然后再考虑实现,下面以user表作为例子:@Table("user_")@SplitKey(column = "id", tableNum = 8)public class UserDO { ...

2019-09-03 20:52:18

生成支持分布式部署的唯一id代码实现

在我们工作中,很多场景下都需要生成唯一id,比如订单号、优惠券码等,本篇文章就给大家带来如何用java实现生成唯一id。首先还是按惯例贴出github地址,可直接从github下载源码运行:https://github.com/whiteBX/IDGenerator唯一ID的核心点效率高。id生成器一般作为基础服务,需要有很良好的性能保证,不能让业务感知到明显的延时。支持分布式部署。...

2019-09-03 20:51:37

【RPC】一步一步实现基于netty+zookeeper的RPC框架(六)

上一篇实现了服务的限流,本篇来实现服务的熔断。    首先还是贴出github代码地址,想直接看代码的可以直接下载运行:https://github.com/whiteBX/wrpc    在现在的微服务架构下,由于服务众多,调用链路长,很可能其中某个服务有时会出现异常导致服务不可用,例如发布导致bug、机房网...

2019-09-03 20:50:47

【RPC】一步一步实现基于netty+zookeeper的RPC框架(五)

上一篇实现了服务的链路追踪,本篇带来限流。关于服务限流,比较流行的是1:令牌桶算法:桶算法的升级版,实现简单,应对热点请求效果更理想。2:动态限流:根据实时的统计当前时间段请求响应时间来动态调整限流数量,实现复杂,但应对各种情况效果更好。这里还是贴出github代码地址,想直接看代码的可以直接下载运行:https://github.com/whiteBX/wrpc本篇带来令牌桶实现限...

2019-09-03 20:50:08

【RPC】一步一步实现基于netty+zookeeper的RPC框架(四)

上一篇实现了服务的负载均衡,本篇带来链路追踪。关于链路追踪,大部分都是参考了谷歌的dapper论文:https://bigbully.github.io/Dapper-translation/。    通过论文总结,其中span的核心元素为:traceId,name,spanId,parentSpanId,其他则根据自身业务需要来定义即可。&nbs...

2019-09-03 20:49:31

【RPC】一步一步实现基于netty+zookeeper的RPC框架(三)

上一篇写完咱们已经具备服务注册发现/通信/通过接口调用功能了,本篇带来负载均衡策略。RPC框架中,负载均衡策略提供,其实就是根据配置,选择不同的负载策略,常见的有随机/轮询/权重几种负载策略,本篇就带大家来实现它。这里还是贴出github代码地址,想直接看代码的可以直接下载运行:https://github.com/whiteBX/wrpc首先这里主要用到了设计模式中的策略模式,定义一个...

2019-09-03 20:48:39

【RPC】一步一步实现基于netty+zookeeper的RPC框架(二)

上一篇实现了服务注册发现和基本的字符串通信功能,这一篇则是实现我们平常使用RPC框架的使用类来调用的功能。实现consumer端通过接口类来调用远程服务,主要核心在于使用动态代理和反射,这里就一步一步来实现。这里贴出github代码地址,想直接看代码的可以直接下载运行:https://github.com/whiteBX/wrpc首先来看consumer端代码,RPCConsumer完整...

2019-09-03 20:47:51

【RPC】一步一步实现基于netty+zookeeper的RPC框架(一)

随着分布式架构运用的越来越多,RPC框架成为了我们不得不掌握的知识,这里一步一步来手写一个简单的RPC框架,以博文作为记录及自我监督。首先是技术选型,这边我选用的是当前比较流行的Netty+Zookeeper来实现,通过zookeeper的特性来实现服务注册与发现,通信则使用netty框架。这里贴出github代码地址,想直接看代码的可以直接下载运行:https://github.com/...

2019-09-03 20:46:30

【spring】spring boot多数据源配置(方式二)

上篇文章讲述了一种简单粗暴的多数据源配置方式,这篇来讲一下动态切换数据源的方式配置。动态切换数据源,其核心在于一个AbstractRoutingDataSource类,通过继承此类并重写determineCurrentLookupKey方法可以实现动态切换数据源,具体切换方式可点进去看源码的determineTargetDataSource方法,比较简单,这里只记录实现。数据库准备参考上...

2019-09-03 20:45:26

你的单例真的写对了吗?能经受住反射的考验吗

在我们日常的用法以及面试过程中,说到写单例,绝大部分都是采用二段锁写的,代码如下:public class Singleton { private volatile static Singleton singleton; /** * 私有构造器 */ private Singleton() { } public static ...

2018-05-01 21:09:22

发奖控制数量的几种方式(锁,数据库锁,分布式锁,无锁)

在我们日常编码过程中,做营销类系统时,一定会遇到发奖、秒杀等业务,在这些业务中,奖品数量的控制尤为重要,如果没控制好,多发了奖品,会对运营成本造成超支,或者影响用户体验。本篇就介绍几种数量控制方案,供大家讨论。一:通过锁控制数量最简单直白的方式就是通过java自带的锁来控制数量的发放,伪代码如下: synchronized(this) { int coun...

2018-04-19 22:37:16

【设计模式】状态模式

状态模式定义:当一个对象内在状态改变时运行其改变行为,这个对象看起来像改变了其类。    在我们if else超过3层的时候,很多时候我们会想到状态模式,其可以使代码结构看起来更清晰也利于扩展,其核心就是封装性,将状态的改变封装起来,客户端不用关心状态的改变,但是实际内部是有状态的转换的。    首先依旧是假定一个场景:我们平常玩网游的时候都会有杀人系统,这里简化一下,玩家分为白名,黄名,红名玩家

2017-04-10 19:48:15

【Spring源码】AOP部分源码解读

在之前的文章【设计模式】动态代理模式和【设计模式】策略模式中都讲到了AOP中有用到,今天就带领大家读读部分源码。    话不多说,我们直接先来看类图,之后再逐步分析:    首先根据类图中的入口,直接来看类ProxyFactoryBean,可以看到类ProxyFactoryBean实现了FactoryBean接口,实现这个接口的方法,我们就直接去看他的getObject方法(关于这点不太清楚的同学

2017-03-13 21:30:34

【设计模式】责任链模式

责任链模式是一种很常见的模式,我们平常开发中都会用到它,比如我们常用的Filter,就是一种责任链模式。    依旧举例说明,先来看如下一个例子:假如我们想买车,需要问老婆是否同意,你老婆要是做不了主,就要去问你的妈妈,同样你妈妈也做不了主呢,那么就要去问你的爸爸。这样形成的链路就是责任链,有权处理就直接处理,无权处理则交由下一级处理。下面来看类图:    接下来来看实现:    首先是我们的请求

2017-03-12 17:20:22

【Spring源码解读】BeanFactory和FactoryBean区别及类装载源码解读

最近读代码读到Bean装载过程,顺带上网搜了下BeanFactory和FactoryBean,发现好多文章都讲的不清不楚,特此自己来整理了一份BeanFactory和FactoryBean的区别及讲下bean的装载和读取过程的源码.    首先来看下BeanFactory和FactoryBean,借着例子作为入口来进行后面的源码分析.BeanFactory和FactoryBean的定义:publi

2017-03-09 20:23:46

【设计模式】策略模式

策略模式是一种很常用的模式,尽管他有一些缺点,但是在我们日常代码中依旧经常用到,另外大家可以看Spring的AopProxy就有用到,今天比较晚了,下次抽时间给大家带来那段源码解析。    首先来看策略模式的定义:定义一组算法,将每个算法都封装 起来,并且使它们之间可以互换。这里依旧举例来说明:假定现有需求,对于用户的各种不同行为增加不同的积分,比如用户登录一次增加5积分,用户注册增加15积分,这

2017-03-07 22:07:43

【漫谈】跨库事务控制方案

很多时候我们都会接触到跨库事务的问题,本篇就以常说的跨行转账作为例子来提供一种方案,供大家参考。    首先,我们知道跨库的话,数据库层级是做不到事务控制的,只能通过逻辑层实现事务控制,那么本篇文章就给大家提供一种方案:利用中间表实现跨库事务控制。    先大致讲述下方案:新建中间库,在用户调用转账逻辑时,生成唯一凭证,此凭证作为接口幂等依据,入库一条数据,状态为待处理,并通知用户转账请求已提交

2017-03-05 22:24:01

【并发编程】当我们谈论线程安全时我们在谈论什么

线程安全是一个老生长谈的话题,做开发的人人都会碰到且谈论这个话题,今天就来从内存角度上深入剖析一下什么是线程安全。       首先,我们知道jvm内存总体来讲分为:栈、堆、程序计数器、方法区。其中又分为线程私有(每个线程单独维护)和线程共享的区域,线程私有区域不会涉及多线程间通信和同步问题,所以线程安全肯定是出现在线程共享区域的。       接下来提出一个问题,上述4个内存区域中,哪些是线程私

2017-03-04 13:38:06

【设计模式】动态代理模式

上篇讲述了普通代理模式,今天来讲讲动态代理.说起动态代理,大家可能首先想到的就是Spring的AOP.我们天天在说AOP是通过动态代理实现的,那么动态代理到底是个什么呢?看完这篇文章你就会明白,同时也明白AOP到底是哪里用到了动态代理.    首先,我们来看动态代理的定义:动态代理是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象的一种特殊代理模式。    接下来还是通过实例来学习吧,假

2017-03-03 16:53:15

【设计模式】代理模式

代理模式是一个使用率非常高的模式,其定义为:为其他对象提供一种代理以控制对这个对象的访问.    这里举一个日常生活中我们都会碰到过的例子,比如我们在玩网游时,不想自己去重复的打怪升级,只想安安心心跟人PK娱乐,但是不升级又跟不上大众的步伐,这时怎么办呢?游戏代练这个行业就由此而生,我们可以把账号交给代练,由他们帮我们打怪升级,等升级完后,我们再拿账号玩别的.这里的游戏代练过程就相当于对于玩家玩游

2017-03-02 16:17:53

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。