Return-Path: X-Original-To: apmail-cassandra-user-archive@www.apache.org Delivered-To: apmail-cassandra-user-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7F1BBC3F8 for ; Mon, 14 May 2012 20:28:47 +0000 (UTC) Received: (qmail 5888 invoked by uid 500); 14 May 2012 20:28:45 -0000 Delivered-To: apmail-cassandra-user-archive@cassandra.apache.org Received: (qmail 5865 invoked by uid 500); 14 May 2012 20:28:45 -0000 Mailing-List: contact user-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@cassandra.apache.org Delivered-To: mailing list user@cassandra.apache.org Received: (qmail 5855 invoked by uid 99); 14 May 2012 20:28:44 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 14 May 2012 20:28:44 +0000 X-ASF-Spam-Status: No, hits=2.2 required=5.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL X-Spam-Check-By: apache.org Received-SPF: neutral (nike.apache.org: local policy) Received: from [209.85.212.44] (HELO mail-vb0-f44.google.com) (209.85.212.44) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 14 May 2012 20:28:38 +0000 Received: by vbbez10 with SMTP id ez10so6463179vbb.31 for ; Mon, 14 May 2012 13:28:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:x-gm-message-state; bh=o0ifWBHKbk1CwTjXXhM4PDYlieJFPDQhEWbpa4XxYwE=; b=Q/cnu+ta2GOw0kLeycbXH99PBbayPXngSM73zA/ZNdAAlFsIPfU/12u1stkDMSxPLz xRqRz81YLkG0pM++HltY6Qr2eII/9PDXywvt007h5mZQIzTBTjX6q7TXCpzmxJ9FmUl0 AsFUzLH7bunCEUME8S8iHH9cMimmXpz5xfx6zVXNU3j7eYRr8Q2LGHGA3cYuFMsCOrvL atj3Eygh1R2rF/88FXXnOHFlQHC/yuA1KvIgr1/DPNGk7pudGwzfzpvtXeOrLE5l4ICb IAlv0FN3Am/dZI6Pvrm5Jdkvhp3e5JLydlWxU/OzczP/HTVFQFb1rHcUl16r55JeCvue dm5w== MIME-Version: 1.0 Received: by 10.221.1.82 with SMTP id np18mr1442885vcb.22.1337027296956; Mon, 14 May 2012 13:28:16 -0700 (PDT) Received: by 10.52.108.195 with HTTP; Mon, 14 May 2012 13:28:16 -0700 (PDT) In-Reply-To: <2C85E14562B39345BCCAD90B8E7955C90D950E@DKEXC001.adform.com> References: <2C85E14562B39345BCCAD90B8E7955C90D9423@DKEXC001.adform.com> <2C85E14562B39345BCCAD90B8E7955C90D950E@DKEXC001.adform.com> Date: Mon, 14 May 2012 22:28:16 +0200 Message-ID: Subject: Re: get dinamicsnith info from php From: "R. Verlangen" To: user@cassandra.apache.org Content-Type: multipart/related; boundary=bcaec54eeab6170f1b04c004ed0d X-Gm-Message-State: ALoCoQkc8vk+Nli5APPFbFLuI4dTlhJXDpdQWCrjSo4BGRyLVGX9qakoGLlhw0E5joBDukgCA3OB --bcaec54eeab6170f1b04c004ed0d Content-Type: multipart/alternative; boundary=bcaec54eeab6170f1904c004ed0c --bcaec54eeab6170f1904c004ed0c Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable I struggled with this before and decided to use HAProxy which suits my needs, you can read a little more about it at my personal blog: http://www.robinverlangen.nl/index/view/4fa902c1596cb-44a627/how-to-solve-t= he-pain-of-stateless-php-with-cassandra.html Good luck with it! 2012/5/14 Viktor Jevdokimov > Let say you have 8 nodes cluster with replication factor 3. If one node > is down, for its token range you have only 2 nodes left, not 7, which can > process you requests =96 other nodes will forward requests to the nearest > (depends on snitch) or with lower latency (depends on dynamic snitch) of = 2 > remaining.**** > > ** ** > > I have no idea about PHP and its multithreading capabilities, if it=92s > impossible to run background thread to return dead endpoint to the list, > instead of checking it on HTTP request thread, you=92re stacked. For the > lower latencies dynamic snitch already do a job for you, selecting a node > with lower latencies.**** > > ** ** > > If you=92d like Cassandra to avoid forwarding requests to appropriate nod= e, > but making a direct request to a node where data is, you need smarter > client, capable to select node by key and other things to do to achieve > this.**** > > ** ** > > ** ** > > > Best regards / Pagarbiai > *Viktor Jevdokimov* > Senior Developer > > Email: Viktor.Jevdokimov@adform.com > Phone: +370 5 212 3063, Fax +370 5 261 0453 > J. Jasinskio 16C, LT-01112 Vilnius, Lithuania > Follow us on Twitter: @adforminsider > What is Adform: watch this short video > [image: Adform News] > > Disclaimer: The information contained in this message and attachments is > intended solely for the attention and use of the named addressee and may = be > confidential. If you are not the intended recipient, you are reminded tha= t > the information remains the property of the sender. You must not use, > disclose, distribute, copy, print or rely on this e-mail. If you have > received this message in error, please contact the sender immediately and > irrevocably delete this message and any copies. > > *From:* ruslan usifov [mailto:ruslan.usifov@gmail.com] > *Sent:* Monday, May 14, 2012 17:41 > *To:* user@cassandra.apache.org > *Subject:* Re: get dinamicsnith info from php**** > > ** ** > > Sorry for my bad english. > > > I want to solve follow problem. For example we down one node for > maintenance reason, for a long time (30 min). Now we use TSocketPool for > polling connection to cassandra, but this poll implementation is as i thi= nk > not so good, it have a custom parameter setRetryInterval, with allow off > broken node (now we set i to 10sec), but this mean that every 10sec pool > will try to connet down node (i repeat we shutdown node for maintance > reason), because it doesn't know node dead or node, but cassandra cluster > know this, and this connection attempt is senselessly, also when node mak= e > compact it can be heavy loaded, and can't serve client reqest very good (= at > this moment we can got little increase of avg backend responce time)**** > > 2012/5/14 Viktor Jevdokimov **** > > I=92m not sure, that selecting node upon DS is a good idea. First of all > every node has values about every node, including self. Self DS values ar= e > always better than others.**** > > **** > > For example, 3 nodes RF=3D2:**** > > **** > > N1**** > > N2**** > > N3**** > > N1**** > > 0.5ms**** > > 2ms**** > > 2ms**** > > N2**** > > 2ms**** > > 0.5ms**** > > 2ms**** > > N3**** > > 2ms**** > > 2ms**** > > 0.5ms**** > > **** > > We have monitored many Cassandra counters, including DS values for every > node, and graphs shows that latencies is not about load.**** > > **** > > So the strategy should be based on use case, node count, RF, replica > placement strategy, read repair chance, and more, and more=85**** > > **** > > What do you want to achieve?**** > > **** > > **** > > ** ** > > Best regards / Pagarbiai**** > > *Viktor Jevdokimov***** > > Senior Developer**** > > ** ** > > Email: Viktor.Jevdokimov@adform.com**** > > Phone: +370 5 212 3063, Fax +370 5 261 0453**** > > J. Jasinskio 16C, LT-01112 Vilnius, Lithuania**** > > Follow us on Twitter: @adforminsider > **** > > What is Adform: watch this short video *= * > ** > > [image: Adform News] **** > > > Disclaimer: The information contained in this message and attachments is > intended solely for the attention and use of the named addressee and may = be > confidential. If you are not the intended recipient, you are reminded tha= t > the information remains the property of the sender. You must not use, > disclose, distribute, copy, print or rely on this e-mail. If you have > received this message in error, please contact the sender immediately and > irrevocably delete this message and any copies. **** > > ** ** > > *From:* ruslan usifov [mailto:ruslan.usifov@gmail.com] > *Sent:* Monday, May 14, 2012 16:58 > *To:* user@cassandra.apache.org > *Subject:* get dinamicsnith info from php**** > > **** > > Hello > > I want to route request from php client to minimaly loaded node, so i nee= d > dinamicsnitch info and gosip, how can i get this info fro php. Perhaps ne= ed > some daemon that can communicate with cassandra gosip and translate this > info to php (socket for example)???**** > > ** ** > --=20 With kind regards, Robin Verlangen www.robinverlangen.nl --bcaec54eeab6170f1904c004ed0c Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: quoted-printable I struggled with this before and decided to use HAProxy=A0which=A0suits my = needs, you can read a little more about it at my personal blog:


