Il gio 27 lug 2017, 18:28 Sijie Guo <guosi...@gmail.com> ha scritto:

> On Thu, Jul 27, 2017 at 8:48 AM, Enrico Olivelli <eolive...@gmail.com>
> wrote:
>
> > Il gio 27 lug 2017, 17:27 Venkateswara Rao Jujjuri <jujj...@gmail.com>
> ha
> > scritto:
> >
> > > We have inMemoryMetaStore.java already to store metadata locally isn't
> > it?
> > > there are some tests that make use of that too. So if you don't need ZK
> > for
> > > consensus
> > > and you can use this inMemoryMetaStore for metadata store.
> > >
> >
> > MetadataStore should share data between clients and server, as
> > InMemoryMetaStore  is only in memory it is not useful.
> > We need a metadatastore on the bookie, with data persistence and memory
> > bounds, and on the client side we will access those metadata thru the
> > bookie.
> >
>
> There are already a MSLedgerManager :
>
> https://github.com/apache/bookkeeper/blob/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/MSLedgerManagerFactory.java


This facility still uses ZK but it is a good example. Is this used in
production by someone or is here only for tests?

>From your answers I understand that my idea is not so silly, I think that
in the next months I will go on and draft some design notes and a prototype

Thank you

Enrico

>
>
> You just need to implement the metastore api.
>
>
> https://github.com/apache/bookkeeper/blob/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/metastore/MetastoreTable.java
>
> If your client and bookie are running on same JVM, you can just share the
> embedded k/v instance. It can be either in-memory or local k/v. you don't
> necessarily need any network protocol.
>
>
> >
> > Enrico
> >
> >
> >
> > > On Thu, Jul 27, 2017 at 12:42 AM, Sijie Guo <guosi...@gmail.com>
> wrote:
> > >
> > > > it might be better to call it 'local model' or 'standalone mode',
> > rather
> > > > than 'zookeeper-less'.
> > > >
> > > > On Wed, Jul 26, 2017 at 8:26 PM, Enrico Olivelli <
> eolive...@gmail.com>
> > > > wrote:
> > > >
> > > > > Hi,
> > > > > I would like to share this idea with you before starting a real
> > design
> > > > > effort for this new configuration.
> > > >
> > > >
> > > > > Sometimes I have to run Bookie + BookKeeper inside the same JVM,
> > > > > essentially because I want my applications to run both in "cluster
> > > mode"
> > > > > and in "single instance mode".
> > > > > I have some other use case of embedding the Bookie, but this is not
> > the
> > > > > scope of this email.
> > > > >
> > > > > In order to run BookKeeper we need ZooKeeper and running ZooKeeper
> > > inside
> > > > > the same process is tricky and you know, it is not the suggested
> > > > > configuration, due to several aspects (out of the scope of this
> email
> > > > > too....)
> > > > >
> > > > > I would like to make it run without ZooKeeper at all.
> > > > > This idea will support my use case (Bookie + Client inside the same
> > > JVM)
> > > > > and the single Bookie use case, which is a feature that could be
> > useful
> > > > in
> > > > > general.
> > > > > Some other projects, like HBase, have "single server" vs "multi
> > server"
> > > > > setup, and so I think it will be a good idea for the project and
> for
> > > > > gathering more interest and use cases.
> > > > >
> > > > > We are using ZooKeeper for (at least) these purposes:
> > > > > - bookie discovery
> > > > > - ledger metadata management
> > > > > - auditor leader election
> > > > > - global configuration settings  (like autorecovery
> > > enabled/disabled....)
> > > > >
> > > > > my case is to have only one Bookie, so things are really simpler,
> no
> > > > > auditor, no shared configuration, no underreplication/overreplicati
> > on,
> > > > no
> > > > > need for 'discovery'
> > > > >
> > > > > In order to address the bookie discovery we can just have some
> > > > client-side
> > > > > configuration to set the address of the Bookie and have some
> special
> > > > > PlacementPolicy which only returns the same bookie.
> > > > >
> > > > > The big thing is to implement the ledger metadata management,
> because
> > > > both
> > > > > the Bookie and the client must deal with it.
> > > > > My idea is to add to the Bookie protocol all the functions to
> access
> > > > > LedgersMetadata (create/list/update with CAS.....), this RPCs will
> > call
> > > > the
> > > > > underlying LedgerManager
> > > > >
> > > >
> > > > I think this is in general very good approach to take. It will make
> the
> > > > bookie client not depends on metadata store directly and delegating
> the
> > > > heavy work to the server (bookie side). Once the client is thin, it
> is
> > > easy
> > > > to implement clients in other languages.
> > > >
> > > > However, I do not think it is necessarily for your use case. You can
> > make
> > > > this as a separate topic. For RPC, I would suggest exploring gPRC (it
> > is
> > > > protobuf + netty), that would be much better for metadata rpcs rather
> > > than
> > > > implementing the logic in bookie protocol.
> > > >
> > > >
> > > > >
> > > > > On the client side we will not use ZK but execute RPCs on the
> Bookie
> > > > > endpoint (a special LedgerManager which do not use ZK but uses
> RPCs)
> > > > >
> > > > > On the Bookie side we will have a local ledger metadata management
> > > which
> > > > > persists data on disk, we could use existing Key-Value stores, like
> > > > RocksDB
> > > > > or MapDB, or what ever we prefer, we need something which supports
> > CAS
> > > > and
> > > > > eventually let us put bounds on used memory.
> > > > >
> > > >
> > > > In your use case, you might be able to just implement a ledger
> manager
> > > > using an embedded k/v.
> > > >
> > > >
> > > > >
> > > > > Does this make sense to you ?
> > > > >
> > > > > -- Enrico
> > > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Jvrao
> > > ---
> > > First they ignore you, then they laugh at you, then they fight you,
> then
> > > you win. - Mahatma Gandhi
> > >
> > --
> >
> >
> > -- Enrico Olivelli
> >
>
-- 


-- Enrico Olivelli

Reply via email to