HN user

TheHydroImpulse

1,392 karma
Posts31
Comments201
View on HN
jvns.ca 10y ago

A second try at using Rust

TheHydroImpulse
2pts0
segment.com 10y ago

Segment Sources – Load Salesforce, Zendesk, Stripe into Redshift and Postgres

TheHydroImpulse
178pts37
medium.com 10y ago

Sex Is Sex. But Money Is Money

TheHydroImpulse
21pts4
vimcolors.com 11y ago

Vim Colors

TheHydroImpulse
355pts107
github.com 11y ago

Rust Python bindings

TheHydroImpulse
7pts3
journal.stuffwithstuff.com 11y ago

What Color Is Your Function?

TheHydroImpulse
1pts0
arstechnica.com 11y ago

What was the effect of Rand Paul’s 10-hour “filibuster?”

TheHydroImpulse
4pts0
techdrive.co 11y ago

FTC Rules in Favor of Tesla, Direct-To-Consumer Sales Legal

TheHydroImpulse
3pts0
github.com 11y ago

Web based UI for CoreOS fleet

TheHydroImpulse
1pts0
github.com 11y ago

Microsoft Bond

TheHydroImpulse
128pts15
getstacks.io 11y ago

Sales Startups Are Doing It Wrong

TheHydroImpulse
2pts0
github.com 11y ago

Rust parser combinator framework

TheHydroImpulse
10pts0
github.com 11y ago

A tiling window manager written in Rust

TheHydroImpulse
325pts170
chromium.googlesource.com 11y ago

V8 Moving to Git

TheHydroImpulse
144pts44
www.youtube.com 11y ago

Extempore: Cyberphysical programming [video]

TheHydroImpulse
1pts1
www.hoverbear.org 11y ago

Option Monads in Rust

TheHydroImpulse
15pts0
limpet.net 11y ago

Let's build a browser engine Part 3: CSS

TheHydroImpulse
147pts17
hydrocodedesign.com 12y ago

Practicality With Rust: Setting Up A Project

TheHydroImpulse
2pts0
hydrocodedesign.com 12y ago

Drop The Chaos and Use Component(1)

TheHydroImpulse
1pts0
github.com 12y ago

Show HN: Feature Rollout for Node.js

TheHydroImpulse
1pts0
jaysimons.deviantart.com 12y ago

Map of the Internet 2.0

TheHydroImpulse
5pts1
github.com 12y ago

Extempore – A cyber-physical programming environment

TheHydroImpulse
1pts0
yow.eventer.com 12y ago

Programming In Time – Live Coding for Creative Performances

TheHydroImpulse
2pts0
hydrocodedesign.com 12y ago

Using LLVM From Within Rust

TheHydroImpulse
4pts0
vimeo.com 12y ago

Immutability Changes Everything

TheHydroImpulse
1pts0
hydrocodedesign.com 12y ago

A Just-in-time Compiler In Rust

TheHydroImpulse
6pts0
eli.thegreenplace.net 12y ago

Some thoughts on LLVM vs. libjit

TheHydroImpulse
6pts1
vimeo.com 12y ago

Take your Startup to the next level

TheHydroImpulse
1pts0
github.com 12y ago

Show HN: Ember-like Classes (and Mixins) for Node.js

TheHydroImpulse
1pts0
github.com 12y ago

Server-dom: HTML5 DOM in Node.js backed by Gumbo

TheHydroImpulse
1pts0

CDK outputs CloudFormation templates that you can pass to any other tool if you wish. CDK is technically just a glorified shim over CFN (although 1000x better but you do get caught in the awkwardness that is CFN many times).

If anyone notices a problem you'll likely need to write a COE, there's no way to get around that. Not updating the status page absolutely doesn't get you out of that task.

COE also doesn't lead to negative marks on anyone at AWS that I know of. It's a learning experience to know why it happened and action items so it doesn't happen again.

yes, that's a really good way to grow your comp. You have actual leverage when joining a new company that you can use to negotiate.

Obviously you can't really do it too often but whenever you do, your earning potential can be increased by quite a bit.

