The post in question points to dependency package managers however not system packages, such as NPM, which has pre and post build scripts, install scripts, etc.
400 karma · joined January 2, 2013
The post in question points to dependency package managers however not system packages, such as NPM, which has pre and post build scripts, install scripts, etc.
My interpretation of it was to pursue the type of work and things you focus on as an Engineering Manager in terms of getting the most of out teams for the goals of the organization but doing so without the need to manage people directly. Which I would agree is nice since it’s really hard to wear the technical hat and also directly manage people, so separation of concerns makes for far less context switching and folks to naturally align doing the part of the job that they do best. I also agree with this definition since it’s how I think of it too.
I am surprised there is no gauge update API yet (instead of callback only), this is a common use case and I don't think folks should be expected to implement their own. Especially since it will lead to potentially allocation heavy bespoke implementations, depending on use case given mutex+callback+other structures that likely need to be heap allocated (vs a simple int64 wrapper with atomic update/load APIs).
Also I would just say that the fact the APIs differ a lot to more common popular Prometheus client libraries does beg the question of do we need more complicated APIs that folks have a harder time using. Now is the time to modernize these before everyone is instrumented with some generation of a client library that would need to change/evolve. The whole idea of an OTel SDK is instrument once and then avoid needing to re-instrument again when making changes to your observability pipeline and where it's pointed. This becomes a hard sell if OTel SDK needs to shift fairly significantly to support more popular & common use cases with more typical APIs and by doing so leaves a whole bunch of OTel instrumented code that needs to be modernized to a different looking API.
Have encountered this a lot from teams attempting to use the metrics SDK.
Are you open to comment on specifics here and also what kind of shim you had to put in front of the SDK? It would be great to continue to retrieve feedback so that we can as a community have a good idea of what remains before it's possible to use the SDK for real world production use cases in anger. Just wiring up the setup in your app used to be fairly painful but that has gotten somewhat better over the last 12-24 months, I'd love to also hear what is currently causing compatibility issues w/ the metric types themselves using the SDK which requires a shim and what the shim is doing to achieve compatibility.
At query time these streams are read by evaluating the next timestamp of all written streams for a block of time and then taking the datapoint with the lowest timestamp of the streams.
M3DB also runs a background tick that targets to complete within a few minutes each run to amortize CPU. During this process each series merges any streams that have sibling streams created due to out of order writes, producing one single in order stream. This is done by the same process used at query time to read the datapoints in order and they are consequently written to a new single compressed stream. This way extra computation due to our of order writes is amortized and only if a large percentage of series are written in time descending order do you end up with a significant overhead at write and read time. It also reduces the cost of persisting the current mutable data to a volume on disk (whether for snapshot or for persisting data for a completed time time window).
Storage, aggregation and compute are all separate and scale up/down independently. The coordinator and query services are both stateless and you just add more instances, DB nodes do not do compression/decompression for instance all this happens as part of computation on the query service.
M3DB for storage has a k8s operator that can manage clusters (expansion, etc), and the M3 aggregator can be deployed as a stateful set in k8s and also can be independently expanded.
Global state makes thing impossible like parallel unit tests that all use another module, or changing things like “MaxConcurrency” in a way that is synchronized across goroutines that might already be calling into the third party module.
My 2c.
[0]: https://docs.m3db.io/m3db/architecture/engine/
[1]: https://docs.m3db.io/operational_guide/resource_limits/
[2]: https://fosdem.org/2020/schedule/event/m3db/, https://fosdem.org/2020/schedule/event/m3db/attachments/audi... (PDF)
I am biased obviously as a contributor. Having said that I think it's always worth understanding active/passive type replication and the implications and see how other solutions handle this scaling and reliability problem to better understand the underlying challenges that will be faced with instance upgrades, failover and failures in a cluster.
https://h1bdata.info/index.php?em=netflix&year=2020
https://h1bdata.info/index.php?em=apple&year=2020
Anyone interested in this topic might want to check out an issue thread on the Thanos GitHub project. I would love to see M3, Thanos, Cortex and other Prometheus long term storage solutions all be able to benefit from a project in this space that could dynamically pull back data from any form of Prometheus long term storage using the Prometheus Remote Read protocol: https://github.com/thanos-io/thanos/issues/2682
Spark and Presto both support predicate push down to a data layer, which can be a Prometheus long term metrics store, and are able to perform queries on arbitrary sets of data.
Spark is also super useful for ETLing data into a warehouse (such as HDFS or other backends, i.e. see the BigQuery connector for Spark[1] that could write a query from say a Prometheus long term store metrics and export it into BigQuery for further querying).
[1]: https://cloud.google.com/dataproc/docs/tutorials/bigquery-co...
With Vitess I believe most get started with just deploying VTGate and just proxying their existing queries to their existing MySQL server, then once that is working nicely, start to range shard and expand the cluster sitting behind VTGate.
Chronosphere is a Series A startup delivering the most highly scalable and reliable open source metric data platform to the world. That platform is M3, which was created by the founders of Chronosphere while at Uber. It is the only open source metric data platform proven at petabyte scale in production, stores over tens of billions of metric time series and ingests and serves billions of data points per second. Chronosphere is a modern and highly scalable monitoring monitoring and observability tool built on M3 for companies faced with scaling challenges. We deliver products and APIs that run in the cloud as a single hosted platform.
Senior Frontend Engineer:
Are you driven by how users digest, explore and build proficiency using a product? As a front-end product engineer you will build interfaces that engineers, data scientists, business analysts and operations staff will use every day to build, analyze and operate products at scale for the companies they work at. Your natural design instincts will be paired with great Javascript fundamentals and how to best design and consume APIs, either using GraphQL or other APIs. For our customers, our tools are leveraged by thousands of engineers on a daily basis to measure and monitor their products and systems. Your work will continue to drive fundamental change to how software is created, delivered and operates all over the world. You will work alongside the engineering team, the head of product and product team, the CEO and the CTO.
Technologies: Javascript (ES6), React, GraphQL on the front end. Go, GRPC, Kubernetes, MySQL and M3DB (distributed time series database) on the back end.
Senior UX Designer:
We're looking for a UX designer to help build Chronosphere. You will drive and complete the design process for our cloud web application from beginning to end. You will work with multiple teams to design a clean, usable console focusing on metrics, data visualization, altering, dashboards, infrastructure, and more. We are open to this role being in either New York or our Bellevue, Washington office. You will work alongside the head of product, the engineering team, the CEO and the CTO.
What we offer: Excellent benefits, competitive pay and equity at Series A, flexible working environment, challenging problems at scale and pragmatically harnessing millions of instrumentation being collected per second.
Senior Frontend Engineer: https://boards.greenhouse.io/chronosphere/jobs/4012681003
Senior UX Designer: https://boards.greenhouse.io/chronosphere/jobs/4012682003
Email me with questions at rob at chronosphere.io
Regarding remote for now: If you are applying to work in the NYC or Seattle office you are not expected to interview in person (it will be remote), or work in person until the CV-19 crisis is resolved (work will be remote). The roles are not remote, but no one is in the office currently.
Sure they're not fatalities, but do you really want to go to an overcrowded hospital for COVID-19? (Will be worse when ventilators run out and hospitalization can't help you nearly as much)
I'm assuming this is an out of process inverted index used alongside ClickHouse? Or is it more of a secondary table contained by ClickHouse which can be searched to find the metrics, then the data is looked up?
The latter scales not as well with billions of unique metrics since it's always a scan across the unique metrics stored in the time window your query searches for (since any arbitrary dimensions can be specified, all must be evaluated). This is the drawback of PromHouse which is an implementation of Prometheus remote storage on top of ClickHouse - and the major reason why PromHouse was only ever a proof of concept rather than a production offering.
For us the cost savings vs OpenTSDB (millions of dollars of hardware), the faster query time and the reduction in oncall overhead was worthwhile.
If you still want to be able to quickly graph and view old data, downsampling is the only way to keep your queries interactive.
Take for instance 30s data vs 10min data. 20x more computation, network exchange and everything else of that nature needs to happen.
Also if you want to keep only a subset of your data for a very long time, you need to have retention policies - otherwise you end up storing all that extra data forever.
At large numbers (terabytes to petabytes) this stuff is impactful, at smaller numbers (gigabytes) my points here are far less relevant.