[openstack-dev] [oslo][devstack][all] ZooKeeper vs etcd for Tooz/DLM

Davanum Srinivas davanum at gmail.com
Wed Mar 15 13:26:11 UTC 2017

On Wed, Mar 15, 2017 at 9:19 AM, Monty Taylor <mordred at inaugust.com> wrote:
> On 03/15/2017 11:37 AM, Davanum Srinivas wrote:
>> Monty, Team,
>> Sorry for the top post:
>> Support for etcd/tooz in devstack (with file driver as default) -
>> https://review.openstack.org/#/c/445432/
>> As of right now both zookeeper driver and etcd driver is working fine:
>> https://review.openstack.org/#/c/445630/
>> https://review.openstack.org/#/c/445629/
>> The problem we have from before is that we do not have any CI jobs
>> that used zookeeper.
>> I am leaning towards just throwing the etcd as default and if folks
>> are interested in zookeeper then they can add specific CI jobs with
>> DLM_BACKEND variable set.
> That doesn't bother me - zk as the default choice was because at the
> time zk worked and etcd did not.
> That said - etcd3 is a newer/better thing - so maybe instead of driving
> etcd home as a default before we add etcd3 support, we just change tooz
> to support etcd3, add the devstack jobs to use that, and start from a
> position that doesn't involve dealing with any legacy?

Yep, jd__ and i confirmed that things work with 3.x


