Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [che-dev] Maybe it's time to admit

I think one way to take a half-step in the right direction, at least from the "number of containers in a workspace" perspective, is to get a little fancier with what containers we ship. Currently, Che is set up so that you can very easily add e.g. Go tooling to your Java workspace. This is reflected in our design but is probably a <1% use case.

Two things that I think are worth considering and relatively easy to do are:

* Package "spins" of the Theia container, such as che-theia-java, che-theia-go, etc. This would allow you to easily run the IDE component of single-language workspaces in effectively a single container and remove the requirement for those sidecars to exist.

* Run plugins that depend on che-sidecar-node in the Theia container. As far as I know (apart from node versions), we're not really doing anything to these containers (e.g. [1]).

The two ideas above would require a bit of work (building+maintaining new images, but also see [2]) but I don't think it's a huge burden given that we already maintain the images involved.

The major downside, though, is that it introduces a dependency between plugins/editors in a devfile. Thus far we've focused on the flexibility that sidecars give us -- plugins are self-contained and guaranteed to work since they come with their own dependencies. This may be a significant enough philosophical change to block the points above, but I think it could also be viewed as reinforcing our core workflows. The current functionality would still exist (you could always use the "base" theia and a sidecar-based java plugin as we do currently).

I know we're averse to breaking the "one application per container" general rule of thumb, but it does sometimes feel like what we're doing is dividing one application into multiple containers.

[1] - https://github.com/che-dockerfiles/che-sidecar-node/blob/master/Dockerfile [2] - This would require updating the plugin meta.yaml spec to allow specifying a memory/cpu requirement for non-sidecar plugins [3] and some work in the plugin broker to take it into account.
[3] - https://github.com/eclipse/che/issues/14511

- Angel


On 10/6/20 7:17 PM, Mario Loriedo wrote:
One container per plugin is NOT a good idea. But that's something we have been discussing in the past. We have discussed how to mitigate it too [1] and running multiple plugins in one container is currently possible [2].

Anyway I think that what Thomas is trying to challenge is the choice to use a sidecar approach rather than a VM like approach for development environments.

Is it the right moment to discuss it? Probably not. We are suuuuper busy with our tight release schedules.
But will we ever have a "right moment" to discuss? Probably not so....

So why aren't we using a VM-like dev machine with a predefined set of tools and runtimes? A machine where a user could even install his favorite tool or a different version of one of the runtimes available there. UX would be similar to local machines and developers would feel at home right?

Right. But this approach has some issues too and here is a list:

The VM approach augment the divergence between dev and production (works on my machine) The VM approach leads to snowflakes, non repeatable environments (new dev on boarding takes time) The VM approach moves away devs from ops (they do not share a clear contract) The VM approach doesn't scale (it takes time to switch between multiple dev environments) The VM approach makes it harder to deploy the target app on modern cloud platforms (kubernetes)

These aren't new arguments. The twelve factors app methodology and the ultimate success of containers are based on principles that address the VM approach. But dev tools haven't been fully adapted (yet) to this new paradigm and Thomas has mentioned a list of downsides of the sidecar approach.

Should we go back to the mainstream model then? I don't think so. Addressing the downsides of the VM approach is our key differentiator and we have a great opportunity to win. Is our sidecar model mature? I don't think so. We still have some important issues to address but we have made an amazing job exploring unknown lands and we should keep up the good work.

[1] https://github.com/eclipse/che/issues/15966
[2] https://github.com/eclipse/che/issues/15373


On Tue, Oct 6, 2020 at 4:20 PM Aurélien Pupier <apupier@xxxxxxxxxx <mailto:apupier@xxxxxxxxxx>> wrote:

    Hi,

    On Tue, Oct 6, 2020 at 4:04 PM Eric Williams <ericwill@xxxxxxxxxx
    <mailto:ericwill@xxxxxxxxxx>> wrote:

        Hello,

        On 10/6/20 7:07 AM, Thomas Mäder wrote:
         > ...that our plugin model (contanier per plugin) is wrong:
         >
         > * we're investing a lot of effort into our
        container-per-plugin model,
         > yet we can't really make it work for many vs code extensions,
        leading to
         > weird errors and testing effort at each update
         >
         > * we need to run our own plugin registry with our own
        meta.yml, etc.,
         > which is becoming a bottleneck

        Some things we can do to reduce this maintenance cost:
        * only one version of the plugin in the registry: we release Che
        often
        enough that we don't need multiple versions of one plugin
        * increased automation + testing (in progress)
        * unify registry and sidecar image contribution process


         > * we need a "dev-machine" image anyway (for example, with
        maven, npm,
         > typescript or whatever the stack needs)
         >
         > * the focus seems to be on out-of-the-box experience, which
        could easily
         > include making a specific "IDE" image per stack.
         >
         > * there is an effort to make the different containers
        invisible to the user
         >
         > * all other contenders in the market have a "single container
        for the
         > IDE" model
         >
         > * the model only works for Theia and we seem to be starting
        to support
         > other editors

        I think there is a strong argument to be made for merging the
        language
        sidecar and dev-machine images. Often the use cases for both of
        these
        containers is so tightly coupled that it makes sense to combine
        them.
        For example in Java, you'd have vscode-java (and related
        extensions) all
        running on the java-maven dev machine container.

        For non-language plugins (container tooling, for example), it still
        makes sense to keep the plugins in separate containers, as there
        is no
        overlap in the environment needed to run these tools.


    Unfortunately, I think I have a use case with an overlap: for VS
    Code Camel K. VS Code Camel K requires VS Code Kubernetes and fits
    in "container tooling". But it also requires VS Code Java to provide
    Java completion for Camel K files (which is why the completion for
    Java is not still not working for Camel K files)



        Eric

        _______________________________________________
        che-dev mailing list
        che-dev@xxxxxxxxxxx <mailto:che-dev@xxxxxxxxxxx>
        To unsubscribe from this list, visit
        https://www.eclipse.org/mailman/listinfo/che-dev



--
    Aurélien Pupier

    Principal Software Engineer, Fuse Tooling

    Red Hat France <https://www.redhat.com/>

    apupier@xxxxxxxxxx <mailto:apupier@xxxxxxxxxx> IM: apupier

    <https://www.redhat.com/>

    _______________________________________________
    che-dev mailing list
    che-dev@xxxxxxxxxxx <mailto:che-dev@xxxxxxxxxxx>
    To unsubscribe from this list, visit
    https://www.eclipse.org/mailman/listinfo/che-dev


_______________________________________________
che-dev mailing list
che-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/che-dev




Back to the top