暂时未有相关云产品技术能力~
公众号【架构染色】,专注后端,欢迎交流
在当前的技术发展阶段,不同的业务场景对一致性、可靠性、易用性、性能等要求不同,应用架构可以根据实际场景的需求,灵活选择合适的分布式事务解决方案。行业中把分布式事务解决方案分为刚性事务方案和柔性事务方案这两大类。 就刚性事务这个范畴,DTP已经成为事实上的事务模型组件的行为标准,解决了不少分布式事务的问题。但随着技术以及业务场景的演进发展,其缺点和局限性也越来越明显,伴随着 BASE 理论的提出,诸多柔性事务方案(如可靠消息、最大努力通知、AT、TCC、Saga)诞生,满足了各类业务场景的差异化需求。
reactor 模式是一种事件驱动的应用层 I/O 处理模式,基于分而治之和事件驱动的思想,致力于构建一个高性能的可伸缩的 I/O 处理模式
Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
从技术架构管理的角度看,一套规范的、通用的、可靠的分布式事务解决方案,帮助开发者在分布式环境下,既保证业务数据的一致性,又不需要投入太多的资源用于业务数据一致性的开发维护,还能加快迭代速度保障项目交付。
对于支持自动生成记录主键的数据库,如 MySQL 和 SQL Server,将 useGeneratedKeys 参数的值设置为 true,就可以在记录insert成功后获得数据库自动生成的主键 ID
内存映射文件是一种允许程序直接从内存访问的特殊文件。通过将整个文件或者文件的一部分映射到内存中、操作系统负责获取页面请求和写入文件,应用程序就只需要处理内存数据,这样可以实现非常快速的 IO 操作。
基于JSR -133内存模型提出了happens-before的概念,通过这个概念来阐述操作之间的内存可见性。要保证可见性,就是遵守 Happens-Before 规则,合理的使用java提供的工具。
1. 增加查询的并行度,减少串行耗时。 2. 规避无效查询的触发,避免带来额外消耗。 3. 提升分片检索的命中,缩小检索分片数
同步机制中有经典的管程方案,管程其实就是对共享变量以及其操作的封装: 1. 将共享资源封装起来,对外提供操作这些共享资源的方法。 2. 线程只能通过调用管程中的方法来间接地访问管程中的共享资源
volatile 关键字本身就包含了禁止指令重排序的语义,仅保证赋值过程的原子性,保障变量的可见性,但不具备排它性
CPU提供内存屏障指令,来解决内存系重排序。读屏障清空本地的invalidate queue保证之前的所有load都已经生效;写屏障清空本地的store buffer,使得之前的所有store操作生效
导致可见性的原因有很多,如: 1. 为了提升性能而实施的编译期重排序。 2. 数据在寄存器中。 3. cpu缓存的更改未同步到主内存中 或 内存中的更改未同步到cpu缓存(运行期重排序)。
AsyncAppender 接收日志,放入其内部的一个阻塞队列,专开一个线程从阻塞队列中取数据(每次一个)丢给链路下游的Appender 如 FileAppender,如此可把日志写盘 变成 日志写内存,减少写日志的 RT。
buffer 机制 通俗来说就是化零为整,把少量多次变成多量少次;具体来说就是进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以减少响应次数
代码中的 new 一个 Listener,sandbox 内部就创建并注册一个与之对应的事件处理器。Spy 的静态方法中将方法事件交给了事件处理器经过一些内部处理,最终回调 listener 的方法。
介绍jvm-sandbox中事件机制的设计,通过用事件Id与事件之间的映射关系进行解耦,通过Spy类的静态方法携带事件Id进行核心事件逻辑的埋点注入
alibaba/jvm-sandbox设计了完善且复杂的沙箱事件,用于实现事件探测和流程控制机制。但不建议对于同一个类、同一个方法多次增强
jvm-sandbox给使用者提供EventWatchBuilder对代码插桩进行了封装;把底层复杂的字节码操控隐藏起来,让使用者仅关注操控什么类、什么方法、方法中的什么逻辑。
开发者一般采用建立一个 Agent 的方式来使用 JVMTI,使用 JVMTI 一个基本的方式就是设置回调函数,在回调函数体内,可以 获取各种各样的VM级信息,甚至控制VM行为,如类加载时修改类
任何一个 Java 方法的调用都可以分解为`BEFORE`、`RETURN`和`THROWS`三个环节,由此在三个环节上引申出对应环节的事件探测和流程控制机制。
alibaba/jvm-sandbox是 一种JVM的非侵入式运行期 AOP 解决方案。沙箱容器提供 1. 动态增强类你所指定的类,获取你想要的参数和行信息甚至改变方法执行 2. 动态可插拔容器框架
Java 中的`ThreadLocal`类允许程序员创建只能由创建它们的线程访问的变量。这对于创建线程安全代码很有用,因为它确保每个线程都有自己的变量副本并且不会干扰其他线程。
Seata 对业务无侵入是通过数据源代理实现的,数据源代理的实现涉及到 DataSource、Connection 以及 Statement,这几个关键知识属于 JDBC 的范畴
一种比较可行的克服这些困难的方案是以一种一致的、明确的和机器可读的格式来记录系统中最有价值的信息。这种方法称为结构化日志记录。在配套工具的支持下,这些追踪数据有助于更深入地了解你的系统的运行活动,使你能够理解组件之间的相互作用。
构建 afterImage的时候,prepareStatement是复用了Insert操作的prepareStatement,而prepareStatement逻辑中,会在执行 sql 的时候会把参数设置一遍;由于未清空参数,只把 sql 变成了 SELECT LAST_INSERT_ID() ,给没有占位符的 sql 指定参数,就引发了错误
Redis cluster去中心化设计的思考与总结
【理论指导实践】Seata-TCC模式
既生 synchronized 何生 JUC 的 显式 locks ?
从原理和源码梳理Springboot FatJar 的机制
【学习Seata1.6源码#03】TC 集群具有高可用架构的秘密
【学习Seata1.6源码#02】通过Spring AOP 实现声明式事务机制
【学习Seata1.6源码#01】全局事务注解@GlobalTransactional的识别
老板,明年我用Seata搞定分布式事务管理的规范化建设 | 中篇
【翻译】基于令牌的身份验证如何工作?
你不知道的Redis SET NX 指令不保障原子性的应对之法
ClassLoader 隔离性的基石是namespace,证明给你看
别再随意说 Redis 的 SET 保障原子性,在客户端不一定
【自省】线程同步看腻了,尝尝 > 入门级的线程间协作?
【自省】你可思考过 AQS 中的同步队列为何这样设计?
【自省】Thread的理论很简单吧,实战中什么情况要用setDaemon、 interrupt 和 join ?
【自省】线程池里的定时任务跑的可欢了,可咋停掉特定的任务?
【自省】使用Executors.xxx违反阿里Java代码规范,那还不写定时任务了?
分布式锁主动续期的入门级实现-自省 | 简约而不简单
明年用Seata搞定分布式事务管理的规范化建设 | 上篇
ClassLoader:类的隐式加载和显式加载
SkyWalking 中如何构建异步链路的 Trace
老板,明年我来落地链路追踪-实现降本增效 | 上篇
Seata的这些安保机制是否会让你更放心
分布式锁中-基于 Redis 的实现如何防重入
通过编码方式构建SkyWalking 的Trace-中篇