自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TangAiYun专栏

资深码农的唠叨

  • 博客(19)
  • 资源 (1)
  • 论坛 (2)
  • 收藏
  • 关注

原创 微服务限流器终极大作,年终巨献

啥也不说了,上代码先:https://github.com/tangaiyun/redislimiter-spring-boot或https://gitee.com/aiyuntang/redislimiter-spring-bootredislimiter-spring-boot一个优秀的分布式spring boot/Spring Cloud API限流框架,特别适合微服务架构...

2018-12-07 23:56:04 399 1

原创 一个把PHP开发的Restful API应用集成到Spring Cloud体系中的方案

方案思路:把php应用部署到openresty + PHP(FPM) 通过openresty的 init_worker_by_lua_block特性,在第一个worker被创建时,读取服务配置文件 把服务配置文件中的信息通过eureka或者consul的rest api,注册服务实例 如果是eureka,启动timer定时刷新心跳 当nginx被优雅关闭时(nginx -s quit)...

2018-10-30 23:13:48 1728

原创 利用Spring Cloud开发微服务并实现动态数据源路由详解

  一个典型的微服务架构中,服务应该是没有状态的,但是对于一个多租户的SAAS类系统来说,每个租户都有自己的配置和业务数据,并且不同租户的之间的数据应该要满足一定程度的隔离性。隔离方案一般有以下三种: 描述优点 缺点独立数据库一个租户一个数据库隔离级别最高,安全性最好成本较高共享数据库,隔离数据架构多个或所有租户共享Database,但是每个租户一个Schema为安全性要求较高的租户提供了一定程度...

2018-07-13 17:38:25 7920 4

原创 Spring Cloud之网关Zuul开启重试

  在Spring Cloud体系中,如果网关要支持重试要配置的点蛮多的,等我一一道来:网关工程pom.xml中要加入org.springframework.retry依赖<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artif...

2018-07-03 20:12:17 1535

原创 Spring Cloud 微服务架构下的全局id生成器,基于tweet的snowflake算法改进

概述SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序。原理SnowFlake算法产生的ID是一个64位的整型,64个bit位被分成4段:42--5--5--12 42位时间戳部分,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开...

2018-06-26 17:58:12 3583 1

原创 API 限流器(三) 在Spring Cloud 微服务体系中集成RedisRateLimiter

  这篇是API限流器这个系列的终章,就是讲述如何在Spring Cloud 微服务开发中应用我发明的先进的限流器。开篇明义,基本思路如下:1. 定义一个annotation - RedisLimiter2. 在RestController 中有URL Mapping 的方法上应用RedisLimiter注解3. 定义一个拦截器 - RateLimitCheckInterceptor,继承org....

2018-05-31 09:58:52 9606 6

原创 API 限流器(二)史上最优秀的访问频率控制器的算法设计详解

项目代码地址: https://github.com/tangaiyun/RedisRateLimiter举例如果限制的时间单位为分钟,限制前缀为一个IP(128.9.9.23),则当前有序集合的key的运算规则如下:求出当前时间所处的分钟序号: long index = Long.parseLong(jedis.time().get(0)) / 60; 当前有序集合的key为:“128.9.9....

2018-05-26 17:11:37 1839

原创 API 限流器(一):基于redis的API访问频率控制器的实现

在open API日益盛行的今天,API的访问频率控制尤为重要。Google开源的Guava中有个类叫RateLimiter,但是此类控制粒度只是秒级别的,没有提供分钟,小时,天级别的限制,而且采取的是阻塞的模式,应用起来不是很方便。本人依据Redis的有序集合开发了一个访问频率控制器,很好的实现了一种滑动窗口式的访问频率控制,经过测试每次判断耗时在5毫秒左右,适合商业应用场景。用户很容易

2016-08-22 17:46:10 5720 1

原创 基于Mycat的多租户分库方案

方案一:租户共享MyCat中的schema,schema中的表会跨越多个datanode,因此每个表应该指定primary key, sharding rule可以解析primary key中包含的租户code,从而进一步确定每个租户对应的datanode.这就要求每个表的主键生成必须要主键生成器来生成(key generator),主键生成器要满足以下要求:主键生成效率高生成的主键全局无冲突生成...

2018-04-04 11:31:02 5328 2

