cap与base理论_rhyme-编程思维
分布一致性的提出 在分布式系统中要解决的一个重要问题就是数据的复制。在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读取到K的最新值,需要在一段时间之后才能读取到。这很正常,因为数据库复制之间存在延时。 分布式系统对于数据的复制需求一般都来自于以下两个原因: 1、为了增加系统的可用性,以防止单点故障引起的系统不可用
morethink program
版本 springboot 2.1.5.RELEASE kafka 2.2 遇到的坑 用最新的springboot就要用最新的kafka版本! 当我启动云服务器上的zk后,再启动kafka后台日志也没报错,只感觉EndPoint日志信息有点奇怪,然后springboot项目连接kafka,老是有warn级别的日志:"Connection to node -1 could n
JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。在《Java虚拟机规范(Java SE 8)》中描述了JVM运行时内存区域结构如下: 各个区域的功能不是本文重点,就不在这里详细介绍了。这里简
JAVA内存模型,为啥线程要有自己的本地内存,CPU高速缓存 volatile作用总结: 1. 强制线程从公共内存中取得变量的值,而不是从线程的私有的本地内存(如CPU高速缓存)中,volatile修饰的变量不具有原子性(修改一个变量的值不能同步)。 2. 保证volatile修饰的变量在被一个线程修改后,会被强制立即刷新到主存(可见性),其他线程如果有该变量的缓存行,会被设置为无效。 3
首先Java内存模型不是“JVM 的内存模型”; Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,线程被CPU执行,每个线程都有一个私有的本地内存(如CPU的高
下面的blade命令时阿里开源的ChaosBlade 分布式系统高可用原则 高可用的分布式系统一般需要满足以下原则: 失败重试 实例隔离 请求限流 服务降级 服务熔断 流量调度 开关&预案 监控告警 日志跟踪 混沌实验场景实践 我们以 A 调用 B,B 调用 C,A 同时也调用 D 举例,A1、A2 是 A 服务的多个实例,依次类推。 失败重试 实验场景:调用下游服务实例异常。容
何为死信队列? SpringBoot配置文件 初始化和绑定重定向队列配置类 生产者向业务队列发送消息 死信队列消费者 重定向队列 测试 何为死信队列? 死信队列实际上就是,当我们的业务队列处理失败(比如抛异常并且达到了retry的上限),就会将消息重新投递到另一个Exchange(Dead Letter Exchanges),该Exchange再根据routingKey重定向到另一个队列,在
为什么使用DeferredResult? 场景 Demo代码 测试 1. 超时 2. 进行setResult 为什么使用DeferredResult? API接口需要在指定时间内将异步操作的结果同步返回给前端时; Controller处理耗时任务,并且需要耗时任务的返回结果时; 当一个请求到达API接口,如果该API接口的return返回值是DeferredResult,在没有超时或者D
场景 简单方案 工具 导出数据 导入数据 总结 场景 将远程服务器A上的MongoDB数据库test下的集合people导入到服务器B数据库test的集合people_test下。 简单方案 先将A服务器数据导出,然后再执行导入到B服务器。 下面的导入和导出操作,均是在git bash下执行,如果是在windows命令行下需要稍微更改路径。 工具 利用本地原生MongoDB安装目录下
场景 消费者接受消息,进行一系列处理,但是由于某些原因处理过程中该消费者的抛出了异常,并且不捕获(直接 throws IOException 抛出去); 由于抛出了IOException,那么这条消息就会再次被发送到该队列,消费者就再次收到,而消费者抛出异常,该消息又会入队……所以就形成了一个死循环(除非不再有类似IO的异常),那么控制台日志就一直打印该消费者的抛出异常。 所以,如果不需要消费者
Step1 Step2 Step3 Step4 Step5 Step6 Step7 Arthas 进阶的案例 Step1 下载demo-arthas-spring-boot.jar,再用java -jar命令启动: wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot
eclipse与idea快捷键 表格中的空格都是忘记了~ 功能 eclipse idea 跳转到变量的类型定义 ctrl+shift+B 将表达式抽取成一个参数 alt+shift+L ctrl+alt+V 跳转指定行 ctrl+G 找到启动类 ctrl+alt+Home 类的继承关系 ctrl+H 类的详细关系图 c