摘要:1、尽量使用短小事务,避免大事务。 2、加FOR UPDATE/LOCK IN SHARE MODE锁时,最好降低事务隔离级别,例如用RC级别,降低死锁发生概率,也可以降低锁定粒度。 3、事务中涉及多个表,或者涉及多行记录时,每个事务的操作顺序都要保持一致。 4、通过索引优化SQL效率,降低死锁概率
阅读全文
摘要:1、做消费确认ACK比较麻烦2、不能做广播3、不能重复消费,一旦消费就会被删除4、不支持分组消费
阅读全文
摘要:原文地址:http://blog.720ui.com/2017/mysql_core_09_multi_db_table2/ 随着用户数的不断增加,以及数据量的不断增加,通过分库与分表的方式提高查询性能的同时,带来了一系列分布式困境。 数据迁移与扩容问题 前面介绍到水平分表策略归纳总结为随机分表和连
阅读全文
摘要:MySQL 是如何解决幻读的 一、什么是幻读 二、为什么要解决幻读 三、MySQL 是如何解决幻读的 1. 多版本并发控制(MVCC)(快照读/一致性读) 2. next-key 锁 (当前读) 四、其他:MySQL InnoDB 引擎 RR 隔离级别是否解决了幻读 五、注意 一、什么是幻读 在一次
阅读全文
摘要:介绍 幂等性就是同一个操作执行多次,产生的效果一样。如http的get请求,数据库的select请求就是幂等的 在分布式系统中,保证接口的幂等性非常重要,如提交订单,扣款等接口都要保证幂等性,不然会造成重复创建订单,重复扣款,那么如何保证接口的幂等性呢? 前端保证幂等性的方法 按钮只能点击一次用户点
阅读全文
摘要:限流 需求背景:同一用户1分钟内登录失败次数超过3次,页面添加验证码登录验证,也即是限流的思想。 常见的限流算法:固定窗口计数器;滑动窗口计数器;漏桶;令牌桶。本篇选择的滑动窗口计数器 redis zset特性 Redis 有序集合(sorted set)和集合(set)一样也是 string 类型
阅读全文
摘要:系统只有在被集成后才会实现业务价值,软件供应商一般而言都比较分散,即使在同一个企业内部的不同团队之间,也容易形成沟通壁垒。这些都会造成后期系统集成的困难。如何高效集成往往也是很多项目执行的痛点。 集成限界上下文(BC) 一个项目中会存在多个BC,业务需要对它们进行集成。有多种直接的方法进行集成。最简
阅读全文
摘要:领域驱动设计DDD在战术建模上提供了一个元模型体系(如下图): DDD构建的元模型元素脑图 元模型往往用来在某一特定的领域定义一个基础的通用的语言,来讨论和描述该领域的问题及解决方法。可以将元模型想象成为某种形式语言,这样模型就是一篇用该语言描述的文章,其中元模型中的元素就是该语言的词汇,元素之间的
阅读全文
摘要:领域事件(Domain Event) 在Eric的《领域驱动设计》中并没有提到领域事件,领域事件是在后来才被正式提出来的,并成为DDD通用语言(UL)的正式组成部分。领域事件(DE)是什么?领域事件的作用又是什么?介绍领域事件的书籍和文章也比较多了,本文最后也推荐了几篇很好的文章。写这篇文章更希望多
阅读全文
摘要:DDD方法中并没有指定使用特定的架构。领域中的BC被封装为高内聚的模块,这种特性让DDD对架构并没有太大侵入性。架构可以应用于领域内部的结构,也可以包围着领域模型,系统中可以采用多种风格的架构。 架构是指构成一个系统的主要元素及它们之间的主要关联,这些元素和关联能够反映该系统的本质特征。 选择架构应
阅读全文
摘要:1. DDD是什么?解决什么问题? 1.1 软件开发的困境 “随着业务的扩展,软件开发投资越来越大” 团队的规模也开始变得越来越大,软件系统的投资和维护的成本变得越来越高。 “业务人员不懂架构,架构师不懂代码,开发人员不不懂业务模型” 当团队中的关键角色谁也不懂谁的时候,问题来了。。。 “重构是好的
阅读全文
摘要:12/9-DDD中国峰会部分文章节选 DDD不是架构,而是一种方法论(Methodology)。根据维基百科:Methodology is the systematic, theoretical analysis of the methods applied to a field of study,
阅读全文
摘要:业务场景介绍# 咱们先来看看业务场景,假设你现在有一个电商系统,里面有一个支付订单的场景。 那对一个订单支付之后,我们需要做下面的步骤: 更改订单的状态为“已支付” 扣减商品库存 给会员增加积分 创建销售出库单通知仓库发货 这是一系列比较真实的步骤,无论大家有没有做过电商系统,应该都能理解。 进一步
阅读全文
摘要:我们平时写sql的时候大家都知道基本该怎么写,写的是什么语义逻辑,但是其中select语句每一个关键字的执行顺序可能大家还有不知道的,今天看到的一个题目,就是问select的执行顺序;其实这个过程大概的情况其实可以推理出来的以下就是基本的推理过程: 1.你要有主表,也就要先执行from,这个是根基2
阅读全文
摘要:今天再次看到这个问题,我也有了一些新的理解和感触,临时回顾了一下get与post的请求的一些区别: post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中) post发送的数据更大(get有url长度限制) post能发送更多的数据类型(get只能发送ASCII字
阅读全文
摘要:1、安装 mac环境下使用brew安装 $ brew install gradle 检验是否安装成功gradle -v 2、使用idea创建一个gradle项目 3、build.gradle的初始配置为: plugins { id 'java' } group 'com.sftcwl.com' ve
阅读全文
摘要:1、官网下载安装包 https://www.apache.org/dyn/closer.lua/flink/flink-1.14.3/flink-1.14.3-bin-scala_2.11.tgz 2、解压压缩包 $ tar -zxf flink-1.14.3-bin-scala_2.11.tar
阅读全文
摘要:ES存储存储基于lucene实现,lucene是Apacha软件基金的一个开源子项目,是一套全文检索引擎架构,提供了完整的文本分析引擎、数据查询引擎和数据索引引擎。 1、lucene是一个高并发、高吞吐、可扩展的全文检索库。整体框架如下图所示。 lucene的全文索引主要包括索引创建和索引查询两个部
阅读全文
摘要:1、gradle: https://wiki.jikexueyuan.com/project/gradle/build-script-basics.html 2、Mybatis-Plus: https://baomidou.com/pages/24112f/#特性 3、SpringBoot:http
阅读全文
摘要:消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢失,即消息肯定会至少保证消息能被消费者成功消费一次,这是消息中间件最基本的特性之一,也就是我们常说的“AT
阅读全文
摘要:本文参考自:https://www.cnblogs.com/lishun1005/p/6019678.html 和 https://blog.csdn.net/albenxie/article/details/70145603 http://www.cnblogs.com/CongLollipop/
阅读全文
摘要:1. Zend引擎主要包含两个核心部分:编译、执行: 执行阶段主要用到的数据结构: opcode: php代码编译产生的zend虚拟机可识别的指令,php7有173个opcode,定义在 zend_vm_opcodes.hPHP中的所有语法实现都是由这些opcode组成的。 struct _zend
阅读全文