Companies usually like to downgrade when hiring. Amazon does it a lot. So even if you qualified as an L7 they may hire you as an L6 (sometimes with L7 pay) and you need to go through a promotion cycle to get back to L7.

Github has been a well known Rails monolith. Absolutely they have services that power all sorts of stuff (they have a few blog posts on it) but it's just impractical to even start a discussion on splitting it up for the reasons you initially argued for.

I've been through a number of large rewrites/reworks that took monoliths much like Github (with many many many services behind it) and split them up into modular pieces and it's an insane amount of work that can take years. You simply need very good reasons (including business reasons) to do that.

Moreover, companies at these sizes just have a LOT of code all over the place. Tooling, infra, supporting services, etc... Not to mention it's just not useful to have external contributors for a business product like Github. Doing code reviews, addressing bugs that were introduced, spending time discussing things with contributors takes an incredible amount of time.

Basically if the reason you want Github open sourced (and reworked into some weird architecture you described) is so that people can contribute to fix things and add features....Github could/will just hire more devs to work on that.

This just isn't possible. No company in their right mind would take their monolith and rewrite a bunch of stuff just to please a couple randoms on the internet.

I think you're drastically underestimating the amount of code Github is powered by and how freaking long any type of refactor/rewrite would take. We're talking about years.

when you have to manage a large number of services with a bunch of different devs touching things, Docker is almost required to get a consistent development state.

There's literally nothing wrong with reaching for Docker right away. It allows you to have the same, repeatable development environment. Maybe you deploy to production without Docker, but any project I start I'll reach for Docker right away.

L3 at other companies is an L4 at Amazon (I believe only contractors or part-time employees can be < 4). L5 also has a much wider surface area and the gap from L5 to L6 is quite big.

The biggest issue with PubSub and Amazon's alternative is the cost. Being capped at a per-message cost would be a no go.

If you can get away with using PubSub or the like it would be far easier than to manage your own Kafka deployment (correctly).

If data loss is unacceptable then Kafka is basically the only open-source solution that is known for not losing data (if done correctly of course). NSQ was great but lacked durability and replication. We can guarantee that two or more Kafka brokers persisted the message before moving on. With NSQ, if one of our instances died it was a big problem.

Managing Kafka in a cloud environment hasn't been easy and required a lot of investment and we have yet to move everything over to it.

We started deploying our Kafka cluster as a set of N EC2 instances but we started running into a bunch of issues (rolling the cluster, rolling an instance without moving partitions around, moving partitions around, etc...)

Now we run Kafka through ECS and wrote some tooling to manage rolling the cluster and replacing brokers. krollout(1) (currently private) basically prevents partitions from becoming unavailable while rolling.

Now that multiple teams are using Kakfa we started exploring how to scale up. Each team may have different requirements and isolation can become an issue. Likely more tooling will need to be built around this.

NSQ has been (IMO) far far easier to operate than Kafka has been. With Kafka you need a Zookeeper cluster in addition to your Kafka brokers. Not to mention developing against NSQ is pretty simple whereas Kafka you need to think about partitions and offsets.

If you're worried about data loss, Kakfa can be what you're looking for (but takes a lot to learn how to operate it correctly).

Engineer @ Segment

NSQ has served us pretty well but long term persistence has been a massive concern to us. If any of our NSQ nodes go down it's a big problem.

Kafka has been far more complicated to operate in production and developing against it requires more thought than NSQ (where you can just consume from a topic/channel, ack the message and be done). More to that, if you want more capacity you can just scale up your services and be done. With Kafka we had to plan how many partitions we needed and autoscaling has become a bit trickier.

We now have critical services running against Kafka and started moving our whole pipeline to it as well. It's a slow process but we're getting there.

We've had to build some tooling to operate Kafka and ramp up everyone else on how to use it. To be fair, we've also had to build tooling for NSQ, specifically nsq-lookup to allow us to scale up.

We have an nsq-go library that we use in production along with some tooling: https://github.com/segmentio/nsq-go

