Link Blog

Thinking will not overcome fear but action will.

限流算法原理与实践

限流算法原理与实践

限流算法原理与实践 背景 由于公司降本增效的要求,负责网络带宽的团队一直紧盯各域名的带宽,某天晚上的App发公测引起带宽峰值,需要处理。手头的App公测系统支持定量下发,但没有限速,限制40000的量在头几分钟一下子下发,导致下载App插件的域名出现带宽峰值,需要对公测进行限速/限流处理。借此机会了解调研一下限流算法,并挑选合适算法运用到需求中。 限流算法原理 固定窗口 ...

okhttp连接问题

okhttp连接问题与空闲连接管理

okhttp连接问题 起因 由于公司降本增效的要求,手头的视频转码服务需要提高压缩率,于是对接了某云厂商的媒体处理服务。具体对接方式是通过调用云厂商的http接口发送任务,然后等待媒体处理完成回调。媒体处理本身没有问题,但是在正式上线运行后发现,常常有请求超时,15s都无法完成,具体如下图: 排查过程 首先怀疑接口耗时,找对方服务端排查并没发现耗时很久,且从上面的请求来看不...

redis连接池管理

redis连接池管理与空闲连接清理

redis连接池管理 起因 整件事情的起因其实是一个在生产环境部署的服务报了如下的redis错误 JedisConnectionException: Unexpected end of stream.。该服务接受消息,通过EHINCRBY指令进行访问统计,偶尔会出现如下错误。该业务还并未正式上线,写入的qps相当低(几分钟一条),而使用的redis集群又是独占的集群,不太可能会出现性能瓶...

tk.mybatis

tk.mybatis与自定义classLoader

tk.mybatis与自定义classLoader带来的问题 tk.mybatis是mybatis的一个工具,提供通用mapper的能力 问题描述 public class EntityHelper { /** * 保存表 */ private static final Map<Class<?>, EntityTable&...

Java并发

Java并发与线程安全

Java并发与线程安全

netty

netty学习

netty 简介 Netty是一个java网络编程框架。 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 设计 针对多种传输类型的统一接口 - 阻塞和非阻塞 简单但更强大的线程模型 真正的无连接的数据报套接字支持 链接逻辑支持复用 易用性 ...

分布式监控Prometheus(一)

JavaSdk源码阅读 如何获取数据

Prometheus 简介 Prometheus的核心数据模型是时间序列,因此它非常适合记录时间序列数据,并根据记录的时间序列进行相关的聚合和分析操作。 数据模型(以Counter和Gauge为例) 指标名 标签值 指标值float64 时间戳/ms device_liste...

Go

go语言学习

golang基础学习 接口 接口定义 package io type Writer interface { Write(p []byte) (n int, err error) } 一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口,无需显式实现 这一特性有助于在不改变原来类型的前提下...

ConcurrentHashMap如何解决并发写入

ConcurrentHashMap如何解决并发写入

concurrentHashMap put方法处理并发 concurrentHashMap存储结构 首先是一个数组,用于通过hash值得到index,定位到某个node 数组每个node都存着一个链表,或是红黑树 插入时首先计算index,然后插入table[index]链表末尾/或者插入红黑树 并发时锁的粒度在Node<k,v> f = table[ind...

Validated

参数校验

参数校验 需求 参数校验代码繁复 P.throwMessageExceptionIf(null == planId, 200, "planId 不能为空"); P.throwMessageExceptionIf(null == contentType, 200, "内容类型不能为空"); P.throwMessageExceptionIf(null == jum...