Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Design and implement alternative backend storage mechanism and DatasetType #593

Open
robertbartel opened this issue Apr 30, 2024 · 4 comments
Labels
epic A large, high-level task composed of (sub-epic) tasks maas MaaS Workstream

Comments

@robertbartel
Copy link
Contributor

Design and implement an (or potentially several) alternative other than OBJECT_STORE and MinIO. Also remove the FILESYSTEM DatasetType and related code if this isn't the (or a) direction chosen.

@robertbartel robertbartel added epic A large, high-level task composed of (sub-epic) tasks maas MaaS Workstream labels Apr 30, 2024
@christophertubbs
Copy link
Contributor

I recommend keeping a DatasetType for FILESYSTEM or having a similar ability to push/pull data to the file system as a fallback implementation, such as for local dev or for testing purposes. I would not suggest that this functionality be available in a non-dev environment, however. This will yield a backend storage mechanism that, while not necessarily desirable, will be "usable" in just about any environment. This guarantees that there will almost always be at least one implementation that is usable in a majority of situations, say if an object store is unavailable or network access is unavailable.

Imagine the difference between the default webserver for Django being... Django in dev but using Gunicorn in a deployed environment or using SQLite in dev but using Postgres when deployed.

@aaraney
Copy link
Member

aaraney commented Apr 30, 2024

Yeah, I am kind of opposed to this proposal and having a FILESYSTEM backing storage type. If the minio python library does not let us connect and use other S3 compliant stores, I think we should swap that for something that gives us more flexibility. In my mind, this is analogous to your Django analogy, @christophertubbs. Sure, we might want to change storage service providers, but I don't think constraining ourselves to S3 is really a constraint. It is the SQL of object store apis.

I would rather mock out a file system backed S3 client than add an additional tower of abstractions to support is seemly limited use case.

@robertbartel
Copy link
Contributor Author

@christophertubbs, the big problem with a FILESYSTEM dataset type - the reason it's not already implemented - is the distributed computation. To really start using it, we would have to implement custom synchronization capabilities across the different nodes, either at the service (much more complicated) or worker level. We could implement some sort of dev-only conditional logic instead, but I don't think that ends up being considerably less work than worker-level-synchronization. And while I don't really care for that idea, it would bring some benefits.

@aaraney, I'd argue that S3 is technically already an alternative, distinct backing storage type. The necessary pieces to support it are going to be very similar to those for OBJECT_STORE, but I'm fairly sure non-identical to the point that it needs to be distinguished. Even if there are ways we could avoid doing that, right now we can only have one manager per DatasetType. We'd lose the ability to to connect to a local object store. Perhaps removing the one-manager-per-type restriction is really the thing that needs to be changed, but regardless this prevents things from being easily snap-into-place and without consequences.

The main things I had in mind here are something using distributed Swarm volumes (probably using the Container Storage Interface) and S3. And I don't necessarily expect this to be done too terribly soon (though we should probably start working to support S3 one way or another in the more near term) as much as I wanted to make sure it being tracked.

@robertbartel
Copy link
Contributor Author

I did some looking into options for CSI-based cluster volumes. This looks promising for the future, but it involves standing up (or otherwise having access to) other services. I think an SMB option may be the simplest to embed within a DMOD deployment, though we'll probably want to eventually have NFS also.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
epic A large, high-level task composed of (sub-epic) tasks maas MaaS Workstream
Projects
None yet
Development

No branches or pull requests

3 participants