mosuka / blast

Blast is a full text search and indexing server, written in Go, built on top of Bleve.
Apache License 2.0
1.08k stars 76 forks source link

Possible to run as embedded service? #55

Closed justinfx closed 5 years ago

justinfx commented 5 years ago

Is it possible to run blast as an embedded service into an existing application cluster? That is, if there is already a service running 2+ instances and it wants to add indexing, could it run a blast cluster using the existing service nodes? I'm thinking of this like the way Nats.io server can be embedded instead of having to run standalone gnatsd processes.

mosuka commented 5 years ago

Hi @justinfx , Yes. I think that you can run if you specify an unused port properly.

justinfx commented 5 years ago

Cool. I was hoping you had an example of running it embedded. But if not I can dig around in the tests and the cmd/ to see what is needed.

mosuka commented 5 years ago

But, Blast is still under development, I do not recommend it because the internal implementation may change significantly.

ghost commented 5 years ago

hey @justinfx

To run many processes inside a single one you can use Supervision trees. There is a stable on for Golang here: https://github.com/thejerf/suture

There is also another lib here that i am working on a bit: https://github.com/joeblew99/runner Its a bit wobbly still though.

justinfx commented 5 years ago

@gedw99 thanks but I wasn't really asking about managing processes. I wanted to know if the services were written as libraries so they could be started via code, embedded in the application. This is the way gnatsd and its streaming add-on service can work, as well as a number of embedded databases.

ghost commented 5 years ago

Hey all.

I have been using a grpc implemention that is able to be compiled and exposes the API as golang channels You can use normal grpc and it generates the golang client and server and all the golang channel code

This means you can embed it and not have any network endpoints or ports opened !

Because blast is based on protobuf and grpc it's very likely to work and be easy to keep updated ( no technical debt ) since it's protobufs.

Let me know if you want the links ??