HN user

dmarby

521 karma

dmarby.se

[ my public key: https://keybase.io/dmarby; my proof: https://keybase.io/dmarby/sigs/034AI1kz-T14BoWRr_pDJOFabZGjPMUMzyDLJZi1lG8 ]

Posts9
Comments16
View on HN

Author of the post here, figured I'd clarify some things since there seem to be some major misconceptions present.

First off, I don't claim to be an expert, I find that a pretty arrogant title for anyone to use. I'd like to think I know a thing or two about building highly scalable webservices however, and of course I'm always open to the opportunity to learn if I'm doing things incorrectly.

That said, Picsum is what I use to play around with new technologies and try new things since it's high-traffic enough that I can get some real data on how things perform. Is it very over-engineered? Absolutely, but that's part of the fun.

When it comes to Picsum, the reason for not pre-processing all the images is that there are simply too many variations with the sizes and variations you can request through the API. For every image, there are 5001 * 5001 * 22 variations that can be requested, and in total, we have just under a thousand source images.

As for running Varnish behind our CDN, this is done for a couple of reasons:

- We can make sure that an image is only processed once simultaneously, even tho the CDN might request it multiple times before it's cache has been filled.

- We can apply optimizations, such as sorting and filtering the query parameters for variations, to achieve a better cache rate. This is not possible to do with the CDN provider we use.

The resources it uses are negligible, the extra latency within the cluster is vanishingly small, and it saves us a lot of extra processing. Every service within the Kubernetes cluster runs at least two replicas, varnish included, for redundancy and to distribute the load. We're not using separate servers for each layer/component, that'd be wasteful.

As for bandwidth costs, there's no cost for the bandwidth between the CDN and the load balancer, as DigitalOcean does not charge for load balancer bandwidth. There's also no cost for anything behind the load balancer, as this is all internal traffic, either within DigitalOcean or within the Kubernetes cluster itself.

Talking about Spaces, I think you might be confused. Spaces is an object storage, which also happens to have optional CDN capability built-in. Picsum only uses the object storage part, for storing the source images that are used for processing. The reason we use Redis to cache said source images is to avoid having to fetch them from Spaces on every request, as this is rather slow comparatively. An important distinction here is that Spaces/Redis stores and caches the source images, not the processed ones, which are cached by Varnish and the CDN.

As an aside, since you seem to think that comparing numbers for services with vastly different needs and usecases is worthwhile, Picsum serves a bit over 8TB of traffic a month, and costs less then your setup to run.

I wrote the old codebase ~4 years ago when I was just learning NodeJS, and didn't touch it too much after that, so it was in dire need of being replaced, in particular since it wasn't really written to scale horizontally.

Didn't have any particular issues with NodeJS in terms of performance, just felt like using Go when I was rewriting it.

This site pre-dates the Unsplash license (and before Unsplash had their own API/website even, it started when they were still a tumblr blog), the images used on it is from back when Unsplash still licensed images under CC0.

We're on good terms with the Unsplash team, and think they're awesome.

There are plenty of other good options indeed. I created it in 2014 since I wanted a service that would give me nice looking pictures, rather than just coloured boxes or similar, for placeholders, there's not anything else to it.

Mullvad | Gothenburg, Sweden | FULL-TIME | ONSITE or REMOTE | Front-end Web Developer/Designer

Mullvad is a VPN service that helps keep internet users’ online activity, identity, and location private. We are a team fully dedicated to our goal - making internet censorship and surveillance ineffective.

We are looking for an experienced front-end developer equipped with both design and programming expertise to further develop Mullvad's website.

Requirements

  * You have a few years’ experience developing and designing websites.
  * You are comfortable with creating a design from scratch, as well as implementing it.
  * You are capable of collaborating closely with a team of diverse skill sets.
  * You understand the importance of approaching web design from a UI/UX perspective.
  * You have proficient understanding of cross-browser compatibility issues and ways to work around them.
  * You are fluent in English.
Nice but not necessary
  * Previous experience in working with Django, Python, Rust, or Go
  * Javascript frameworks such as Vue or React
  * front-end build tools, for example Webpack
  * UI/UX design and testing.
Benefits

We believe in having a life outside of work. That’s why we offer

  * flexible working hours
  * 25 days of annual paid vacation
  * 300 EUR annually in allowance toward wellness-related activities (friskvårdsbidrag)
  * the possibility of working remotely for extended periods of time
We also offer opportunities for growth. Aside from company-initiated opportunities for attending various national and international conferences, you will also have the option to attend one of your choosing per year. In addition, we’ll pay for any reading material that you feel contributes to your professional development.

If you’re interested in joining our team, send us an email at jobs@mullvad.net by 15 June 2018.

More information and job listings can be found at https://mullvad.net/blog/tag/jobs/

Mullvad | Gothenburg, Sweden | FULL-TIME | ONSITE or REMOTE | Backend Developer

Mullvad is a VPN service that helps keep internet users’ online activity, identity, and location private. We are a team fully dedicated to our goal - making internet censorship and surveillance ineffective.

We are looking for an experienced back-end developer to advance Mullvad’s back-end services, You will be part of a small team working together to improve existing services, as well as develop new ones.

Requirements

    * You have a few years’ experience in developing, designing the architecture for, and deploying back-end services
    * You are comfortable using the right tools for the job and open to learning new skills when necessary
    * You have run and deployed services on Linux-based systems and know your way around a terminal
    * You are fluent in English
Nice but not necessary
    * experience with running services on bare-metal infrastructure is a bonus
    * extensive experience in developing services in Python, Rust, or Go
    * familiarity with using Qubes OS
    * experience with Docker and Kubernetes
    * experience in using configuration management such as Ansible or Saltstack
    * interest in building systems with a heavy focus on security and privacy
    * experience with low-level performance testing
Benefits

We believe in having a life outside of work. That’s why we offer

    * flexible working hours
    * 25 days of annual paid vacation
    * 300 EUR annually in allowance toward wellness-related activities (friskvårdsbidrag)
    * the possibility of working remotely for extended periods of time
We also offer opportunities for growth. Aside from company-initiated opportunities for attending various national and international conferences, you will also have the option to attend one of your choosing per year. In addition, we’ll pay for any reading material that you feel contributes to your professional development.

If you’re interested in joining our team, send us an email at jobs@mullvad.net by 15 June 2018.

More information and job listings can be found at https://mullvad.net/blog/tag/jobs/