thumbnail
分布式限流::Redis+Lua 在分布式应用中的限流实战
概述 作为分布式应用的三大法宝之一(缓存、降级、限流),限流系统尤其是对外开放系统中,显得尤其重要。限流的目的是通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务,从而避免业务高峰期因暴增的流量直接将服务器打死。 常见的限流算法 信号量计数器漏桶算法令牌桶算法 在这里,咱们主要研究两种比较常用的( 计数器 、 令…
thumbnail
造个轮子::实现一个极简的Goroutine Pool
概述 Go语言的协程(Goroutine)是一种相对线程而言更廉价的方式,虽然是轻量级的,但Goroutine太多仍会导致调度性能下降、GC 频繁、内存暴涨, 引发一系列问题。在面临这样的场景时, 限制 Goroutine的数量、重用显然很有价值。 解决方案 要解决这个问题,首先要考虑的是以下几点: Goroutine的数量如何限制Goroutin…
当synchronized关键字作用在字符串上的一些问题
概述 现有需求如下,每个用户(租户ID:用户ID)执行某个操作时,对其进行计数,在考虑高并发的情况下,不会产生计数错误问题。 实现 看到需求后,脑中迅速想好了一个简单思路:将用户(租户ID:用户ID)作为 KEY, 在执行查询和更新时,利用关键字synchronized锁之即可,下面是测试代码: public class Main { privat…
thumbnail
深入理解 Java 中的 SPI 机制
概述 SPI(Service Provider Interface)是一种比较流行的服务发现机制,其核心原理是通过在扫描classpath:META-INF/services文件夹下定义文件,来实现自动加载某个接口的实现类。 这种机制常为很多框架的扩展提供了便捷,比较常见的,如 Dubbo、JDBC 等。 小案例 下面先通过一个小案例,来看看我们是…
Jackson对枚举字段的序列规则
现有个枚举类型,内部定义了一些属性,使用 Jaskson 来进行序列化成 JSON 字符串 enum class Error( var code: Int, var reason: String, var description: String ) { UNKNOWN(-1, "unknown", "发生了未知错误,请联系管理员…
thumbnail
浅谈如何设计一个高并发系统
概述 为什么要设计高并发的系统呢?随着日益增长的用户量,一般来说,一个系统起步都是直接是连接数据库的,而数据库支撑到每秒并发两三千的时候,基本就快完了,不断的堆配置,加集群始终不是解决之道。 一个高并发的系统,应该从以下几个方面逐步优化: 系统拆分缓存中间件MQ 消息队列分库分表数据库读写分离ElasticSearch 系统拆分 将一个系统,按照业…
使用Jsoup处理富文本XSS攻击过滤
由于富文本的特殊性,不能一刀切将所有的 HTML 标签转义,但为了防止 XSS 攻击, 又必须过滤掉其中的 JS 代码, 在 Java 中使用 Jsoup 正好可以满足此要求。 Jsoup 采用白名单过滤的方式,只允许配置的白名单标签进行提交,故需要好好整理一下,到底哪些标签是可以使用的。 实现 <dependency> <gro…
thumbnail
开源Java诊断工具Arthas推荐
Arthas 是Alibaba开源的Java诊断工具,初步试用了一下,甚是方便,在生产线上找问题应该比较方便。 Arthas可以帮助你解决什么问题? 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日…
RestTemplate 跳过SSL证书验证
在使用RestTemplate请求接口的过程中,遇到HTTPS请求又没有证书的情况,只能通过配置来忽略证书验证了 package com.ewei.custom.yto.config import org.springframework.context.annotation.Bean import org.springframework.conte…