AOP Benchmark
一直觉得spring proxy aop性能比较差,看了AOP Benchmark没想当差别这么大。曾今在一个项目中改用aspectj,成本有点高,也不便于团队协作。先埋个思路在这里:
- 在应用启动时,编程式加载java agent(VirtualMachine#loadAgent),spring 使用aspectj ltw(开发时运行)
- 使用maven注解实现编译时植入(线上运行)
在spring.io上看到了不一样的声音: Debunking myths: proxies impact performance
- 这点性能比起长时间运行的任务来说太短了
- 一个请求最多也不会经过10个proxy,
10 proxy operations * 500 ns per proxy operation = 5 microseconds
任然可以忽略不记
这个说法在当年还是有说服力的,现在就不怎么明显了,微服务、SOA大行其道,涉及到的aop会比较多,如果在基础设施上做一些改造,方便无感知的使用byte code weaving
意义还是很大的。
sentinel
Sentinel
提供流量控制、熔断降级、系统负载保护等功能。相对于Hystrix
使用起来倾入性比较小。大致撸了一遍代码:
SlotChainBuilder
构建每个资源
对应的ProcessorSlotChain
。ProcessorSlot
组成责任链来分离功能。(前面几个Slot用来做资源路由、统计,后面几个完成系统功能)。SystemSlot
实现系统负载保护功能。有趣的是参考BBR算法,当负载过高时,判断当前请求容量来减少对请求的拒绝。AuthoritySlot
黑白名单控制FlowSlot
流控DegradeSlot
降级