Cassandra源码阅读(1)-启动流程

Cassandra源码阅读(1):启动流程

本文简述cassandra的启动流程,目的主要是形成一个整体的大概印象。后面的文章会详细分析Cassandra的读写流程,同步流程,失败处理,集群通信等等相关信息。

Cassandra的主入口是CassandraDaemon这个类,通过activate启动,主要会有如下步骤:

  1. 读配置,主要是通过DatabaseDescriptor完成的
  2. 初始化JMX,系统日志等。
  3. 启动检查,startupchecks,这里会检查一些基本信息,比如jemalloc库是否存在,jvm参数,datadir数据文件夹,sstableformat等。
  4. 设置线程默认异常处理器
  5. 对于schema,keyspace相关信息
  6. 初始化keyspace
  7. 读rowcache和keycache
  8. 重放commitlog
  9. 对于tokenaware的partition读先前本地存的tokenMetadata
  10. 注册metric
  11. 初始化StorageService.initServer其中有几个比较重要步骤
    1. prepareJoin中启动了Gossip以及MessagingService(这个service是供内部通信的,storagePort 7000的那个)
    2. CacheService初始化
    3. joinTokenRing,加入集群hash环,里面会区分是新加节点还是replace原来的节点
  12. 构建keyspaceview
  13. 打开后台compact线程
  14. 打开nativeTransport,这个是用来接收客户端CQL的(默认端口9042)

至此启动过程完毕。

下面用图简单描述一下各个组件的功能与关系(由于我自己也是刚开始看cassandra,后续会陆续完善这个图)