Ask HN: Is there server-side software that we are missing in 2018?
It seems like there are so many choices in each category that there's nothing left to do.
I mean things like RDBMS, NoSQL databases, time-series databases, key-value stores, message queue, web servers.
I remember many years ago if you were building something you'd notice the missing solutions and tools because there were things you couldn't do easily (like lightweight application-level caching before redis/memcached popularity).
Nowadays it seems like there's nothing missing.
114 comments
[ 2.8 ms ] story [ 120 ms ] thread[1] https://jena.apache.org/index.html http://janusgraph.org [2] https://github.com/4store/4store [3] https://github.com/Caesar11/gStore
We already have jekyll and hugo
[1] https://jaspervdj.be/hakyll/
There's lots of things missing. There's just nothing missing in established categories. Why would there be?
Start your own category, create software for it, then convince everyone that the category is important.
Also, today's tech solves today's problems.
The space is still early enough that there is a lot of value in competing options
I'm sure I've seen announcements for others pop up on HN too.
A lot of what FaaSes give you is a basically a PaaS, with autoscale to zero and preconfigured event sources. If you don't need those -- actually need them -- then you can get away with a bog ordinary PaaS for the time being.
It feels like deb repos, PyPI, NPM, CPAN, CRAN, etc. should be put in there, with the addition of binaries for popular architectures. And probably Docker-like images, although I think if they are not opaque blobs, it would be better for rsync-like differential compression (which Git implicitly provides).
There will be some small files and some big files. I want it to be like Git so I can clone locally, not just go to the cloud. The way that Git is trivial to set up and clone through SSH is nice too.
It probably has to have a notion of "user", like a local file system. (This makes the problem a lot harder; git doesn't really have permissions.)
BTW Julia's package manager just used git, but I watched a talk that said this ended up being a really bad idea, especially on Windows.
As far as I understand IPFS has some of these properties. Has anybody used it? Could I use it for the package repository use case?
I don't know much about it, but Project Atomic sounds similar too: https://www.projectatomic.io/
Any other projects that seem like a close fit?
BTW I think this would also be useful in the data center, as some companies like Twitter apparently use BitTorrent in data centers to start large jobs quickly (i.e replicate the same 500 MB binary to 1000 machines).
The reason people use cloud services instead of running these themselves is because the cloud storage fee is usually less than paying someone to run a distributed system.
Plenty of people run their own BitTorrent trackers too.
In my mind, "cloud" open source means: you need a team of experts to run it. git and BitTorrent are different -- they are designed for you to run it yourself.
Also, the model is to "sync" and then "read/write", as with git (and BitTorrent). Not just read/write remotely. So maybe I should call it a "replicated file system" rather than a distributed one.
I guess the main difference with git is that it should handle large binaries / many files, you shouldn't have to clone the entire repo, and maybe users/permissions.
IPFS sounds a lot like what you want. Tahoe LAFS plays in this space a bit
The newer distributed file systems I've seen don't like permissions. They like cryptographically-backed capabilities. You have the permission to read the file because you have the ability to decrypt, through the key. (Of course, key management is easy </sarc>).
Some user-facing distributed filesystem talks drift into FUSE (or similar) territory. A TahoeLAFS dev talks about how users probably don't actually know what they want: https://plus.google.com/108313527900507320366/posts/ZrgdgLhV... (QUIBBLES: REAL FILESYSTEM VS. STORAGE APP section). This is probably less relevant for a package manager.
The first time I read about BitTorrent based deployment was from Facebook.
Still, I'm definitely interested in whether I could use it to upload say 1 TB of source code, and maybe 5 TB of binaries, and have people sync efficiently (and partially).
We'll be supporting PMML and the like as well. The goal is to hit the simple things rather than perpetuating the latest hype like the AutoML stuff people are going on about currently. If you'd be interested, would be happy to have a conversation to go over what we're trying to do. We hope to just provide a platform neutral tool for building and deploying models similar to sagemaker (but cloud agnostic)
At the time, that was nginx + manual autoscaling, then it was ELBs and autoscaling groups, now it's kubernetes and containers, maybe hosted. It's still not there.
I'm excited about the software that makes that operable at scale. It seems like a service mesh is a good idea. It seems like mutual security between services is a good idea. It seems like storing routing configuration in a separate control plane that is executed in a data plane like Envoy is a good idea.
There's a bag of software at CNCF that's loosely organized around this, but I don't think the "just deploy some code, it can scale and you can have tons of services doing that with good visibility and operability" is quite there. I'm really exicted about Envoy, but I don't think there's a good control plane for it. I'm part of a company that's working on a commercial implementation (turbinelabs.io), and Istio is in a similar space.
There's still work to be done!
I haven't seen a decent open source framework that makes it easy to package a trained model with prepocessing and postprocessing steps and deploy it behind an API.
Adding performance tracking and model validation on top of that would be great.
Then there are things like queuing/batching and autoscaling.
Closes thing that comes to mind right now is tensorflow serving and their k8s stuff (which it looks like they just renamed to tf-operator and moved to kubeflow org https://github.com/kubeflow/tf-operator)
Along with packaging a trained model are things like: Snapshot/versioning of the training and test data used to create the model, versioning of the model, storing versioned models in a model registry, auto-deploying models from the registry to target environments, telemetry from deployed models.
Closest I've found is https://github.com/mitdbg/modeldb, and I've spoken to the woman leading the effort. They still have data versioning as an open question, and don't see the need. But there are training set modification, results RCA, and other use cases that drive the need to catalog training/test data with the model that results.
It'll get there. Just a question of when and how.
One thing I'll say is "just k8s" isn't realistic. You need a lot more than that.
It should run within k8s but should also be minimalistic. Not a lot of platforms provide that. A lot of our docs on the internals are still being built out yet, but we provide everything ranging from an offline install of anaconda to managed connectivity gateway to hadoop and spark clusters.
We also have built in model serving and experiment tracking (which in reality is just a relational database with a rest api automatically integrated in to the platform) - if you're interested in learning more please reach out.
I do think there's room for new tools tho, but by definition, they're on the cutting edge and not especially visible if you're not looking. Things like stream processing are already incredibly useful and only getting better. Machine learning could be in this list too. It might not be a 1000% improvement like caching, but that's part of a maturing industry.
There is some work we are doing (https://kanister.io) to help with these issues but there are a lot of emerging solutions in this space. Look at CNCF's landscape for some more detail.
We use Jekyll for more than one site which is not a blog, works great for us so far. What features do you think are missing that you wish it had?
2. Explain your use-cases? Why not call ffmpeg directly? You'll need to familiarize yourself with the original library functionality anyway, no?
3. No opinion. Not particularly interested in games. Might be hard to generalize, maybe?
4. Versatile in what sense? What are your complaints with existing media formats? I think licensing is an issue, but stuff like VP9 and Opus seem to take care of that matter. I'm not an expert, but I think both MP4 and MKV can already hold an unlimited number of media files.
We are so far from that reality that it seems obvious there is still a ton of work to do. You can see bits and pieces of solutions but if your product asks me to define indexes, tune queries, determine sharding keys, write against computer-centric (vs human-centric) APIs, cannot deal with change easily, requires babysitting, or falls over after hitting some incidental tipping point relative to the resources available to a single machine, you've not hit it.
I have not used Google Spanner but at 30k/ft it seems like the closest thing out there to the idealized case -- but being closed source and centralized it is not really a "solved problem" imho.
I would use it for replicated / distributed storage for data frames (e.g. R or Pandas), which is somewhat related to my other request [1]
The difference here is that there is structure to the files.
[1] https://news.ycombinator.com/item?id=16394048
I'm toying with the idea of build a relational-centric language (and maybe storage) because I think the same.
I wanna to create a table/relation as easy as:
in memory. Other things as triggers, PK, FK, views, etc obscure the simplicity of the relational model and make people say weird stuff as "relational database not scale" or "are too inflexible".I think exist a LOT of easy things to enrich the model and make it more usefull. For example, is ok to say:
Is totally ok to nest relations on relations (this alone could make wonders for ORM :) ).Oh, this also is something that need a better way!
RDBMS are too coupled. I remember to ask if I can ditch the SQL parsing of sqlite and call directly the storage (so I can put my own query engine on top) and that was like if I'm nuts!.
I think is possible to build a RDBMS that is semi-plugable. To make things as swap parts of the engine on "user land". If someone for example wanna create a new kind of index is must be as easy as write:
and plug it into the engine just fine. I think do something like flask/django-esque framework where is possible to have custom fields, validations, middlewares, etc on top of a core storage layer and a default implementation.So, instead of go with redis or something else I could build my "redis-like" api INSIDE the engine and get the advantages of locality, integrity, etc.
ie: See a RDBMS as an API Backend.
This could be model (instead of MVC in common web frameworks) as CQRS or something similar.
Why is RDBMS tooling so completely shite.
I have an IDE that can index several million lines of code and apply accurately timely context dependent intelligent code completion - I have yet to find a good way to debug a MySQL stored procedure (I hate them, I inherited them, except for very simple use cases they are getting slow replaced).
Using the graphQL API requires no knowledge of the backend data store. Therefore, clients and consumers of your API do not need to know about shards, indices, SQL queries, etc.
If you have an existing DynamoDB table, you can automatically generate a GraphQL schema/API from it too.
https://aws.amazon.com/appsync/
disclaimer: i work on aws appsync
I've been searching for something self-hosted that can run in my server's spare capacity and monitor the OS and application logs with a simple searching interface (just a web interface to grep would be handy) and come up short. If I can't host it on the cheapest DO plan, it's out of my budget. I really don't want to have to build it myself but I'm just about at that point.
The "big" solutions require some hardware because they do a lot more than merely collecting your logs.
It’s still new, but the architecture is sound and it worked well for me on a small single-node deployment (about 30 clients sending logs).
[0]: https://github.com/mozilla-services/hindsight
There is check_logfile which has a similar name but is a different library, I wrote about how to set this up a while ago: https://medium.com/luma-consulting/how-to-install-check-logf...
It's not super obvious how this plugin works unfortunately. Not the craziest thing in the world to configure but certainly not easy starting from zero!
AWS in Plain English https://www.expeditedssl.com/aws-in-plain-english
Anything that potentially touches FFMPEG basically
I can name a few examples that I still think need improvements
- Online gif editors
- Video editing / clipping
- Background image editing / online photoshop equivalents
- Better alternatives than lucidpress / adobeIndesign for catalog page / brochure creation
- Machine learning / deepfake online tool, this is all driven client side mostly
- Pretty much anything client side thats not yet server-side is open game I would say
- PDF markup tools could be better for online-based services, especially for architectural design
- CAD-based online programs for retails so customers can DIY build their own warehouse or layout schemas is lacking
- Better online RDBMS. Currently, there's just airtable, its lacking some core features like refential integrity
- Integrating space-repetition learning in most educational based services (lynda.com,pluralsight, etc)
- Managed ecommerce cart / hosting services. Its a well understood problem that should technically be easy for a client to do.
Again, I would say, almost every profitable service touches some form FFMPEG for video / image editing / 3D is definitely still out there. There's such a huge untapped market out there combining all of theses services in one package.
Something very simple (for example for Build Server):
Build Failed (Event) -> Assign responsible user for a crash -> Send Notification -> Deliver Notification via user's configured notification systems (email, push, sms..)
This is a Event Sourcing, but event sourcing works well only for one part of the platform - write side, but reader side is sometimes too hard to implement. Sometimes there are a problems with eventual consistency and you actually need to wait while some of the reducers in chain will process this event and starting from this point everything became toooo slow to develop and you basically start to redevelop the wheel - this is just a database engine de-factor. Meh.
So: maybe. We might pull this off.
Log storage and search for structured logs (e.g. JSON or CEE, not merely stringblobs). We have paid solutions (Splunk, Loggly, Papertrail), and then we have Elasticsearch, which gets worse in this use scenario with every release.
Message stream processing engine that doesn't require restarting to add a query or data sink, so you could build monitoring system around it. In fact, a monitoring system designed to allow you to easily add your custom processing or data sink.
Infrastructure inventory that can be both filled by hand and kept updated by machine and that can be queried from script or browsed by human. For that it would be useful to have a good topic maps engine, which is another missing thing.
OS updates manager that can handle more than just Red Hat/CentOS (Red Hat Satellite or Spacewalk) or just Ubuntu (Canonical Landscape), and while at it, one that doesn't try to be underdeveloped configuration management tool (like CFEngine or Puppet) and underdeveloped deployment tool (like Ansible), but can cooperate with them.
And there's much more where these came from.