>> On Tue, Mar 14, 2017 at 11:00 PM, Monty Taylor <mordred at inaugust.com> wrote:
>>> On 03/15/2017 03:13 AM, Jay Pipes wrote:
>>>> On 03/14/2017 05:01 PM, Clint Byrum wrote:
>>>>> Excerpts from Jay Pipes's message of 2017-03-14 15:30:32 -0400:
>>>>>> On 03/14/2017 02:50 PM, Julien Danjou wrote:
>>>>>>> On Tue, Mar 14 2017, Jay Pipes wrote:
>>>>>>>> Not tooz, because I'm not interested in a DLM nor leader election
>>>>>>>> library
>>>>>>>> (that's what the underlying etcd3 cluster handles for me), only a
>>>>>>>> fast service
>>>>>>>> liveness/healthcheck system, but it shows usage of etcd3 and Google
>>>>>>>> Protocol
>>>>>>>> Buffers implementing a simple API for liveness checking and host
>>>>>>>> maintenance
>>>>>>>> reporting.
>>>>>>> Cool cool. So that's the same feature that we implemented in tooz 3
>>>>>>> years ago. It's called "group membership". You create a group, make
>>>>>>> nodes join it, and you know who's dead/alive and get notified when
>>>>>>> their
>>>>>>> status change.
>>>>>> The point of os-lively is not to provide a thin API over ZooKeeper's
>>>>>> group membership interface. The point of os-lively is to remove the need
>>>>>> to have a database (RDBMS) record of a service in Nova.
>>>>> That's also the point of tooz's group membership API:
>>>>> https://docs.openstack.org/developer/tooz/compatibility.html#grouping
>>>> Did you take a look at the code I wrote in os-lively? What part of the
>>>> tooz group membership API do you think I would have used?
>>>> Again, this was a weekend project that I was moving fast on. I looked at
>>>> tooz and didn't see how I could use it for my purposes, which was to
>>>> store a versioned object in a consistent key/value store with support
>>>> for transactional semantics when storing index and data records at the
>>>> same time [1]
>>>> https://github.com/jaypipes/os-lively/blob/master/os_lively/service.py#L468-L511
>>>> etcd3 -- and specifically etcd3, not etcd2 -- supports the transactional
>>>> semantics in a consistent key/value store that I needed.
>>>> tooz is cool, but it's not what I was looking for. It's solving a
>>>> different problem than I was trying to solve.
>>>> This isn't a case of NIH, despite what Julien is trying to intimate in
>>>> his emails.
>>>>>> tooz simply abstracts a group membership API across a number of drivers.
>>>>>> I don't need that. I need a way to maintain a service record (with
>>>>>> maintenance period information, region, and an evolvable data record
>>>>>> format) and query those service records in an RDBMS-like manner but
>>>>>> without the RDBMS being involved.
>>>>>>>> servicegroup API with os-lively and eliminate Nova's use of an
>>>>>>>> RDBMS for
>>>>>>>> service liveness checking, which should dramatically reduce the
>>>>>>>> amount of both
>>>>>>>> DB traffic as well as conductor/MQ service update traffic.
>>>>>>> Interesting. Joshua and Vilob tried to push usage of tooz group
>>>>>>> membership a couple of years ago, but it got nowhere. Well, no, they
>>>>>>> got
>>>>>>> 2 specs written IIRC:
>>>>>>> https://specs.openstack.org/openstack/nova-specs/specs/liberty/approved/service-group-using-tooz.html
>>>>>>> But then it died for whatever reasons on Nova side.
>>>>>> It died because it didn't actually solve a problem.
>>>>>> The problem is that even if we incorporate tooz, we would still need to
>>>>>> have a service table in the RDBMS and continue to query it over and over
>>>>>> again in the scheduler and API nodes.
>>>>> Most likely it was designed with hesitance to have a tooz requirement
>>>>> to be a source of truth. But it's certainly not a problem for most tooz
>>>>> backends to be a source of truth. Certainly not for etcd or ZK, which
>>>>> are both designed to be that.
>>>>>> I want all service information in the same place, and I don't want to
>>>>>> use an RDBMS for that information. etcd3 provides an ideal place to
>>>>>> store service record information. Google Protocol Buffers is an ideal
>>>>>> data format for evolvable versioned objects. os-lively presents an API
>>>>>> that solves the problem I want to solve in Nova. tooz didn't.
>>>>> Was there something inherent in tooz's design that prevented you from
>>>>> adding it to tooz's group API? Said API already includes liveness (watch
>>>>> the group that corresponds to the service you want).
>>>> See above about transactional semantics.
>>>> I'm actually happy to add an etcd3 group membership driver to tooz,
>>>> though. After the experience gained this weekend using etcd3, I'd like
>>>> to do that.
>>>> Still doesn't mean that tooz would be the appropriate choice for what I
>>>> was trying to do with os-lively, though.
>>>>> The only thing missing is being able to get groups and group members
>>>>> by secondary indexes. etcd3's built in indexes by field are pretty nice
>>>> Not sure what you're talking about. etcd3 doesn't have any indexing by
>>>> field. I built the os-lively library primarily as a well-defined set of
>>>> index overlays (by uuid, by host, by service type, and by region) over
>>>> etcd3's key/value store.
>>>>> for that, but ZK can likely also do it too by maintaining the index in
>>>>> the driver.
>>>> Maybe, I'm not sure, I didn't spend much time this weekend looking at
>>>> ZooKeeper.
>>> a) awesome. when the rest of this dips momentarily into words that might
>>> sound negative, please hear it all wrapped in an "awesome" and know that
>>> my personal desire is to see the thing you're working on be successful
>>> without undue burden...
>>> b) In Tokyo, we had the big discussion about DLMs (where at least my
>>> intent going in to the room was to get us to pick one and only one).
>>> There were three camps in the room who were all vocal:
>>> 1) YES! Let's just pick one, I don't care which one
>>> 2) I hate Java I don't want to run Zookeeper, so we can't pick that
>>> 3) I hate go/don't trust coreos I don't want to run etcd so we can't
>>> pick that
>>> Because of 2 and 3 the group represented by 1 lost and we ended up with:
>>> "crap, we have to use an abstraction library"
>>> I'd argue that unless something has changed significantly, having Nova
>>> grow a direct depend on etcd when the DLM discussion brought us to "the
>>> operators in the room have expressed a need for a pluggable choice
>>> between at least zk and etcd" should be pretty much a non-starter.
>>> Now, being that I was personally in group 1, I'd be THRILLED if we
>>> could, as a community, decide to pick one and skip having an abstraction
>>> library. I still don't care which one - and you know I love gRPC/protobuf.
>>> But I do think that given the anti-etcd sentiment that was expressed was
>>> equally as vehement as the anti-zk sentiment, that we need to circle
>>> back and make a legit call on this topic.
>>> If we can pick one, I think having special-purpose libraries like
>>> os-lively for specific purposes would be neat.
>>> If we still can't pick one, then I think adding the liveness check you
>>> implemented for os-lively as a new feature in tooz and also implementing
>>> the same thing in the zk driver would be necessary. (of course, that'll
>>> probably depend on getting etcd3 support added to tooz and making sure
>>> there is a good functional test for etcd3.
>>> c) awesome
>>>>> I understand abstractions can seem pretty cumbersome when you're moving
>>>>> fast. It's not something I want to see stand in your way. But it would
>>>>> be nice to see where there's deficiency in tooz so we can be there for
>>>>> the next project that needs it and maybe eventually factor out direct
>>>>> etcd3 usage so users who have maybe chosen ZK as their tooz backend can
>>>>> also benefit from your work.
>>>> It's not a deficiency in tooz. It's a different problem domain. Look at
>>>> the os-lively API and show me how you think I could have used tooz to
>>>> implement that API.
>>> I think I already said this above - but what I was reading/hearing is
>>> "why not add add the feature you need to tooz" ... not "tooz does that
>>> already" - however, as you said, you were doing quick weekend POC work,
>>> so it's possible that adding this to tooz is a next step.
>>> __________________________________________________________________________
>>> OpenStack Development Mailing List (not for usage questions)
>>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Davanum Srinivas :: https://twitter.com/dims

More information about the OpenStack-dev mailing list