Good luck with it!

20= 12/5/14 Viktor Jevdokimov <Viktor.Jevdokimov@adform.com>=

Let say you have 8 nodes = cluster with replication factor 3. If one node is down, for its token range= you have only 2 nodes left, not 7, which can process you requests =96 other nodes will forward requests to the nearest (depends on = snitch) or with lower latency (depends on dynamic snitch) of 2 remaining.

=A0<= /p>

I have no idea about PHP = and its multithreading capabilities, if it=92s impossible to run background= thread to return dead endpoint to the list, instead of checking it on HTTP request thread, you=92re stacked. For the lower latencies dynam= ic snitch already do a job for you, selecting a node with lower latencies.<= u>

=A0<= /p>

If you=92d like Cassandra= to avoid forwarding requests to appropriate node, but making a direct requ= est to a node where data is, you need smarter client, capable to select node by key and other things to do to achieve this.

=A0<= /p>

=A0<= /p>

Best regards / Pagarbiai
Viktor Jevdokimov
Senior Developer

J. Jasinskio 16C, LT-01112 Vilnius, Lithuania
Follow us on Twitter: @adforminsider

Disclaimer: The information contained in this message and attachments is in= tended solely for the attention and use of the named addressee and may be c= onfidential. If you are not the intended recipient, you are reminded that t= he information remains the property of the sender. You must not use, disclose, distribute, copy, print or rely= on this e-mail. If you have received this message in error, please contact= the sender immediately and irrevocably delete this message and any copies.

