摘要:背景 用户中心是授权逻辑与用户信息相关逻辑构建的应用。分布式系统中,大多数业务都需要和用户中心打交道,为了保证用户中心服务的高可用,避免不了做缓存、导入搜索引擎从而降低数据库的压力。然而有些不经过用户中心授权的业务场景查询用户中心的数据,可能引发大量无效的查询,发生缓存穿透,直接对搜索引擎和数据库造 阅读全文
posted @ 2020-04-13 20:38 胡峻峥 阅读(359) 评论(0) 推荐(0) 编辑
摘要:前言 限流是分布式系统设计中经常提到的概念,在某些要求不严格的场景下,使用Guava RateLimiter就可以满足。但是Guava RateLimiter只能应用于单进程,多进程间协同控制便无能为力。本文介绍一种简单的处理方式,用于分布式环境下接口调用频次管控。 如何防止恶意IP攻击某些暴露的接 阅读全文
posted @ 2020-03-29 19:30 胡峻峥 阅读(523) 评论(0) 推荐(0) 编辑
摘要:延迟队列 延迟队列,也就是一定时间之后将消息体放入队列,然后消费者才能正常消费。比如1分钟之后发送短信,发送邮件,检测数据状态等。 Redisson Delayed Queue 如果你项目中使用了redisson,那么恭喜你,使用延迟队列将非常的简单。 基于Redis的Redisson分布式延迟队列 阅读全文
posted @ 2020-03-28 19:30 胡峻峥 阅读(536) 评论(0) 推荐(0) 编辑
摘要:@Validated和@Valid对比 Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR-303规范),配合BindingResult可以直接提供参数 阅读全文
posted @ 2020-03-26 09:05 胡峻峥 阅读(316) 评论(1) 推荐(1) 编辑
摘要:高可用背景介绍 高并发、高可用是互联网分布式系统架构设计中必须考虑的因素之一。 首先来说说高并发,啥是高并发,怎样才算是高并发。个人认为在衡量一个业务系统的并发能力,需要有一个维度,其中最重要的两个衡量标准是业务复杂度和硬件配置(cpu、内存、磁盘、带宽、网卡)。高并发的本质并不是一个数字这么简单, 阅读全文
posted @ 2019-12-10 10:15 胡峻峥 阅读(274) 评论(0) 推荐(0) 编辑
摘要:前言 在分布式系统中,http服务调用少不了HttpClient工具类。相信大家使用apache的HttpClient进行http的交互处理已经很长时间了,而httpclient内部其实使用了http连接池,想必大家也没有关心过连接池的管理。事实上,通过分析httpclient源码,发现它很优雅地隐 阅读全文
posted @ 2019-10-08 00:44 胡峻峥 阅读(3538) 评论(2) 推荐(2) 编辑
摘要:背景 最近接手了一个系统,其功能都是查询。查询分了两种方式,一种是公司集团提供的查询能力,支持全国各个省份的查询,但是业务高峰期时服务响应比较慢;另外一种是各省的分公司都分别提供了对应的查询能力,但是服务质量相对较差,业务高峰期服务超时较多,而且分公司系统升级时也会影响服务质量。为了提升服务查询的成 阅读全文
posted @ 2019-09-23 09:04 胡峻峥 阅读(282) 评论(0) 推荐(0) 编辑
摘要:国际化信息理解 国际化信息也称为本地化信息 。 Java 通过 java.util.Locale 类来表示本地化对象,它通过 “语言类型” 和 “国家/地区” 来创建一个确定的本地化对象 。举个例子吧,比如在发送一个具体的请求的时候,在header中设置一个键值对:"Accept-Language" 阅读全文
posted @ 2019-09-16 09:09 胡峻峥 阅读(1548) 评论(0) 推荐(0) 编辑
摘要:Java + robotframework + seleniumlibrary 使用Robot Framework Maven Plugin(http://robotframework.org/MavenPlugin/)执行自动化测试 chromedriver下载: http://chromedri 阅读全文
posted @ 2019-08-11 15:58 胡峻峥 阅读(388) 评论(0) 推荐(0) 编辑
摘要:背景 目前开发过程中,按照公司规范,需要依赖框架中的缓存组件。不得不说,做组件的大牛对CRUD操作的封装,连接池、缓存路由、缓存安全性的管控都处理的无可挑剔。但是有一个小问题,该组件没有对分布式锁做实现,那就要想办法依靠缓存组件自己去实现一个分布式锁了。 什么,为啥要自己实现?有现成的开源组件直接拿 阅读全文
posted @ 2019-08-05 08:43 胡峻峥 阅读(1797) 评论(0) 推荐(1) 编辑
摘要:上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理。接下来根据zookeeper的特性,简单实现一个分布式配置中心。 配置中心的优势 1、各环境配置集中管理。 2、配置更改,实时推送,jvm环境变量及时生效。 3、依靠配置变更,动态扩展功能,减少二次上 阅读全文
posted @ 2019-06-06 16:43 胡峻峥 阅读(1348) 评论(6) 推荐(1) 编辑
摘要:最近在学习zookeeper,发现zk真的是一个优秀的中间件。在分布式环境下,可以高效解决数据管理问题。在学习的过程中,要深入zk的工作原理,并根据其特性做一些简单的分布式环境下数据管理工具。本文首先对zk的工作原理和相关概念做一下介绍,然后带大家做一个简单的分布式配置中心。 zookeeper介绍 阅读全文
posted @ 2019-05-19 09:07 胡峻峥 阅读(2330) 评论(3) 推荐(0) 编辑
摘要:前两篇(Spring MVC源码——Root WebApplicationContext 和 Spring MVC源码——Servlet WebApplicationContext)讲述了springmvc项目创建上下文的过程,这一篇带大家了解一下springboot项目创建上下文的过程。 Spri 阅读全文
posted @ 2019-05-13 09:13 胡峻峥 阅读(965) 评论(0) 推荐(1) 编辑
摘要:上一篇笔记(Spring MVC源码——Root WebApplicationContext)中记录了下 Root WebApplicationContext 的初始化代码.这一篇来看 Servlet WebApplicationContext 的初始化代码 DispatcherServlet 是另 阅读全文
posted @ 2019-05-07 13:16 胡峻峥 阅读(620) 评论(3) 推荐(2) 编辑
摘要:Spring MVC源码——Root WebApplicationContext 打算开始读一些框架的源码,先拿 Spring MVC 练练手,欢迎点击这里访问我的源码注释, SpringMVC官方文档一开始就给出了这样的两段示例: WebApplicationInitializer示例: web. 阅读全文
posted @ 2019-05-06 15:22 胡峻峥 阅读(1226) 评论(2) 推荐(1) 编辑
摘要:一、前言 最近做了电子发票的需求,分省开票接口和发票下载接口都有一定的延迟。为了完成开票后自动将发票插入用户微信卡包,目前的解决方案是利用线程池,将开票后插入卡包的任务(轮询分省发票接口,直到获取到发票相关信息或者轮询次数用完,如果获取到发票信息,执行发票插入微信卡包,结束任务)放入线程池异步执行。 阅读全文
posted @ 2019-04-06 23:08 胡峻峥 阅读(894) 评论(3) 推荐(0) 编辑
摘要:一、Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync AsyncConfigurationSelector的作用是从两个异步配置类中选择一个来完成底层异步代理的工作。这个两个配置类分别是AspectJAsyncConfiguration、ProxyAsyncConfig 阅读全文
posted @ 2019-03-18 17:50 胡峻峥 阅读(1494) 评论(0) 推荐(2) 编辑
摘要:一、引入依赖 二、PDF转PNG代码 三、PNG中文方块乱码 查看linux服务器上的字体库如下。 转换后的PNG如下。 日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light 阅读全文
posted @ 2019-03-10 23:50 胡峻峥 阅读(3105) 评论(0) 推荐(0) 编辑
摘要:一、前言 本文章所讲并没有基于Aspectj,而是直接通过Cglib以及ProxyFactoryBean去创建代理Bean。通过下面的例子,可以看出Cglib方式创建的代理Bean和ProxyFactoryBean创建的代理Bean的区别。 二、基本测试代码 测试实体类,在BPP中创建BppTest 阅读全文
posted @ 2019-03-03 00:50 胡峻峥 阅读(1812) 评论(6) 推荐(1) 编辑
摘要:前言 之前研究了一下如何使用ScheduledThreadPoolExecutor动态创建定时任务(Springboot定时任务原理及如何动态创建定时任务),简单了解了ScheduledThreadPoolExecutor相关源码。今天看了同学写的ThreadPoolExecutor 的源码解读,甚 阅读全文
posted @ 2019-02-12 14:13 胡峻峥 阅读(203) 评论(0) 推荐(0) 编辑
摘要:一、前言 上周工作遇到了一个需求,同步多个省份销号数据,解绑微信粉丝。分省定时将销号数据放到SFTP服务器上,我需要开发定时任务去解析文件。因为是多省份,服务器、文件名规则、数据规则都不一定,所以要做成可配置是有一定难度的。数据规则这块必须强烈要求统一,服务器、文件名规则都可以从配置中心去读。每新增 阅读全文
posted @ 2019-02-07 22:02 胡峻峥 阅读(9948) 评论(2) 推荐(4) 编辑
摘要:一、前言 最近负责支付宝小程序后端项目设计,这里主要分享一下用户会话、接口鉴权的设计。参考过微信小程序后端的设计,会话需要依靠redis。相关的开发人员和我说依靠Redis并不是很靠谱,redis在业务高峰期不稳定,容易出现问题,总会出现用户会话丢失、超时的问题。之前听过JWT相关的设计,决定尝试一 阅读全文
posted @ 2019-01-20 00:25 胡峻峥 阅读(4104) 评论(4) 推荐(2) 编辑
摘要:一、前言 最近带着两个兄弟做支付宝小程序后端相关的开发,小程序首页涉及到很多查询的服务。小程序后端服务在我司属于互联网域,相关的查询服务已经在核心域存在了,查询这块所要做的工作就是做接口中转。参考了微信小程序的代码,发现他们要么新写一个接口调用,要么新写一个接口包裹多个接口调用。这种方式不容易扩展。 阅读全文
posted @ 2019-01-10 18:42 胡峻峥 阅读(1182) 评论(2) 推荐(0) 编辑
摘要:前言 之前读过一些类的源码,近来发现都忘了,再读一遍整理记录一下。这次读的是 JDK 11 的代码,贴上来的源码会去掉大部分的注释, 也会加上一些自己的理解。 Map 接口 这里提一下 Map 接口与1.8相比 Map接口又新增了几个方法: 这些方法都是包私有的static方法; of()方法分别返 阅读全文
posted @ 2019-01-06 23:56 胡峻峥 阅读(546) 评论(1) 推荐(1) 编辑
摘要:支付宝官方解密文档:https://docs.alipay.com/mini/introduce/aes 虽然是参考代码,但个人感觉太随意了。做了一些简单的修改,编译和逻辑都没有问题了。 解密报文示例。 阅读全文
posted @ 2018-12-27 13:19 胡峻峥 阅读(947) 评论(0) 推荐(1) 编辑
摘要:一、前言 由于之前写过的一片文章 (java接口签名(Signature)实现方案 )收获了很多好评,此次来说一下另一种简单粗暴的签名方案。相对于之前的签名方案,对body、paramenter、path variable的获取都做了简化的处理。也就是说这种方式针所有数据进行了签名,并不能指定某些数 阅读全文
posted @ 2018-12-26 13:51 胡峻峥 阅读(5693) 评论(12) 推荐(0) 编辑
摘要:工程中的nginx配置 nginx配置详解参考:Nginx配置文件(nginx.conf)配置详解 include /home/xxx/opt/nginx/conf.d/mime.types; 参考:nginx proxy_pass和rewrite的区别 Nginx之proxy_redirect详解 阅读全文
posted @ 2018-12-14 13:26 胡峻峥 阅读(4158) 评论(0) 推荐(0) 编辑
摘要:CacheManager基本配置 请参考博文:springboot2.0 redis EnableCaching的配置和使用 RedisCacheManager构造函数 RedisCacheManager需要一个 RedisOperations实例,一般是RedisTemplate。还有一个不必须的 阅读全文
posted @ 2018-12-10 15:42 胡峻峥 阅读(4302) 评论(0) 推荐(0) 编辑
摘要:一、前言 为什么要设计kafka告警方案?现成的监控项目百度一下一大堆,KafkaOffsetMonitor、KafkaManager、 Burrow等,具体参考:kafka的消息挤压监控。由于本小组的项目使用的kafka集群并没有被公司的kafka-manager管理,所以只能自己简单做一个告警。 阅读全文
posted @ 2018-12-04 15:53 胡峻峥 阅读(996) 评论(0) 推荐(0) 编辑
摘要:kafka-manager配置 最主要配置就是用于kafka管理器状态的zookeeper主机。这可以在conf目录中的application.conf文件中找到。 当然也可以声明为zookeeper集群。 另外也可以通过环境变量ZK_HOSTS来表示。 自定义kafka-manager功能,类似于 阅读全文
posted @ 2018-11-20 00:04 胡峻峥 阅读(2472) 评论(0) 推荐(2) 编辑