摘要:
一、背景 前几天下午飞书告警群里报起了java.lang.OutOfMemoryError: unable to create new native thread告警,看见后艾特了对应的项目负责人但是负责人说没时间,无奈自己亲自上阵。 二、事情经过 2.1 问题排查 从报错信息就可以看出是服务申请不 阅读全文
摘要:
一、背景 业务在群里反馈编辑结算单时有些账单明细查不出来,但是新建结算单可以,我第一反应是去测试环境试试有没有该问题,结果发现没任何问题!!! 然后我登录生产环境编辑业务反馈有问题的结算单,发现查询接口直接504网关超时了,此时心里已经猜到是代码性能问题导致的,接来下就把重点放到排查接口超时的问题上 阅读全文
摘要:
# 一、背景 前段时间了解了泛化调用这个玩意儿,又想到自己之前写过一个RPC框架(参考《[手写一个RPC框架](https://www.cnblogs.com/2YSP/p/13545217.html)》),于是便想小试牛刀。 # 二、泛化调用简介 **什么是泛化调用** 泛化调用就是在不依赖服务方 阅读全文
摘要:
# 一、前言 2018年写过一篇分库分表的文章《[SpringBoot使用sharding-jdbc分库分表](https://www.cnblogs.com/2YSP/p/9746981.html)》,但是存在很多不完美的地方比如: - sharding-jdbc的版本(1.4.2)过低,现在gi 阅读全文
摘要:
一、Sentinel简介 Sentinel是阿里开源的面向服务流量治理的框架,官方原文是Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 Sen 阅读全文
摘要:
一、背景 作为Java开发,经常需要根据数据库某个字段获取对应的枚举类,然后就要在枚举类添加如下的方法: public static TestEnum getByCode(Integer code) { return Arrays.asList(values()).stream().filter(i 阅读全文
摘要:
一、背景 21年发布的开源项目ship-gate收获了100+start,但是作为网关它还缺少一项重要的能力——集群化部署的能力,有了这个能力就可以无状态的横向扩展,再通过nginx等服务器的反向代理就能极大提升网关的吞吐量。 本文主要介绍如何实现ship-gate的集群化改造,不了解该项目的童鞋可 阅读全文
摘要:
一、前言 在之前的文章《自定义ConditionalOnXX注解》中,介绍了Conditional注解的实现原理和实现自定义Conditional注解的基础方法,但是有些场景我们需要用一个ConditionalOnXX注解来实现==多条件的与(AND)或(OR)非(NOT)逻辑==,本文就是介绍这种 阅读全文
摘要:
一、背景 之前写了一篇《手写事件发布订阅框架》,虽然可以用但代码写的比较粗糙,且存在优化的空间,于是对其进行了重构主要包括以下几点: 面向接口编程,包结构更加清晰。 框架改成spring-boot-starter的形式实现即插即用。 对核心类EventManager的代码进行了部分剥离,使其更符合职 阅读全文
摘要:
一、前言 发布订阅模式也叫观察者模式,利用该模式可以进行代码解耦,很多框架都用到该设计模式,比如Spring的事件机制,guava的EventBus(事件总线)等,不清楚观察者模式的话可以查看本人之前写的博客《设计模式之观察者模式》。 为了更好的了解现有的事件框架实现原理,便手写了一个简单的 阅读全文