原创 Spring cloud中的服务自定义路由

 很多情况下我们需要服务自定义路由,比如需要灰度发布时线上验证环境、生产环境的服务实例路由是需要区分的,还有在SAAS化应用中,经常会把租户分成一个个组,每组分配几个服务实例,就是说组内服务实例共享,组间是隔离的。  本文在Spring Cloud的基础上,给出了一个服务分组和自定义路由的方案,并提供了范例代码,代码开源地址为:https://github.com/tangaiyun/custom...

2018-02-27 15:10:16 2787

原创 基于redis的分布式锁服务实现

一般的分布式锁服务要么是基于zk的,要么是基于redis,github上看了一个人写的基于redis的实现,感觉不够完美,下面是自己重新实现的。本锁的使用场景如下:确定锁的key值构建一个锁对象,构造参数有jedis对象(一般从一个pool中get得来),超时毫秒数,锁失效毫秒数调用锁的acquire()方法执行业务操作调用锁的release方法使用本锁应该要遵从以

2016-12-18 18:49:52 630

原创 cassandra 批量插入

废话不多说, maven依赖:              com.datastax.cassandra              cassandra-driver-core              2.0.3 java编程例子,例子是用cassandra存储log, log表建表语句为 create table log_original(partition

2014-07-25 10:53:43 7086 2

原创 用Jersey和Google protocol buffer 开发REST WebService

<br />环境准备:<br />jersey版本:jersey-archive-1.2-SNAPSHOT<br />pb版本: protobuf-2.3.0<br />tomcat: tomcat6.0<br /> <br />项目依赖:<br />asm-3.1.jar <br />jersey-server-1.2-SNAPSHOT.jar<br />jackson-core-asl-1.1.1.jar      <br />jersey-spring-1.2-SNAPSHOT.jar<br />

2010-07-02 19:19:00 1617

原创 改进IE的default.xsl,兼容IE和firefox

大家用IE直接打开xml文件,IE会把xml展示成一个比较原汁原味的树,其实IE是用一个名字为default.xsl来转换xml称html的,这个default.xsl是以前微软的一个XML大牛写的,但是这个default.xsl仅限于IE,我稍作改进,当然是在很多高人工作的基础上改进的,内容如下: | | XSLT REC Compliant Version of IE5 Default Sty

2009-01-04 17:54:00 1265

原创 关于DOM4J的Namespace的问题

  大家经常运用DOM4J操作XML文档,如果XML文档存在namespace的话,读写XML经常不工作,解决方案很简单的:举个例子吧:比如我一个XML文件头是这样的:        version="1.0"        initialstate="coordinator">请注意这个xml文件是带了namespace的,读写这个xml要如下操作:SAXReader reader = new

2009-01-04 17:16:00 4664

原创 Webservice传送文件的实现(AXIS2 MTOM)

工作环境:IDE: Eclipse 3.1.2                    jdk: jdk1.5.0_06                    Tomcat: apache-tomcat-5.5.15                    AXIS2:1.0(war版本和bin版本) 环境准备:http://ws.apache.org/axis2/downlo

2006-06-02 17:24:00 4277 2

原创 Tapestry入门(译作)

                                Introduction to Jakarta Tapestry                                                          (Tapestry入门)   by Rob Smith , Senior Software Engineer Object Computing

2004-05-17 18:20:00 2109 2

原创 Tapestry入门及进阶一

要Tapestry开发一个Web Application,对一个新手来说有点困难的,Tapestry由于不同于以前的Web Presentation Framework,所以不可讳言,学习曲线比较长这是事实。我先讲讲一个Web Application的大体结构:以JBuider9为开发工具,你要先建立一个工程,例如是名称是TapestryExmaple,它的workspace是F:/myproje

2004-05-11 11:24:00 2003

原创 Tapestry入门及进阶二

下面来谈谈Tapestry的开发流程。Tapestry的开发主要有两种:一种是控件的开发,一种是页面的开发,其实页面也可以被看成控件。以我的工程为例,我的控件全放在com.ht.components下以我的ToolBar为例,我的ToolBar控件放在com.ht.components.toolbar下下面有IToolItemDescirption.javaIToolItemListener.ja

2004-05-11 11:23:00 1725

jersey和Google Protocol Buffer开发Demo

jersey和Google Protocol Buffer开发的Demo 比较实用

2010-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

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