Kafka基础
Kafka基础1. Kafka基础概念1.1. Kafka是什么Kafka是一个拥有流处理功能的消息引擎系统。主要有五大部分:Producer API,主要用来发送消息。Consumer API,主要用来消费消息。Streams API,Kafka流处理API,这是一个仅适用Kafka的轻量级流处理
Kafka基础1. Kafka基础概念1.1. Kafka是什么Kafka是一个拥有流处理功能的消息引擎系统。主要有五大部分:Producer API,主要用来发送消息。Consumer API,主要用来消费消息。Streams API,Kafka流处理API,这是一个仅适用Kafka的轻量级流处理
基于Redis实现缓存系统的注意点与一些常见问题1. 从计算机系统的缓存开始在计算机系统中,默认有两种缓存:CPU 里面的末级缓存,即 LLC,用来缓存内存中的数据,避免每次从内存中存取数据;内存中的高速页缓存,即 page cache,用来缓存磁盘中的数据,避免每次从磁盘中存取数据。LLC一般几M
基于Redis实现分布式锁与Redis的ACID特性(以秒杀业务为例)1. 准备Redis实现秒杀业务,主要需要三块的知识储备:秒杀业务流程如何保证原子性(Redis能为我们做哪些ACID保证)Redis实现一个分布式锁下文会围绕这3块进行展开叙述。2. 秒杀业务流程分为三个阶段,秒杀阶段前,中,后
Redis的部分使用注意点1. 用SCAN命令代替KEYS等全数据返回命令SCAN命令是渐进式遍历,不会导致Redis的堵塞KEYS,SMEMBERS等命令是全量数据返回,会导致整个Redis实例的堵塞。2. 设置合适的AOF写回策略如果对数据持久化不敏感,可以不开启AOF。如果开启,就要设置合适的
Spring应用上下文生命周期1. 前言本文基于Spring-framework.5.2.2.RELEASE版本进行论述,参考了小马哥在极客时间的课程(文章末尾有对应二维码)。2. Spring应用上下文刷新阶段刷新阶段主要是围绕 AbstractApplicationContext#refresh
Redis基础1. 设计一个键值数据库SimpleKV1.1. 需要存哪些数据不同键值数据库支持的 key 类型一般差异不大,而 value 类型则有较大差别。我们在对键值数据库进行选型时,一个重要的考虑因素是它支持的 value 类型。例如,Memcached 支持的 value 类型仅为 Str
Spring Bean的生命周期1. 前言Spring是一个IOC(Inversion of Control,控制反转)容器框架,拥有DI(Dependency Injection,依赖注入),DL(Dependency Lookup,依赖查找 等功能。认为一个IOC框架最基本要有以下功能:配置解析
HashMap源码的细节与启发1.前言这些天心血来潮想认认真真过一遍JCF的源码实现,在阅读到HashMap的时候发现自己之前还是太肤浅,很多地方没能理解JDK作者的巧思,因此想记录下来自己学习过程中的收获。在正式开始之前先吹一波美团技术团队,之前看并发编程的时候也是搜到不少美团技术团队的文章,写的
一致性模型强一致性当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值,直到这个数据被其他数据更新为止。但是这种实现对性能影响较大,因为这意味着,只要上次的操作没有处理完,就不能让用户读取数据。弱一致性系统并不保证进程或者线程的访问都会返回最新更新过的值。系统在数据写入成功之后
1.RocketMQ简介RocketMQ是一个分布式消息和流数据平台(消息中间件),具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。RocketMQ是2012年阿里巴巴开源的第三代分布式消息中间件,2016年11月21日,阿里巴巴向Apache软件基金会捐赠了RocketMQ;第二年2月2
1. 关于事件溯源MartinFowler在2005年的博客中提及了“EventSourcing”这个词语,他将事件描述为一个应用的一系列状态改变,这一系列事件能够捕获用来重建当前状态的一切事实真相。他认为事件是不可变的,事件日志是一种只会不断追加(appendonly)的存储。事件从来不会被删除,
1. DDD的实现架构DDD的实现架构有很多种,这些架构都是一种关注点分离模式的实现,也是SOLID单一职责原则的体现,将人们关注的一个职责与其他职责分离,不要试图混合在一起。传统的SOA架构在这方面有很大缺陷,造成了一种单体耦合的架构,虽然这样的大型服务能够实现一定程度的复用和重用,但是在重用和解
1. 充血/贫血模型1.1. 理解充血模型与贫血模型DDD领域模型=数据结构+操作方法,数据和行为结合在一起才是一个完整的真正业务对象(领域对象),也才能够真正发挥对象封装的作用,这样的对象或类称为“充血模型”。贫血模型的对象或类一般只有setter/getter方法,是一种纯粹的数据结构,没有任何
1. Top Level聚合设计是DDD战术设计中的一部分。通过有界上下文划分团队,使用统一语言命名上下文;聚合设计则是进入有界上下文内部讨论其结构。如果说有界上下文解决了领域内的划分,那么聚合就解决了有界上下文内对象之间的划分。所谓划分就是将紧密的放一起,让松散的更加松散,甚至没有关系。从这里能看
1. Top Level领域驱动设计共有两个部分:战略设计战术设计战略设计也可理解为策略设计,是从宏观角度着眼于领域的分析设计,属于系统分析阶段,注重如何从有界上下文中寻找领域模型,战略模式由有界上下文、无所不在的语言和上下文映射组成战术设计属于设计代码阶段,使用聚合、实体、值对象等对象类型概念表达