AndreiS just reminded me that we have module interfaces for the master detector and contender:
https://github.com/apache/mesos/blob/1.9.0/include/mesos/module/detector.hpp https://github.com/apache/mesos/blob/1.9.0/include/mesos/module/contender.hpp https://github.com/apache/mesos/blob/1.9.0/include/mesos/master/detector.hpp https://github.com/apache/mesos/blob/1.9.0/include/mesos/master/contender.hpp These should allow you to implement the integration with your library, we may need to adjust the interfaces a little, but this will let you get what you need done without the burden on us to shepherd the work. On Fri, May 22, 2020 at 8:38 PM Samuel Marks <sam...@offscale.io> wrote: > Following on from the discussion on GitHub and here on the mailing-list, > here is the proposal from me and my team: > ------------------------------ > > Choice of approach > > The “mediator” of every interaction with ZooKeeper in Mesos is the > ZooKeeper > class, declared in include/mesos/zookeeper/zookeeper.hpp. > > Of note are the following two differences in the *styles* of API provided > by ZooKeeper class and liboffkv: > > - > > Push-style mechanism of notifications on changes in “watched” data, > versus pull-style one in liboffkv. In Mesos, the notifications are > delivered via the Watcher interface, defined in the same file as > ZooKeeper. This interface has the process method, which is invoked by an > instance of ZooKeeper at most once for each watch. There is also a > special event which informs the watcher that the connection has been > dropped. An optional instance of Watcher is passed to the constructor of > ZooKeeper. > - > > Asynchronous session establishment process in ZooKeeper versus > synchronous one (if at all — e.g. for Consul there is no concept of > “session” currently defined at all) in liboffkv. > > The two users of the ZooKeeper are: > > 1. > > GroupProcess; > 2. > > ZooKeeperStorageProcess. > > We will thus evaluate the possible approaches of integrating liboffkv into > Mesos through the prism of details of their usage. > > The two possible approaches are: > > 1. > > Replace all usages of ZooKeeper with liboffkv-specific code under #ifdef > guards. > > This approach would scale badly, as alternative liboffkv-specific > implementations will be needed for both of the users. > > Moreover, we think that conditional compilation results in maintenance > nightmare; see, e.g.: > - > > RealWaitForChar() in vim <https://geoff.greer.fm/vim/>; > - > > “#ifdef Considered Harmful, or Portability Experience With C News” > paper by Henry Spencer and Geoff Collyer > <http://doc.cat-v.org/henry_spencer/ifdef_considered_harmful.pdf>. > > The creators of the C programming language, which introduced the concept > in the first place, have also spoken against conditional compilation: > - > > In “The Practice of Programming” by Brian W. Kernighan and Rob Pike, > the following advice is given: “Avoid conditional compilation. > Conditional > compilation with #ifdef and similar preprocessor directives is hard > to manage, because information tends to get sprinkled throughout the > source.” > - > > In “Plan 9 from Bell Labs” paper by Rob Pike, Ken Thompson et al. > <https://pdos.csail.mit.edu/archive/6.824-2012/papers/plan9.pdf>, > the > following is said: “Conditional compilation, even with #ifdef, is > used sparingly in Plan 9. The only architecture-dependent #ifdefs in > the system are in low-level routines in the graphics library. > Instead, we > avoid such dependencies or, when necessary, isolate them in > separate source > files or libraries. Besides making code hard to read, #ifdefs make it > impossible to know what source is compiled into the binary or whether > source protected by them will compile or work properly. They > make it harder > to maintain software.” > 2. > > Modify the *implementation* of the ZooKeeper class to use liboffkv, > possibly renaming the class to something akin to KvClient to reflect the > fact that would no longer be ZooKeeper-specific (this also includes the > renaming of error codes and other similar nomenclature). The old > version of > the implementation would be put under an #ifdef guard, thus minimising > the number — and maintenance impact — of #ifdefs. > > Naturally there are some advantages to taking the ifdef approach, namely > that we can guarantee no difference in builds between before offscale's > contribution and after, unless a compiler flag is provided. > > However to avoid polluting the code, we are recommending the second > approach. > Incompatibilities > > The following is the list of incompatibilities between the interfaces of > ZooKeeper class and liboffkv. Some of those features should be implemented > in liboffkv; others should be emulated inside the ZooKeeper/KvClient class; > and for others still, the change of the interface of ZooKeeper/KvClient is > the preferred solution. > > - > > Asynchronous session establishment. We propose to emulate this through > spawning a new thread in the constructor of ZooKeeper/KvClient. > - > > Push-style watch notification API. We propose to emulate this through > spawning a new thread for each watch; such a thread would then do the > wait > and then invoke watcher->process() under a mutex. The number of threads > should not be a concern here, as the only user that uses watches at all > ( > GroupProcess) only registers at most one watch. > - > > Multiple servers in URL string. We propose to implement this in > liboffkv. > - > > Authentication. We propose to implement this in liboffkv. > - > > ACLs (access control lists). The following ACLs are in fact used for > everything: > > _auth.isSome() > ? zookeeper::EVERYONE_READ_CREATOR_ALL > : ZOO_OPEN_ACL_UNSAFE > > We thus propose to: > 1. > > implement rudimentary support for ACLs in liboffkv in the form of an > optional parameter to create(), > > bool protect_modify = false > > 2. > > change the interface of ZooKeeper/KvClient so that protect_modify > flag is used instead of ACLs. > - > > Configurable session timeout. We propose to implement this in liboffkv. > - > > Getting the actual session timeout, which might differ from the > user-provided as a result of timeout negotiation with server. We > propose to > implement this in liboffkv. > - > > Getting the session ID. We propose to implement this in liboffkv, with > session ID being std::string; and to modify the interface accordingly. > It is possible to hash a string into a 64-bit number, but in the > circumstances given, we think it is just not worth it. > - > > Getting the status of the connection to the server. We propose to > implement this in liboffkv. > - > > Sequenced nodes. We propose to emulate this in the class. Here is the > pseudo-code of our solution: > > while (true) { > [counter, version] = get("/counter") > seqnum = counter + 1 > name = "label" + seqnum > try { > commit { > check "/counter" version, > set "/counter" seqnum, > create name value > } > break > } catch (TxnAborted) {} > } > > - > > “Recursive” creation of each parent in create(), akin to mkdir -p. This > is already emulated in the class, as ZooKeeper does not natively support > it; we propose to extend this emulation to work with liboffkv. > - > > The semantics of the “set” operation if the entry does not exist: > ZooKeeper fails with ZNONODE in this case, while liboffkv creates a new > node. We propose to emulate this in-class with a transaction. > - > > The semantics of the “erase” operation: ZooKeeper fails with ZNOTEMPTY > if node has children, while liboffkv removes the subtree recursively. As > neither of users ever attempts to remove node with children, we propose > to > change the interface so that it declares (and actually implements) the > liboffkv-compatible semantics. > - > > Return of ZooKeeper-specific Stat structures instead of just versions. > As both users only use the version field of this structure, we propose > to > simply alter the interface so that only the version is returned. > - > > Explicit “session drop” operation that also immediately erases all the > “leased” nodes. We propose to implement this in liboffkv. > - > > Check if the node being created has leased parent. Currently, liboffkv > declares this to be unspecified behavior: it may either throw (if > ZooKeeper > is used as the back-end) or successfully create the node (otherwise). As > neither of users ever attempts to create such a node, we propose to > leave > this as is. > > Estimates > We estimate that—including tests—this will be ready by the end of next > month. > ------------------------------ > > Open to alternative suggestions, otherwise we'll begin. > Samuel Marks > Charity <https://sydneyscientific.org> | consultancy <https://offscale.io> > | open-source <https://github.com/offscale> | LinkedIn > <https://linkedin.com/in/samuelmarks> > > > On Sat, May 2, 2020 at 4:04 AM Benjamin Mahler <bmah...@apache.org> wrote: > > > So it sounds like: > > > > Zookeeper: Official C library has an async API. Are we gaining a lot with > > the third party C++ wrapper you pointed to? Maybe it "just works", but it > > looks very inactive and it's hard to tell how maintained it is. > > > > Consul: No official C or C++ library. Only some third party C++ ones that > > look pretty inactive. The ppconsul one you linked to does have an issue > > about an async API, I commented on it: > > https://github.com/oliora/ppconsul/issues/26. > > > > etcd: Can use gRPC c++ client async API. > > > > Since 2 of 3 provide an async API already, I would lean more towards an > > async API so that we don't have to change anything with the mesos code > when > > the last one gets an async implementation. However, we currently use the > > synchronous ZK API so I realize this would be more work to first adjust > the > > mesos code to use the async zookeeper API. I agree that a synchronous > > interface is simpler to start with since that will be an easier > integration > > and we currently do not perform many concurrent operations (and probably > > won't anytime soon). > > > > On Sun, Apr 26, 2020 at 11:17 PM Samuel Marks <sam...@offscale.io> > wrote: > > > > > In terms of asynchronous vs synchronous interfacing, when we started > > > liboffkv, it had an asynchronous interface. Then we decided to drop it > > and > > > implemented a synchronous one, due to the dependent libraries which > > > liboffkv uses under the hood. > > > > > > Our ZooKeeper implementation uses the zookeeper-cpp library > > > <https://github.com/tgockel/zookeeper-cpp>—a well-maintained C++ > wrapper > > > around common Zookeeper C bindings [which we contributed to vcpkg > > > <https://github.com/microsoft/vcpkg/pull/7001>]. It has an > asynchronous > > > interface based on std::future > > > <https://en.cppreference.com/w/cpp/thread/future>. Since std::future > > does > > > not provide chaining or any callbacks, a Zookeeper-specific result > cannot > > > be asynchronously mapped to liboffkv result. In early versions of > > liboffkv > > > we used thread pool to do the mapping. > > > > > > Consul implementation is based on the ppconsul > > > <https://github.com/oliora/ppconsul> library [which we contributed to > > > vcpkg > > > < > > > > > > https://github.com/microsoft/vcpkg/pulls?q=is%3Apr+author%3ASamuelMarks+ppconsul > > > >], > > > which in turn utilizes libcurl <https://curl.haxx.se/libcurl>. > > > Unfortunately, ppconsul uses libcurl's easy interface, and consequently > > it > > > is synchronous by design. Again, in the early version of the library we > > > used a thread pool to overcome this limitation. > > > > > > As for etcd, we autogenerated the gRPC C++ client > > > <https://github.com/offscale/etcd-client-cpp> [which we contributed to > > > vcpkg > > > <https://github.com/microsoft/vcpkg/pull/6999>]. gRPC provides an > > > asynchronous interface, so a "fair" async client can be implemented on > > top > > > of it. > > > > > > To sum up, the chosen toolkit provided two of three implementations > > require > > > thread pool. After careful consideration, we have preferred to give the > > > user control over threading and opted out of the asynchrony. > > > > > > Nevertheless, there are some options. zookeeper-cpp allows building > with > > > custom futures/promises, so we can create a custom build to use in > > > liboffkv/Mesos. Another variant is to use plain C ZK bindings > > > < > > > > > > https://gitbox.apache.org/repos/asf?p=zookeeper.git;a=tree;f=zookeeper-client/zookeeper-client-c;h=c72b57355c977366edfe11304067ff35f5cf215d;hb=HEAD > > > > > > > instead of the C++ library. > > > As for the Consul client, the only meaningful option is to opt out of > > using > > > ppconsul and operate through libcurl's multi interface. > > > > > > At this point implementing asynchronous interfaces will require > rewriting > > > liboffkv from the ground up. I can allocate the budget for doing this, > > as I > > > have done to date. However, it would be good to have some more > > > back-and-forth before reengaging. > > > > > > Design Doc: > > > > > > > > > https://docs.google.com/document/d/1NOfyt7NzpMxxatdFs3f9ixKUS81DHHDVEKBbtVfVi_0 > > > [feel free to add it to > > > http://mesos.apache.org/documentation/latest/design-docs/] > > > > > > Thanks, > > > > > > *SAMUEL MARKS* > > > Sydney Medical School | Westmead Institute for Medical Research | > > > https://linkedin.com/in/samuelmarks > > > Director | Sydney Scientific Foundation Ltd < > > https://sydneyscientific.org> > > > | Offscale.io of Sydney Scientific Pty Ltd <https://offscale.io> > > > > > > PS: Damien - not against contributing to FoundationDB, but priorities > are > > > Mesos and the Mesos ecosystem, followed by Kuberentes and its > ecosystem. > > > > > > On Tue, Apr 21, 2020 at 3:19 AM Benjamin Mahler <bmah...@apache.org> > > > wrote: > > > > > > > Samuel: One more thing I forgot to mention, we would prefer to use an > > > > asynchronous client interface rather than a synchronous one. Is that > > > > something you have considered? > > > > > > > > On Fri, Apr 17, 2020 at 6:11 PM Vinod Kone <vinodk...@apache.org> > > wrote: > > > > > > > > > Hi Samuel, > > > > > > > > > > Thanks for showing interest in contributing to the project. Having > > > > > optionality between ZooKeeper and Etcd would be great for the > project > > > and > > > > > something that has been brought up a few times before, as you > noted. > > > > > > > > > > I echo everything that BenM said. As part of the design it would be > > > great > > > > > to see the migration path for users currently using Mesos with > > > ZooKeeper > > > > to > > > > > Etcd. Ideally, the migration can happen without much user > > intervention. > > > > > > > > > > Additionally, from our past experience, efforts like these are more > > > > > successful if the people writing the code have experience with how > > > things > > > > > work in Mesos code base. So I would recommend starting small, maybe > > > have > > > > a > > > > > few engineers work on a couple "newbie" tickets and do some small > > > > projects > > > > > and have those committed to the project. That gives the committers > > some > > > > > level of confidence about quality of the code and be more open to > > > bigger > > > > > changes like etcd integration. It would also help contributors get > a > > > > better > > > > > feeling for the lay of the land and see if they are truly > interested > > in > > > > > maintaining this piece of integration for the long haul. This is a > > bit > > > > of a > > > > > longer path but I think it would be more a fruitful one. > > > > > > > > > > Looking forward to seeing new contributions to Mesos including the > > > above > > > > > design! > > > > > > > > > > Thanks, > > > > > > > > > > On Fri, Apr 17, 2020 at 4:52 PM Samuel Marks <sam...@offscale.io> > > > wrote: > > > > > > > > > > > Happy to build a design doc, > > > > > > > > > > > > To answer your question on what Offscale.io is, it's my software > > and > > > > > > biomedical engineering consultancy. Currently it's still rather > > > small, > > > > > with > > > > > > only 8 engineers, but I'm expecting & preparing to grow rapidly. > > > > > > > > > > > > My philosophy is always open-source and patent-free, so that's > what > > > my > > > > > > consultancy—and for that matter, the charitable research that I > > fund > > > > > > through it <https://sydneyscientific.org>—follows. > > > > > > > > > > > > The goal of everything we create is: interoperable > (cross-platform, > > > > > > cross-technology, cross-language, multi-cloud); open-source > > > (Apache-2.0 > > > > > OR > > > > > > MIT); with a view towards scaling: > > > > > > > > > > > > - teams; > > > > > > - software-development <https://compilers.com.au>; > > > > > > - infrastructure [this proposed Mesos contribution + our > DevOps > > > > > > tooling]; > > > > > > - [in the charity's case] facilitating very large-scale > medical > > > > > > diagnostic screening. > > > > > > > > > > > > Technologies like Mesos we expect to both optimise resource > > > > > > allocation—reducing costs and increasing data locality—and award > us > > > > > > 'bragging rights' with which we can gain clients that are already > > > using > > > > > > Mesos (which, from my experience, is always big corporates… > though > > > > > > hopefully contributions like these will make it attractive to > small > > > > > > companies also). > > > > > > > > > > > > So no, we're not going anywhere, and are planning to maintain > this > > > > > library > > > > > > into the future > > > > > > > > > > > > PS: Once accepted by Mesos, we'll be making similar contributions > > to > > > > > other > > > > > > Mesos ecosystem projects like Chronos < > > > https://mesos.github.io/chronos > > > > >, > > > > > > Marathon <https://github.com/mesosphere/marathon>, and Aurora > > > > > > <https://github.com/aurora-scheduler/aurora> as well as to > > unrelated > > > > > > projects (e.g., removing etcd as a hard-dependency from > Kubernetes > > > > > > <https://kubernetes.io>… enabling them to choose between > > ZooKeeper, > > > > > etcd, > > > > > > and Consul). > > > > > > > > > > > > Thanks for your continual feedback, > > > > > > > > > > > > *SAMUEL MARKS* > > > > > > Sydney Medical School | Westmead Institute for Medical Research | > > > > > > https://linkedin.com/in/samuelmarks > > > > > > Director | Sydney Scientific Foundation Ltd < > > > > > https://sydneyscientific.org> > > > > > > | Offscale.io of Sydney Scientific Pty Ltd <https://offscale.io> > > > > > > > > > > > > > > > > > > On Sat, Apr 18, 2020 at 6:58 AM Benjamin Mahler < > > bmah...@apache.org> > > > > > > wrote: > > > > > > > > > > > > > Oh ok, could you tell us a little more about how you're using > > > Mesos? > > > > > And > > > > > > > what offscale.io is? > > > > > > > > > > > > > > Strictly speaking, we don't really need packaging and releases > as > > > we > > > > > can > > > > > > > bundle the dependency in our repo and that's what we do for > many > > of > > > > our > > > > > > > dependencies. > > > > > > > To me, the most important thing is the commitment to maintain > the > > > > > library > > > > > > > and address issues that come up. > > > > > > > I also would lean more towards a run-time flag rather than a > > build > > > > > level > > > > > > > flag, if possible. > > > > > > > > > > > > > > I think the best place to start would be to put together a > design > > > > doc. > > > > > > The > > > > > > > act of writing that will force the author to think through the > > > > details > > > > > > (and > > > > > > > there are a lot of them!), and we'll then get a chance to give > > > > > feedback. > > > > > > > You can look through the mailing list for past examples of > design > > > > docs > > > > > > (in > > > > > > > terms of which sections to include, etc). > > > > > > > > > > > > > > How does that sound? > > > > > > > > > > > > > > On Tue, Apr 14, 2020 at 8:44 PM Samuel Marks < > sam...@offscale.io > > > > > > > > wrote: > > > > > > > > > > > > > > > Dear Benjamin Mahler [and *Developers mailing-list for Apache > > > > > Mesos*], > > > > > > > > > > > > > > > > Thanks for responding so quickly. > > > > > > > > > > > > > > > > Actually this entire project I invested—time & money, > > including a > > > > > > > > development team—explicitly in order to contribute this to > > Apache > > > > > > Mesos. > > > > > > > So > > > > > > > > no releases yet, because I wanted to ensure it was up to the > > > > > > > specification > > > > > > > > requirements referenced in dev@mesos.apache.org before > > > proceeding > > > > > with > > > > > > > > packaging and releases. > > > > > > > > > > > > > > > > Tests have been setup in Travis CI for Linux (Ubuntu 18.04) > and > > > > > macOS, > > > > > > > > happy to set them up elsewhere also. There are also some > > Windows > > > > > builds > > > > > > > > that need a bit of tweaking, then they will be pushed into CI > > > also. > > > > > We > > > > > > > are > > > > > > > > just starting to do some work on reducing build & test times. > > > > > > > > > > > > > > > > Would be great to build a checklist of things you want to see > > > > before > > > > > we > > > > > > > > send the PR, e.g., > > > > > > > > > > > > > > > > - ☐ hosted docs; > > > > > > > > - ☐ CI/CD—including packaging—for Windows, Linux, and > macOS; > > > > > > > > - ☐ releases on GitHub; > > > > > > > > - ☐ consistent session and auth interface > > > > > > > > - ☐ different tests [can you expand here?] > > > > > > > > > > > > > > > > This is just an example checklist, would be best if you and > > > others > > > > > can > > > > > > > > flesh it out, so when we do send the PR it's in an > immediately > > > > > mergable > > > > > > > > state. > > > > > > > > > > > > > > > > BTW: Originally had a debate with my team about whether to > > send a > > > > PR > > > > > > out > > > > > > > of > > > > > > > > the blue—like Microsoft famously did for Node.js > > > > > > > > <https://github.com/nodejs/node/pull/4765>—or start an > *offer > > > > > thread* > > > > > > on > > > > > > > > the developers mailing-list. > > > > > > > > > > > > > > > > Looking forward to contributing 🦀 > > > > > > > > > > > > > > > > *SAMUEL MARKS* > > > > > > > > Sydney Medical School | Westmead Institute for Medical > > Research | > > > > > > > > https://linkedin.com/in/samuelmarks > > > > > > > > Director | Sydney Scientific Foundation Ltd < > > > > > > > https://sydneyscientific.org> > > > > > > > > | Offscale.io of Sydney Scientific Pty Ltd < > > https://offscale.io> > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 15, 2020 at 2:38 AM Benjamin Mahler < > > > > bmah...@apache.org> > > > > > > > > wrote: > > > > > > > > > > > > > > > > > Thanks for reaching out, a well maintained and well written > > > > wrapper > > > > > > > > > interface to the three backends would certainly make this > > > easier > > > > > for > > > > > > us > > > > > > > > vs > > > > > > > > > implementing such an interface ourselves. > > > > > > > > > > > > > > > > > > Is this the client interface? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/offscale/liboffkv/blob/d31181a1e74c5faa0b7f5d7001879640b4d9f111/liboffkv/client.hpp#L115-L142 > > > > > > > > > > > > > > > > > > At a quick glance, three ZK things that we rely on but seem > > to > > > be > > > > > > > absent > > > > > > > > > from the common interface is the ZK session, > authentication, > > > and > > > > > > > > > authorization. How will these be provided via the common > > > > interface? > > > > > > > > > > > > > > > > > > Here is our ZK interface wrapper if you want to see what > > kinds > > > of > > > > > > > things > > > > > > > > we > > > > > > > > > use: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/apache/mesos/blob/1.9.0/include/mesos/zookeeper/zookeeper.hpp#L72-L339 > > > > > > > > > > > > > > > > > > The project has 0 releases and 0 issues, what kind of usage > > has > > > > it > > > > > > > seen? > > > > > > > > > Has there been any testing yet? Would Offscale.io be doing > > some > > > > of > > > > > > the > > > > > > > > > testing? > > > > > > > > > > > > > > > > > > On Mon, Apr 13, 2020 at 7:54 PM Samuel Marks < > > > sam...@offscale.io > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Apache ZooKeeper <https://zookeeper.apache.org> is a > large > > > > > > > dependency. > > > > > > > > > > Enabling developers and operations to use etcd < > > > > https://etcd.io > > > > > >, > > > > > > > > Consul > > > > > > > > > > <https://consul.io>, or ZooKeeper should reduce resource > > > > > > utilisation > > > > > > > > and > > > > > > > > > > enable new use cases. > > > > > > > > > > > > > > > > > > > > There have already been a number of suggestions to get > rid > > of > > > > > hard > > > > > > > > > > dependency on ZooKeeper. For example, see: MESOS-1806 > > > > > > > > > > <https://issues.apache.org/jira/browse/MESOS-1806>, > > > MESOS-3574 > > > > > > > > > > <https://issues.apache.org/jira/browse/MESOS-3574>, > > > MESOS-3797 > > > > > > > > > > <https://issues.apache.org/jira/browse/MESOS-3797>, > > > MESOS-5828 > > > > > > > > > > <https://issues.apache.org/jira/browse/MESOS-5828>, > > > MESOS-5829 > > > > > > > > > > <https://issues.apache.org/jira/browse/MESOS-5829>. > > However, > > > > > there > > > > > > > are > > > > > > > > > > difficulties in supporting a few implementations for > > > different > > > > > > > services > > > > > > > > > > with quite distinct data models. > > > > > > > > > > > > > > > > > > > > A few months ago offscale.io invested in a solution to > > this > > > > > > problem > > > > > > > - > > > > > > > > > > liboffkv <https://github.com/offscale/liboffkv> – a > *C++* > > > > > library > > > > > > > > which > > > > > > > > > > provides a *uniform interface over ZooKeeper, Consul KV > and > > > > > etcd*. > > > > > > It > > > > > > > > > > abstracts common features of these services into its own > > data > > > > > model > > > > > > > > which > > > > > > > > > > is very similar to ZooKeeper’s one. Careful attention was > > > paid > > > > to > > > > > > > keep > > > > > > > > > > methods both efficient and consistent. It is > > cross-platform, > > > > > > > > > > open-source (*Apache-2.0 > > > > > > > > > > OR MIT*), and is written in C++, with vcpkg packaging, *C > > > > library > > > > > > > > output > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/offscale/liboffkv/blob/d3d549e/CMakeLists.txt#L29-L35 > > > > > > > > > > >*, > > > > > > > > > > and additional interfaces in *Go < > > > > > > > https://github.com/offscale?q=goffkv > > > > > > > > > >*, > > > > > > > > > > *Java > > > > > > > > > > <https://github.com/offscale/liboffkv-java>*, and *Rust > > > > > > > > > > <https://github.com/offscale/rsoffkv>*. > > > > > > > > > > > > > > > > > > > > Offscale.io proposes to replace all ZooKeeper usages in > > Mesos > > > > > with > > > > > > > > usages > > > > > > > > > > of liboffkv. Since all interactions which require > ZooKeeper > > > in > > > > > > Mesos > > > > > > > > are > > > > > > > > > > conducted through the class Group (and GroupProcess) > with a > > > > clear > > > > > > > > > interface > > > > > > > > > > the obvious way to introduce changes is to provide > another > > > > > > > > implementation > > > > > > > > > > of the class which uses liboffkv instead of ZooKeeper. In > > > this > > > > > case > > > > > > > the > > > > > > > > > > original implementation may be left unchanged in the > > codebase > > > > and > > > > > > > build > > > > > > > > > > flags to select from ZK-only and liboffkv variants may be > > > > > > introduced. > > > > > > > > > Once > > > > > > > > > > the community is confident, you can decide to remove the > > > > ZK-only > > > > > > > > option, > > > > > > > > > > and instead only support liboffkv [which internally has > > build > > > > > flags > > > > > > > for > > > > > > > > > > each service]. > > > > > > > > > > > > > > > > > > > > Removing the hard dependency on ZooKeeper will simplify > > local > > > > > > > > deployment > > > > > > > > > > for testing purposes as well as enable using Mesos in > > > clusters > > > > > > > without > > > > > > > > > > ZooKeeper, e.g. where etcd or Consul is used for > > > coordination. > > > > We > > > > > > > > expect > > > > > > > > > > this to greatly reduce the amount of resource—network, > CPU, > > > > disk, > > > > > > > > > > memory—usage in a datacenter environment. > > > > > > > > > > > > > > > > > > > > If the community accepts the initiative, we will > integrate > > > > > liboffkv > > > > > > > > into > > > > > > > > > > Mesos. We are also ready to develop the library and > > consider > > > > any > > > > > > > > > suggested > > > > > > > > > > improvements. > > > > > > > > > > *SAMUEL MARKS* > > > > > > > > > > Sydney Medical School | Westmead Institute for Medical > > > > Research | > > > > > > > > > > https://linkedin.com/in/samuelmarks > > > > > > > > > > Director | Sydney Scientific Foundation Ltd < > > > > > > > > > https://sydneyscientific.org> > > > > > > > > > > | Offscale.io of Sydney Scientific Pty Ltd < > > > > https://offscale.io> > > > > > > > > > > *SYDNEY SCIENTIFIC FOUNDATION and THE UNIVERSITY OF > SYDNEY* > > > > > > > > > > > > > > > > > > > > PS: We will be offering similar contributions to Chronos > > > > > > > > > > <https://mesos.github.io/chronos>, Marathon > > > > > > > > > > <https://github.com/mesosphere/marathon>, Aurora > > > > > > > > > > <https://github.com/aurora-scheduler/aurora>, and > related > > > > > > projects. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >