{"action":"created","issue":{"url":"https://api.github.com/repos/datastax/python-driver/issues/666","repository_url":"https://api.github.com/repos/datastax/python-driver","labels_url":"https://api.github.com/repos/datastax/python-driver/issues/666/labels{/name}","comments_url":"https://api.github.com/repos/datastax/python-driver/issues/666/comments","events_url":"https://api.github.com/repos/datastax/python-driver/issues/666/events","html_url":"https://github.com/datastax/python-driver/pull/666","id":177870434,"number":666,"title":"Add NetworkAwareRoundRobinPolicy load balancer","user":{"login":"jolynch","id":1420460,"avatar_url":"https://avatars1.githubusercontent.com/u/1420460?v=4","gravatar_id":"","url":"https://api.github.com/users/jolynch","html_url":"https://github.com/jolynch","followers_url":"https://api.github.com/users/jolynch/followers","following_url":"https://api.github.com/users/jolynch/following{/other_user}","gists_url":"https://api.github.com/users/jolynch/gists{/gist_id}","starred_url":"https://api.github.com/users/jolynch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jolynch/subscriptions","organizations_url":"https://api.github.com/users/jolynch/orgs","repos_url":"https://api.github.com/users/jolynch/repos","events_url":"https://api.github.com/users/jolynch/events{/privacy}","received_events_url":"https://api.github.com/users/jolynch/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":4,"created_at":"2016-09-19T19:11:00Z","updated_at":"2018-04-20T18:17:11Z","closed_at":"2018-04-20T18:17:11Z","author_association":"NONE","pull_request":{"url":"https://api.github.com/repos/datastax/python-driver/pulls/666","html_url":"https://github.com/datastax/python-driver/pull/666","diff_url":"https://github.com/datastax/python-driver/pull/666.diff","patch_url":"https://github.com/datastax/python-driver/pull/666.patch"},"body":"_What_\nThis is my first attempt at a Rack aware (and DC aware) load balancing strategy, which is currently called \"NetworkAwareRoundRobinPolicy\" (a nod to the NetworkTopologyStrategy) which routes requests to local rack nodes first and later to remote nodes. I've included some additional tests and DCAware tests all pass using NetworkAware as the underlying lb.\n\nIf you guys like this idea I can roll it out to our deployment  (few hundred C\\* nodes, few thousand clients) and ensure that it gives the expected benefits.\n\n_Why_\nIn cloud providers like AWS, racks are often availability zones (and RF = # of racks), and routing to the wrong availability zone can cost a few milliseconds of latency on read requests. This is particularly important when comparing point query performance of LOCAL_ONE Cassandra queries against say something like AZ local MySQL or memcache.  The goal of this change is to maintain backwards compatibility with DCAware (which is probably better in general), but allow performance sensitive clients to always pick rack local coordinators.\n\n_Concerns_\nI'm slightly concerned that this could cause hotspotting on particular racks, and as such I don't think it should be the default strategy. Also the benefit for quorum operations would be not that great since the coordinator will still have to reach cross rack, but at least it saves a single cross AZ trip. If you have further concerns, or think this should be separate, or not in the main repo at all, I dig it, just wanted to contribute this and see where it went.\n"},"comment":{"url":"https://api.github.com/repos/datastax/python-driver/issues/comments/383180309","html_url":"https://github.com/datastax/python-driver/pull/666#issuecomment-383180309","issue_url":"https://api.github.com/repos/datastax/python-driver/issues/666","id":383180309,"user":{"login":"mambocab","id":3753769,"avatar_url":"https://avatars1.githubusercontent.com/u/3753769?v=4","gravatar_id":"","url":"https://api.github.com/users/mambocab","html_url":"https://github.com/mambocab","followers_url":"https://api.github.com/users/mambocab/followers","following_url":"https://api.github.com/users/mambocab/following{/other_user}","gists_url":"https://api.github.com/users/mambocab/gists{/gist_id}","starred_url":"https://api.github.com/users/mambocab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mambocab/subscriptions","organizations_url":"https://api.github.com/users/mambocab/orgs","repos_url":"https://api.github.com/users/mambocab/repos","events_url":"https://api.github.com/users/mambocab/events{/privacy}","received_events_url":"https://api.github.com/users/mambocab/received_events","type":"User","site_admin":false},"created_at":"2018-04-20T18:17:10Z","updated_at":"2018-04-20T18:17:10Z","author_association":"CONTRIBUTOR","body":"Closing -- see [PYTHON-639](https://datastax-oss.atlassian.net/browse/PYTHON-639) for a discussion of our decision-making process there."}}
{"actor":{"display_login":"mambocab"}}