13 comments

[ 40.3 ms ] story [ 494 ms ] thread
Neat! We use a similar Go based proxy for our tier 1 ingress and routing at Walmart Labs (global eCommerce), with Lua/Go plugins for edge/serverless style backends. It is a custom/proprietary codebase but the tech stack has served us very well. Great to see open source projects with similar use cases. I may have to play with this for use in some personal/hobby projects.
How does this compare to nginx or haproxy in terms of features and performance?
We skipper maintainers don't want to really comment on that, because it is very likely that if you do your own benchmarks you show only the good parts and not the bad parts.

From our benchmarks we can outperform nginx in the pure routing case, while nginx will outperform skipper in the pure sendfile case. HAproxy we did not tested, but I would bet it will be not different from the nginx case. IMO: in general use skipper as microservice router and nginx as streaming router that serves a lot of pictures or videos.

Feature wise we have a lot of things to add as HTTP router that you want to run in front of your microservices, please also see our docs: https://opensource.zalando.com/skipper/ Additionally we build a lot of Kubernetes integrations,for example https://github.com/zalando-incubator/stackset-controller which reduces boilerplate and enables you to do automated blue-green deployments and https://github.com/zalando-incubator/kube-metrics-adapter which enables you to do HPAs with custom metrics, for example hpa based on skipper route request per second.

We tried this out a year or so ago and found that it's performance wasn't suitable for our use cases, it would increase costs too much.
Care to share some details? What's your use case? How would it negatively impact it?
The main use case we tested with was for a data analytics pipeline to ingest telemetry events from video games, but would have been generally used across all our services, target was about 1m/RPS for our load test. The CoreOS ALB controller for K8s out performed it significantly (I don't have the exact stats now), albeit it's not as feature rich as Skipper.
Got it, very helpful.

We are looking at it to do dynamic routing from our system to the Internet and back. That means terminate the request on a client (server), route it to an exit node where it's more appropriate (for instance to bypass GEO restriction) and then send the response back to the origin.

We are looking at some other alternatives, like envoy + istio + gloo, but skipper seems more contained and less container depended.

Did you check out Ambassador by any chance?
I did. Its not that far from Gloo. I would like something that doesn’t require crazy amount of tooling and does require containers
Just to note, the CoreOS ALB controller [0] has very little in common with the design of Skipper.

The ALB controller configures Amazon Cloud "Application Load Balancers" and adds a Kubernetes service as the upstream. There's nothing in the data path.

[0] Now adopted by SIG-AWS as https://github.com/kubernetes-sigs/aws-alb-ingress-controlle...