A bunch of people at Segment have looked into it. We manage our infrastructure with Terraform and operationally IMO Kubernetes introduces too much complexity compared with ECS and Terraform.

ECS is pretty dead simple (just run an agent on the host) and while it doesn't offer nearly the same feature set, it's really good operationally.

Some people here are tinkering with it for some non-core services.

One thing we experienced at Segment was the fact that we needed to quickly handle a surge in volume but couldn't overload partners. Essentially we wanted something that scaled up quickly at first but was pretty conservative after that.

We settled on constant increases/decreases using queue depth thresholds but ideally ECS would support feeding multiple metrics and doing some basic math to figure out how much we're currently process, how long it would take to flush the queue, and how many more containers we need to drain in a timely fashion.

CPU + memory autoscaling has worked pretty well for most services at Segment. We did have to build a custom queue-based autoscaler that feeds into ECS for our integration stack but the limitations of the ECS autoscaling rules makes it a bit clunky.

I'm talking about _my_ use case for using AWS. I'm sure other people have similar requirements. We manage hundreds of servers, process over 50 billion events/month and losing data is unacceptable.

In the HN echo chamber, you might think everyone just has a SPA and just needs a Digital Ocean droplet. Everyone has different requirements and AWS fits those for many people.

a) I don't really have a good enough sample size but I'd imagine a lot don't.

The biggest selling point of AWS is everything around it. You don't just get EC2, you get Route53, ELB, VPC, RDS, S3, CloudFront (although it's kinda expensive), ECS, etc... If I can pay AWS to do something instead of building it, I'll do it.

Unfortunately, mixing and matching ends up really complicating things especially with security in mind. Many people run within a VPC and bridging to another private network is, well, I don't really want to think about it at this time.

Oh, for sure. A lot of startups don't need that ability. I work for a pretty infra heavy startup so AWS is simply required at this point. But we've hit AWS capacity limits during the worst times (one of our clusters processing 20k events/sec hit 100% utilization) and they literally had no capacity left for that instance type. It's not a perfect thing all the time.

But in the end, the pros significantly outweigh the cons. Our resource consumption is naturally extremely elastic. While we'll always need to slightly over-provision to maintain some headroom, adding/removing nodes throughout the variance saves quite a bit of $.

Until you need to add another server, or 10 or 100... Not to mention it's another set of skills you need to have. It's a tradeoff. (I'm not talking about "we may need 100 servers next year because we'll have all this traction by then" -- I'm talking about "our load is growing at 1.5x every month or next month we need X capacity")

I just finished booting up two new clusters with 5 and 15 nodes, respectively and cycled them a couple of times after making changes to the AMI. The clusters are in ASGs and will scale based on resource usage. I can't do that with bare metal.

Latency is around 80ms-200ms per invocation from what I've seen. Definitely not suitable for any real-time game.

But co-locating them won't actually remove a class of errors because Zk is not HA. The Kafka brokers need to communicate with the leader in the Zk cluster.

If we have K1,Z1 -- K2,Z2 -- K3,Z3 -- and one node goes down, you've now taken down both a broker and a Zk node. Remember, the brokers don't care about connecting to any Zk node, they want the leader. So you aren't gaining any more fault tolerant by co-locating them.

If there's a network partition between the leader Zk node and other nodes, the local Kafka broker won't actually be able to do much because the Zk cluster will elect a new leader, on another node, so again, you aren't gaining anything.

Moreover, you're now tying the scalability of Kafka with Zk. Zk doesn't scale linearly, so there's only so many nodes you may have in a cluster. Kafka, on the other hand, scales linearly. So if you're colocating them and you have to bump up Kafka, do you still start up Zk for those nodes (but they don't actually join the cluster)? You're now special casing and adding more edge cases.

Microservices 10 years ago

dozens of repos

ha. I wish I had this many repos. We have 1000+ git repos. To be fair, a ton are open sourced and there are reasons why it's done this way, but still.

It's not a new implementation so much as compiling Swift for different architectures and environments not supported by the compiler.

It still uses the Swift compiler but emits LLVM IR and then uses Clang to target to the different environments.