领域驱动设计
领域驱动设计(Domain Driven Design)是一种软件设计方法,已经存在了近20年,在过去十年中,随着微服务和相关技术的激增,受到了巨大的关注。DDD更注重软件开发的逻辑、语义和结构方面(倾向于业务端),而不是应用规范的实现方式,虽然它也提供了几种良好的设计模式。DDD是处理复杂软件的理想方法,但对于小型、独立项目来说可能会很冗长。
领域驱动设计(Domain Driven Design)是一种软件设计方法,已经存在了近20年,在过去十年中,随着微服务和相关技术的激增,受到了巨大的关注。DDD更注重软件开发的逻辑、语义和结构方面(倾向于业务端),而不是应用规范的实现方式,虽然它也提供了几种良好的设计模式。DDD是处理复杂软件的理想方法,但对于小型、独立项目来说可能会很冗长。
最近在做一个 mongoDB 的存储数据到 es 中进行检索的工作,也是通过此文学习一下 monstache 是如何做同步,以及管理可用性和一致性的,同时学习 golang 相关的 chan 的生命周期
在编译成的Class文件最终都要加载到虚拟机中才能被运行和使用,Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。
每个Broker上都有一个ReplicaManager,它管理每个Partition的数据同步逻辑,因为每个Partition都会存在副本,从而在Broker中的TopicPartition可能是Leader或者Follower。
当它是Leader时,就需要处理来自Producer的请求,写入log数据,同时等ISR集合同步完成,如果是Follower,就需要同步来自Leader的log数据,保持数据同步。
在ReplicaManager中,就会开启同步Follower线程来FetchMessage。在ReplicaManager中会调用makeFollowers来处理同步Leader数据的逻辑。
本文简单介绍当Broker接受到producerRequest的时候,ReplicaManager是如何处理的本地写入和WaitForFollowerFetch
关于Kafka的文章,主要是为了学习在分布式系统下,非常重要的部分如数据复制,数据分区的真正实践,同时对于消息队列的使用并不是很多,从而通过学习Kafka相关内容来进行深入,当然没有大型项目关于Kafka的深入实践,很难结合业务场景来调优最佳实践和更加深刻的认知,但还是希望通过这种方式来进行入门,了解万变不离其宗的分布式系统下的复杂性。
如今在维护各个微服务下,考虑到最多的就是分布式系统的可用性--CAP,那么就像数据密集型服务描述的那样,需要考虑分布式系统下数据复制、数据分区、分布式事务,本节通过看kafka的多分区复制方式,来学习数据复制中需要考虑到的通用处理。
每一个Channel都会分配一个新的ChannelPipline,所有的出入站事件都会流经ChannelPipline来进行处理。
其中处理每一个事件的主要是ChannelHandler,例如ChannelOutboundHandler、ChannelInboundHandler分别用来处理出入站事件。通过调用ChannelHandlerContext实现,它将被转发给同一超类型的下一个ChannelHandler进行处理。
Zookeeper的视图结构和标准的Unix文件系统非常类似,但没有引入传统文件系统中目录和文件等相关概念,而是使用了其特有的“数据节点”概念,我们称之为ZNode。ZNode是Zookeeper中数据的最小单元,每个ZNode上都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,我们称之为树。