cassandra 学习笔记(1)

1). cassandra任何一个节点均可以被客户端访问。apache

2). 对cassandra某个节点的访问是经过调用org.apache.cassandra.service.Cassandra的内部类Client的相应接口实现的。函数

3). 2)中的Cassandra这个类包含了不少内部类和一个接口(Iface)。其中的Client和Processor两个内部类都是对Iface的实现,这保证了他们的内部的全部方法是一一对应的。.net

4). 当Client这个内部类中的某个方法被调用的时候,该方法会用他内部的send_开头的方法发送消息,而且用recv_开头的方法接收返回的内容,容,返回的内容多是咱们想要的数据,也多是个异常的消息,若是是异常的消息,则会在客户端生成一个相应的异常并抛出,blog

5). Client端send_和recv_方法同目标节点的交互是分别经过oprot和iprot的实例完成的,这两个实例是负责输入输出的,具体的功能的实如今libthrift.jar中。接口

6). 节点和客户端通讯的链接是由libthrift.jar中的TThreadPoolServer的实例实现的,这个实例在该节点最初启动的时候被生成,而且该实例内部还保有一个2)中提到的Processor实例。TThreadPoolServer实例给Processor实例提供了输入输出实例iprot和oprot,而且经过调用Processor的processprocess(TProtocol iprot, TProtocol oprot)接口来进一步的向内传递消息。ip

7). 节点最初启动的初始话过程是在org.apache.cassandra.service.CassandraDaemon的setup()中完成的。资源

. 在Processor的processprocess(TProtocol iprot, TProtocol oprot)会解析iprot中传入的客户端的请求,并首先解析出要调用函数的函数名字,而后经过查询processMap_来决定究竟由那个ProcessFunction实例来接收处理消息,相应的ProcessFunction实例的process(int seqid, TProtocol iprot, TProtocol oprot)被激活并开始全权负责消息的处理和反馈。io

9). 相应的的ProcessFunction的实例主要负责三件事:i,进一步处理iprot传入的消息 ii,将详细的信息转发给iface的相应方法处理 iii,将获得的反馈经过oprot返回给客户端。这里的iface实例其实是org.apache.cassandra.service.CassandraServer的一个实例,在Processor的实例建立的时候(节点启动的时候)被装入了Processor实例,可是因为ProcessFunction类是Processor的内部类,因此ProcessFunction的实例也能直接访问。service

10)以上可知,最终客户端的信息是交给CassandraServer的相应方法来处理的,而thrift的相关功能只是负责了客户端和节点间的交互(9160端口),而节点之间的交互并无使用thrift的资源。sso

 转:http://blog.csdn.net/pakly_9527/archive/2009/08/12/4438810.aspx

相关文章
相关标签/搜索