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