随笔分类 - 020. 源码解析
摘要:LinkAgent(https://github.com/shulieTech/LinkAgent)是数列科技的一个基于Java的开源agent,通过字节码增强,实现对Java应用程序的数据收集和逻辑控制, 是全链路压测的一部分,同时开源的还有控制台(Takin-web)部分,对于压力构造部分还未开
阅读全文
摘要:基础 spring 系列 spring boot https://github.com/spring-projects/spring-boot https://github.com/zhaoyb/spring-boot 应用领域 API网关 incubator-shenyu(原soul) https
阅读全文
摘要:Discovery(https://github.com/Nepxion/Discovery)是一个基于spring cloud的,可以执行蓝绿,灰度,路由等功能的一个框架。 功能就是在一个服务在线上有多个版本存在的时候,可以通过指定不同的版本,让流量流向不同的版本。 大致的实现方式如下: spri
阅读全文
摘要:arthas与jvm-sandbox是阿里开源的JVM工具,都能够attach到一个正在运行的Java进程中,可以查看运行时的一些信息,并且可以通过对字节码的修改,来实现一些高级功能。 arthas和jvm-sandbox之所以能实现这些功能,主要依赖的有Java agent和ASM字节码修改。 j
阅读全文
摘要:koalas-rpc(https://github.com/dromara/koalas-rpc) 是一个RPC 框架, 相比于 dubbo,它足够简单,无论是做二次开发还是想了解 RPC 原理,都有非常好的入手体验。 项目启动调用过程如下: 使用注解标注接口。 使用 zookeeper 作为注册中
阅读全文
摘要:简介 chaosblade-exec-jvm(https://github.com/chaosblade-io/chaosblade-exec-jvm) 关于混沌实验的意义和作用这里就不说了,这里只说实现。 Java项目混沌实验整体实现思路就是通过java agent 和字节码增强技术注入异常。 针
阅读全文
摘要:hotkey(https://gitee.com/jd-platform-opensource/hotkey)是京东的一个 热 key 发现系统,他能够感知系统中访问频繁的资源,比如Redis key,接口url等,在发现此类情况后,能够通知到相关的应用,应用可采取一些自定义的措施。 hotkey
阅读全文
摘要:Netty(https://github.com/netty/netty)提供异步的、事件驱动的网络应用程序框架和工具。通俗的理解就是对Java NIO进行了封装,最终就是一个jar包形式。它解决了网络通信中常见的几个问题,比如粘包和分包问题,心跳问题等,同时也解决了Java NIO中的空轮询Bug
阅读全文
摘要:dubbo(https://github.com/apache/dubbo)是一个分布式服务框架,提供了RPC调用、容错与负载均衡,服务注册与发现。 启动流程如下: 1. 服务提供者注册服务,将自身的信息(IP,端口,提供的服务)发布到注册中心(zookeeper,nacos,redisd等)。 2
阅读全文
摘要:seata(https://github.com/seata/seata)是一个分布式事务解决方案,内置了对AT、XA、TCC、saga的支持,主要由TC TM RM三类角色,TC(事务协调器)作为服务端,TM(事务管理器)和RM(资源管理器)工作在客户端。 seata最大程度的保证了对应用的透明。
阅读全文
摘要:skywalking(https://github.com/apache/skywalking)是一个分布式系统的链路追踪系统,提供应用程序的调用链 追踪,应用程序性能监控。由agent,oap, ui,存储四部分组成,agent提供了无侵入的数据收集,其原理就是使用buddy对指定的类进行了增强,
阅读全文
摘要:datax(https://github.com/alibaba/DataX)是一个离线的数据同步工具,提供了异构数据源之间的同步。 datax整体项目结构清晰,core提供了核心功能,剩下的都是各种数据源的reader和write。 核心功能就是根据配置信息,抽取源数据,导入到目标数据,中间还有各
阅读全文
摘要:rocketmq(https://github.com/apache/rocketmq)是一个分布式的消息队列,主要有product, broker,consumer,nameserver组成,提供流量的削峰填谷,异步通知,应用解耦的功能。rocketmq和kafka功能上比较相似,但是在底层架构上
阅读全文
摘要:Nacos(https://github.com/alibaba/nacos)可以简单理解为一个服务注册中心,提供了服务发现和健康检测,服务配置等功能。Nacos大致流程: 服务端启动,选leader, Nacos实现了一个简单的raft协议,关于raft概念这里就不细说了. Nacos利用raft
阅读全文
摘要:cat(https://github.com/dianping/cat)是应用监控系统,支持的消息类型如下: Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。 Event
阅读全文
摘要:tinyid(https://github.com/didi/tinyid)和Leaf(https://github.com/Meituan-Dianping/Leaf)都是分布式Id生成器。 目前Id生成器大体有2类算法: 1. snowflake算法 2. 基于数据库的号段算法 各自算法的原理这
阅读全文
摘要:shardingsphere(https://github.com/apache/shardingsphere)是一套开源的分布式数据中间件,可以在JDBC层, Proxy层进行SQL路由。 可以完成数据库读写分离, 数据分片等。 数据库库中间件一般会在两个地方: 1. 项目的JDBC层:对项目浸入
阅读全文
摘要:jetcache(https://github.com/alibaba/jetcache)和AutoLoadCache(https://github.com/qiujiayu/AutoLoadCache)都是缓存框架。 在应用程序开发中,缓存分为两种,一种是单机缓存,一种是分布式缓存。 单机缓存比如
阅读全文
摘要:Apollo(https://github.com/ctripcorp/apollo)是一个配置中心,支持从应用、环境、集群维度去管理配置,也支持从公共,私有维度去管理配置。 满足了大部分的配置场景。 作为一个配置中心: 1. 配置项的保存,基本都会放到数据库中。 这里apollo使用的是mysql
阅读全文
摘要:Sentinel(https://github.com/alibaba/Sentinel)是一个限流组件。在互联网系统高可用设计中,限流作为一种托底的手段,保护系统不会被流量冲垮而出现未知的异常。 Sentinel系统的具体设计,可以参考官方文档,同时也可以参考 这个 , 这里只说一下大概的逻辑:
阅读全文