libaws
fasthttp
Our great sponsors
libaws | fasthttp | |
---|---|---|
57 | 36 | |
440 | 21,001 | |
- | - | |
8.0 | 8.6 | |
about 2 months ago | 8 days ago | |
Go | Go | |
MIT License | 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.
libaws
-
Go's Error Handling Is Perfect
i print the error along with file and line number every time i return it. clunky, but it works.
in fact i print file and line with every log message.
https://github.com/nathants/libaws/blob/87fb45b4cae20abd1bb1...
-
The worst thing about Jenkins is that it works
cloud is so good now it’s hard to justify not doing something bespoke. ec2 spot is insanely cheaper than turnkey cicd, and better in almost every way.
i’m delighted to pay 30% over infra cost for convenience, but not 500%. and it better actually be convenient, not just have a good landing page and sales team.
this month i learned localzones have even better spot prices. losangeles-1 is half the spot price of us-west-2.
for a runner, do something like this, but react to an http call instead of a s3 put[1].
for a web ui do something like this[2].
s3, lambda, and ec2 spot are a perfect fit for cicd and a lot more.
1. https://github.com/nathants/libaws/tree/91b1c27fc947e067ed46...
2. https://github.com/nathants/aws-exec/tree/e68769126b5aae0e35...
-
Cloud, Why So Difficult?
like linux, cloud is a lot to learn, but worth it.
like linux, cloud is best kept simple, or it can become brittle and confusing.
like linux, cloud has a lot of cool things like zfs, that should be appreciated but rarely used.
like linux, using go makes your life a lot easier. the aws go sdk is the documentation.
like linux, you have to learn a lot and then find the core utility you actually care about. for me it is:
-
Kubernetes Is Hard
the good new is, for the 95% of projects that can tolerate it, aws the good parts are actually both simple and easy[1].
it’s hard to find things you can’t build on s3, dynamo, lambda, and ec2.
if either compliance or a 5% project demand it, complicated solutions should be explored.
-
Rapid growth, lessons learned and improvements at Fly.io
i also wanted a good cli for aws, and built one:
https://github.com/nathants/libaws
companies like fly are fantastic.
they provide a good service, and they put market pressure on aws.
-
From Go on EC2 to Fly.io: +fun, −$9/mo
cool transition and fun writeup!
for low, intermittent traffic sites, go on lambda might be a better comparison:
https://github.com/nathants/libaws/tree/master/examples/simp...
-
Ask HN: What is the most barebone back end solution?
lambda + s3. add ec2 spot if you need it.
just make sure you understand how billing works. mostly it’s just egress bandwidth is expensive.
do something like this:
https://github.com/nathants/aws-gocljs
or with less opinions:
https://github.com/nathants/libaws/tree/master/examples/simp...
welcome to cloud, glhf!
-
Ask HN: Cool side project you have written using Golang
aws ux for retaining both hair and sanity.
-
Ask HN: How to get more experience with system design questions (esp scaling)?
build and scale systems with artificial load on aws! scaling the load testing will be just as interesting as scaling the system under test.
start with low bottlenecks, ie a cluster of c6i.large ec2 spot. how fast can you do this? have fast can you scale that? ec2 and s3 is all you need to build anything.
use ec2 spot, avoid network egress, avoid cross region/zone traffic, create and destroy ec2 instances as needed instead of letting them sit idle. you could grow system scaling intution for the price of your streaming subscriptions.
start with something like this:
https://github.com/nathants/libaws/tree/master/examples/comp...
maybe mess around with public datasets on aws, just make sure to be in the correct region to avoid data egress.
welcome systems friend. one accurate measurement is worth a thousand expert opinions. scaling is fun!
-
Static site hosting hurdles
aws has too many knobs, presumably to satisfy the union of the needs of all the enterprise customers. that said, lambda+s3+dynamodb+ec2 are pretty good once you tape over all the knobs that aren't needed. i work with them like this[1].
these days i build on aws and r2. aws for the nuts and bolts, r2 for high bandwidth egress. it's a perfect match.
fasthttp
-
Rob Pike: Gobs of data (2011)
Someone made a benchmark of serialization libraries in go [1], and I was surprised to see gobs is one of the slowest ones, specially for decoding. I suspect part of the reason is that the API doesn't not allow reusing decoders [2]. From my explorations it seems like both JSON [3], message-pack [4] and CBOR [5] are better alternatives.
By the way, in Go there are a like a million JSON encoders because a lot of things in the std library are not really coded for maximum performance but more for easy of usage, it seems. Perhaps this is the right balance for certain things (ex: the http library, see [6]).
There are also a bunch of libraries that allow you to modify a JSON file "in place", without having to fully deserialize into structs (ex: GJSON/SJSON [7] [8]). This sounds very convenient and more efficient that fully de/serializing if we just need to change the data a little.
--
1: https://github.com/alecthomas/go_serialization_benchmarks
2: https://github.com/golang/go/issues/29766#issuecomment-45492...
--
3: https://github.com/goccy/go-json
4: https://github.com/vmihailenco/msgpack
5: https://github.com/fxamacker/cbor
--
6: https://github.com/valyala/fasthttp#faq
--
-
FastHttp for Python (64k requests/s)
Fasthttp is one of the most powerful webservers written in Go, I'm working on a project that makes it possible to use it as a webserver for Python.
-
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
-
fasthttp VS Don - a user suggested alternative
2 projects | 15 Mar 2023
-
Beginner ~ Intermediate Go programmer, how can I get better in go and get out of the "beginner" phase?
The best example I can give you is https://github.com/nutsdb/nutsdb it’s great project that got me started, one thing one should know is Go is different “yep” so there’re some coding habits that may bite you in Go and the Go compiler won’t correct you, you wanna learn about optimizations, unsafe usage check out https://github.com/valyala/fasthttp (note this is deep the rabbit hole), wanna learn concurrency check out ants https://github.com/panjf2000/ants with a little aid from “Go by example” you’re good to go
-
Log: A minimal, colorful Go logging library 🪵
As I said in another comment, I think net/http is a good cautionary tale here. It was designed to be easy to use, and then grew organically, but performance never seems to have been a goal. fasthttp solves this, but bifurcates the ecosystem and passes on those costs to everyone who uses it. If net/http had been designed with performance in mind, this could have been avoided. net/http can't be removed or optimized, so this is a situation the Go ecosystem is effectively stuck with forever. At best, a faster version may end up in the std lib, just like netip is more modern and faster than net but the ecosystem is still bifurcated and adoption of the new package has been slow.
- Anyone looking for developer to co-work on non-trivial opensource?
-
my office want to migrate to go programming language, what framework is recommended between chi or fiber?
Fiber, while has a lot of batteries included and decent for many use cases, is known for having corner cases (because of internals like fasthttp) like https://github.com/valyala/fasthttp/issues/622
- Ask HN: Slimvoice Alternative?
- Mongogram - Social media backend api using golang and mongodb
What are some alternatives?
kawipiko - kawipiko -- blazingly fast static HTTP server -- focused on low latency and high concurrency, by leveraging Go, `fasthttp` and the CDB embedded database
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.
awesome-paas - A curated list of PaaS, developer platforms, Self hosted PaaS, Cloud IDEs and ADNs.
Fiber - ⚡️ Express inspired web framework written in Go
pytago - A source-to-source transpiler for Python to Go translation
gnet - 🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go./ gnet 是一个高性能、轻量级、非阻塞的事件驱动 Go 网络框架。
aws-nuke - Nuke a whole AWS account and delete all its resources.
quic-go - A QUIC implementation in pure Go
serverless-express - Run Express and other Node.js frameworks on AWS Serverless technologies such as Lambda, API Gateway, Lambda@Edge, and more.
mux - A powerful HTTP router and URL matcher for building Go web servers with 🦍
dockerfile-rails - Provides a Rails generator to produce Dockerfiles and related files.
httprouter - A high performance HTTP request router that scales well