From: ru= slan usifov [mailto:ruslan.usifov@gmail.com]
Sent: Monday, May 14, 2012 17:41
To: u= ser@cassandra.apache.org
Subject: Re: get dinamicsnith info from php

=

=A0

Sorry for my bad engl= ish.


I want to solve follow problem. For example we down one node for maintenanc= e reason, for a long time (30 min). Now we use TSocketPool for polling conn= ection to cassandra, but this poll implementation is as i think not so good= , it have a custom parameter setRetryInterval, with allow off broken node (now we set i to 10sec), but this mean that eve= ry 10sec pool will try to connet down node (i repeat we shutdown node for m= aintance reason), because it doesn't know node dead or node, but cassan= dra cluster know this, and this connection attempt is senselessly, also when node make compact it can be heavy loaded= , and can't serve client reqest very good (at this moment we can got li= ttle increase of avg backend responce time)

2012/5/14 Viktor Jevdokimov <Viktor.Jevdokimov@adform.com<= /a>>

I=92m not sure, that sele= cting node upon DS is a good idea. First of all every node has values about every node, including self. Self DS values are always better than others.<= /span>

=A0<= /p>

For example, 3 nodes RF= =3D2:

=A0<= /p>

N1

N2

N3

N1

0.5ms

2ms<= /p>

2ms<= /p>

N2

2ms<= /p>

0.5ms

2ms<= /p>

N3

2ms<= /p>

2ms<= /p>

0.5ms

=A0<= /p>

We have monitored many Ca= ssandra counters, including DS values for every node, and graphs shows that latencies is not about load.

=A0<= /p>

So the strategy should be= based on use case, node count, RF, replica placement strategy, read repair chance, and more, and more=85

=A0<= /p>

What do you want to achie= ve?

=A0<= /p>

=A0<= /p>

=A0

Best regards / Pagarbiai

Viktor Jevdokimov

Senior Developer

=A0

J. Jasinskio 16C, LT-01112 Vilnius, Lithuania=

Follow us on Twitter: @adforminsider

What is Adform: watch this short video


Disclaimer: The information contained in this message and attachments is in= tended solely for the attention and use of the named addressee and may be c= onfidential. If you are not the intended recipient, you are reminded that t= he information remains the property of the sender. You must not use, disclose, distribute, copy, print or rely= on this e-mail. If you have received this message in error, please contact= the sender immediately and irrevocably delete this message and any copies.

=A0

From: ruslan u= sifov [mailto:= ruslan.usifov@gmail.com]
Sent: Monday, May 14, 2012 16:58
To: u= ser@cassandra.apache.org
Subject: get dinamicsnith info from php

=A0

Hello

I want to route request from php client to minimaly loaded node, so i need = dinamicsnitch info and gosip, how can i get this info fro php. Perhaps need= some daemon that can communicate with cassandra gosip and translate this i= nfo to php (socket for example)???

=A0




--
With kind re= gards,

Robin Verlangen

--bcaec54eeab6170f1904c004ed0c-- --bcaec54eeab6170f1b04c004ed0d Content-Type: image/png; name="signature-logo29.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: 393f93cce970aee4_0.2 iVBORw0KGgoAAAANSUhEUgAAAGgAAAAcCAYAAACNr/p2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6Qzk5QzVCQzdEQjAyMTFFMEE0NDFCODQ4MzMzMkI3NzciIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6Qzk5QzVCQzhEQjAyMTFFMEE0NDFCODQ4MzMzMkI3NzciPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOTlDNUJDNURCMDIxMUUwQTQ0 MUI4NDgzMzMyQjc3NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOTlDNUJDNkRCMDIxMUUw QTQ0MUI4NDgzMzMyQjc3NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqhJYX4AAAdWSURBVHja7FpNbFRVFD73zUwLpWlRKOFH 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 --bcaec54eeab6170f1b04c004ed0d Content-Type: image/png; name="image001.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: 393f93cce970aee4_0.1 iVBORw0KGgoAAAANSUhEUgAAAGgAAAAcCAYAAACNr/p2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6Qzk5QzVCQzdEQjAyMTFFMEE0NDFCODQ4MzMzMkI3NzciIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6Qzk5QzVCQzhEQjAyMTFFMEE0NDFCODQ4MzMzMkI3NzciPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOTlDNUJDNURCMDIxMUUwQTQ0 MUI4NDgzMzMyQjc3NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOTlDNUJDNkRCMDIxMUUw QTQ0MUI4NDgzMzMyQjc3NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqhJYX4AAAdWSURBVHja7FpNbFRVFD73zUwLpWlRKOFH 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 --bcaec54eeab6170f1b04c004ed0d--