aperture
zerolog
aperture | zerolog | |
---|---|---|
28 | 39 | |
590 | 9,807 | |
1.7% | - | |
9.8 | 8.0 | |
3 days ago | 3 days ago | |
Go | Go | |
Apache License 2.0 | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
aperture
-
Defcon: Meta's system for preventing overload with graceful feature degradation
Anyone interested in load shedding and graceful degradation with request prioritization should check out the Aperture OSS project.
https://github.com/fluxninja/aperture
-
Queues Don't Fix Overload
I agree that queues can problem especially when misconfigured. But some amount of queuing is necessary, to absorb short spikes in demand vs capacity. Also, queues can be helpful to re-order requests based on criticality which won't be possible with zero queue size - in which case we have to immediately drop a request or admit it without considering it's priority.
I think it is beneficial to re-think how we tune queues. Instead of setting a queue size, we should be tuning the max permissible latency in the queue which is what a request timeout actually is. That way, you stay within the acceptable response time SLA while keeping only the serve-able requests in the queue.
Aperture, an open-source load management platform took this approach. Each request specifies a timeout for which it is willing to stay in the queue. And weighted fair queuing scheduler then allocates the capacity (a request quota or max number of in-flight request) across requests based on the priority and tokens (request heaviness) of each request.
Read more about the WFQ scheduler in Aperture: https://docs.fluxninja.com/concepts/scheduler
Link to Aperture's GitHub: https://github.com/fluxninja/aperture
Would love to hear your thoughts on our approach!
-
Kelsey Hightower's Twitter Spaces on Rate Limits & Flow Control
For those keen to dive deeper, I highly recommend exploring both the Twitter Space and Aperture: [Twitter Spaces]: https://twitter.com/kelseyhightower/status/1689355284802629633?s=20 [GitHub repo]: https://github.com/fluxninja/aperture
-
Graceful Behavior at Capacity
Very interesting blog post! Our team has been working intensively in this area for the last couple of years - flow control, load shedding, controllability (PID control), and so on.
We have open-sourced our work at - https://github.com/fluxninja/aperture
We would love feedback from folks reading this blog post!
Disclaimer: I am one of the co-authors of the Aperture project. There are several interesting ideas we have built into this project and I will be happy to dive into the technical details as well.
-
Why Adaptive Rate Limiting Is a Game-Changer
It's a blog on an open-source project that precisely tells you how to implement adaptive rate limiting.
Just click around a bit:
- https://github.com/fluxninja/aperture
- https://docs.fluxninja.com/use-cases/adaptive-service-protec...
Note: I am one of the authors' of this project.
-
Show HN: Review GitHub PRs with AI/LLMs
At the time of writing, the first sample image on that page is this:
https://coderabbit.ai/assets/section-1-f9a48066.png
which recommends adding a "maxIterations" counter to the "for len(executedComponents) ..." loop here:
https://github.com/fluxninja/aperture/blob/26e00ea818c7c28da...
HOWEVER
- the review has failed to notice the logic using "numExecutedBefore" (around line 377) that already prevents the specific bug it is suggesting a fix for
- the suggested change decrements "maxIterations" inside the "for ... range circuit.components {" loop which means it isn't counting iterations, it's counting components
This kind of suggestion is particularly nasty because it's unlikely that the test suite populates enough components to hit "maxIterations" - so an inattentive reader could accept it, get a green build, and then deploy a production bug!
-
June 25th, 2023 Deno Deploy Postmortem
The need an adaptive protection system like Aperture[0] to mitigate overloads.
[0]: https://github.com/fluxninja/aperture
-
Jsonnet – The Data Templating Language
It’s customized to our policy spec. But you can learn from this and adapt it to your spec.
https://github.com/fluxninja/aperture/blob/main/scripts/json...
- Show HN: Aperture – Unified Reliability Management for Microservices
- Failure Mitigation for Microservices: An Intro to Aperture
zerolog
-
Go 1.21 Released
Be aware that there is a performance impact compared to using zerolog directly [0] (my uneducated guess is it is likely due to pointer indirection).
[0]: https://github.com/rs/zerolog/issues/571#issuecomment-166202...
-
How to start a Go project in 2023
Things I can't live without in a new Go project in no particular order:
- https://github.com/golangci/golangci-lint - meta-linter
- https://goreleaser.com - automate release workflows
- https://magefile.org - build tool that can version your tools
- https://github.com/ory/dockertest/v3 - run containers for e2e testing
- https://github.com/ecordell/optgen - generate functional options
- https://golang.org/x/tools/cmd/stringer - generate String()
- https://mvdan.cc/gofumpt - stricter gofmt
- https://github.com/stretchr/testify - test assertion library
- https://github.com/rs/zerolog - logging
- https://github.com/spf13/cobra - CLI framework
FWIW, I just lifted all the tools we use for https://github.com/authzed/spicedb
We've also written some custom linters that might be useful for other folks: https://github.com/authzed/spicedb/tree/main/tools/analyzers
-
claim: qlog is faster, simpler and more efficient that slog; and does more practically useful stuff too
Can you compare it against zerolog?
-
Zerolog printing logs multiple times
Hello gophers, I am using https://github.com/uber-go/fx and https://github.com/rs/zerolog for logging.
-
Doubt around "Test only public functions" concept
Hovewer it is not bad to export such a function, if it is done purely for convenience. For example github.com/rs/zerolog works on a logger instances, which can be created manually, but they also provide a github.com/rs/zerolog/blob//log package, which provide you access to the global logger which is more convenient in most cases
-
Tools besides Go for a newbie
IDE: use whatever make you productive. I personally use vscode. VCS: git, as golang communities use github heavily as base for many libraries. AFAIK Linter: use staticcheck for linting as it looks like mostly used linting tool in go, supported by many also. In Vscode it will be recommended once you install go plugin. Libraries/Framework: actually the standard libraries already included many things you need, decent enough for your day-to-day development cycles(e.g. `net/http`). But here are things for extra: - Struct fields validator: validator - Http server lib: chi router , httprouter , fasthttp (for non standard http implementations, but fast) - Web Framework: echo , gin , fiber , beego , etc - Http client lib: most already covered by stdlib(net/http), so you rarely need extra lib for this, but if you really need some are: resty - CLI: cobra - Config: godotenv , viper - DB Drivers: sqlx , postgre , sqlite , mysql - nosql: redis , mongodb , elasticsearch - ORM: gorm , entgo , sqlc(codegen) - JS Transpiler: gopherjs - GUI: fyne - grpc: grpc - logging: zerolog - test: testify , gomock , dockertest - and many others you can find here
-
What is the common log library which is industry standard that is used in server applications?
I use zerolog myself and have seen it being used in production several times. Also they have a list of who uses zerolog
-
Log: A minimal, colorful Go logging library 🪵
This would be so awesome if it was extending an awesome logger like https://github.com/rs/zerolog. Personally I love zerolog because of how it handles different data types including structs!
-
Best Logging Library for Golang
logrus README recommended using other libraries such as Zerolog, Zap, and Apex.
- If you had to choose a logging framework, which one would you use?
What are some alternatives?
rules_jsonnet - Jsonnet rules for Bazel
zap - Blazing fast, structured, leveled logging in Go.
slo-exporter - Slo-exporter computes standardized SLI and SLO metrics based on events coming from various data sources.
logrus - Structured, pluggable logging for Go.
awesome-sre-tools - A curated list of Site Reliability and Production Engineering Tools
lumberjack - lumberjack is a log rolling package for Go
now-boltwall - Vercel lambda deployment for a Nodejs Lightning-powered Paywall
glog - Leveled execution logs for Go
ai-pr-reviewer - AI-based Pull Request Summarizer and Reviewer with Chat Capabilities.
Gin - Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.
etleneum - the centralized smart contract platform
log - Structured logging package for Go.