领域驱动设计 DDD 实践指南

领域驱动设计

领域驱动设计(Domain Driven Design)是一种软件设计方法,已经存在了近20年,在过去十年中,随着微服务和相关技术的激增,受到了巨大的关注。DDD更注重软件开发的逻辑、语义和结构方面(倾向于业务端),而不是应用规范的实现方式,虽然它也提供了几种良好的设计模式。DDD是处理复杂软件的理想方法,但对于小型、独立项目来说可能会很冗长。

Read More

ClassLoader

类加载机制

  在编译成的Class文件最终都要加载到虚拟机中才能被运行和使用,Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。

Read More

Kafka-Fetch

  每个Broker上都有一个ReplicaManager,它管理每个Partition的数据同步逻辑,因为每个Partition都会存在副本,从而在Broker中的TopicPartition可能是Leader或者Follower。

  当它是Leader时,就需要处理来自Producer的请求,写入log数据,同时等ISR集合同步完成,如果是Follower,就需要同步来自Leader的log数据,保持数据同步。

  在ReplicaManager中,就会开启同步Follower线程来FetchMessage。在ReplicaManager中会调用makeFollowers来处理同步Leader数据的逻辑。

Read More

Kafka-Concept

  关于Kafka的文章,主要是为了学习在分布式系统下,非常重要的部分如数据复制,数据分区的真正实践,同时对于消息队列的使用并不是很多,从而通过学习Kafka相关内容来进行深入,当然没有大型项目关于Kafka的深入实践,很难结合业务场景来调优最佳实践和更加深刻的认知,但还是希望通过这种方式来进行入门,了解万变不离其宗的分布式系统下的复杂性。

Read More

Netty write 流程

1. ChannelPipline 传播事件

  每一个Channel都会分配一个新的ChannelPipline,所有的出入站事件都会流经ChannelPipline来进行处理。

  其中处理每一个事件的主要是ChannelHandler,例如ChannelOutboundHandler、ChannelInboundHandler分别用来处理出入站事件。通过调用ChannelHandlerContext实现,它将被转发给同一超类型的下一个ChannelHandler进行处理。

Read More

Zookeeper 简介与使用场景

  Zookeeper的视图结构和标准的Unix文件系统非常类似,但没有引入传统文件系统中目录和文件等相关概念,而是使用了其特有的“数据节点”概念,我们称之为ZNode。ZNode是Zookeeper中数据的最小单元,每个ZNode上都可以保存数据,同时还可以挂载子节点,因此构成了一个层次化的命名空间,我们称之为树。

Read More