[HN Gopher] BGP Implemented in Go ___________________________________________________________________ BGP Implemented in Go Author : eatonphil Score : 89 points Date : 2022-03-19 15:46 UTC (7 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | freedomben wrote: | Maybe a dumb question nowadays because I stopped using Go around | the 1.6 days, but is there still a stop-the-world garbage | collector, or any other potential blockers for high | performance/real time? | | A previous company I worked with chose to build in C++ instead of | Go because of that, as the performance requirements were very, | very high. I would imagine a serious BGP usage would have very | high requirements? | mitchs wrote: | It depends on the context. Not every bgp speaker needs the full | internet table and frequent route changes. If you use the | network to balance traffic across servers, you just need a bgp | speaker on a server to inject a few routes for the ip addresses | it will handle. In that case a good api outweighs performance. | woah wrote: | BGP doesn't have very high performance requirements. It does | not handle any internet traffic. All it does is configure the | kernel routing tables. Even if there's some crazy 1 second GC | pause it will not greatly affect the performance of the router. | lima wrote: | Sending or receiving an internet full table (and potentially | applying filters/aggregations) is still quite performance | intensive, since it needs to happen quickly. | | A one-second GC pause won't hurt you but managing the | necessary data structures in memory can be challenging. | | Anecdotally, gobgp is quite a bit slower than hand-optimized | C implementations like frr (not that it matters for most | gobgp use cases). | tptacek wrote: | What's challenging about it? Go gives you control over the | layout of your objects in memory. | remram wrote: | I don't think BGP requires real-time. Increasing throughput via | multithreading is probably much more impactful (for large | deployments) and otherwise it doesn't matter. | tptacek wrote: | A BGP route server might be the platonic ideal of a Go problem: | it's demanding enough not to be tenable in Python, but not | real-time or kernel resident, and mostly data structure --- and | just a couple data structures --- intensive. | 0x20cowboy wrote: | I may have missed it, but I read the read me, looked at the main | site, looked at the beginning of getting started... nowhere says | what BGP stands for / is. | | I get it's written in go, but I have no idea what BGP is. Big | green pages, binary grepping pipes, boisterous gambling | pachyderms? | | Jokes aside, y'all might want to give a brief about what this is | for us uninitiated. | cortesoft wrote: | BGP is pretty foundational to the internet. At some point, you | have to assume hour audience knows the basics. Not everything | is an intro. | | Also, if you don't know what BGP is, you aren't going to be | interested in a project implementing BGP. | 0x20cowboy wrote: | I've been on the internet for quite a long time, but I've | never heard of it before. So maybe it's basic knowledge for a | given discipline, but maybe not for others? | | It's also, I assume by the authors, submitted to hackernews | which is a pretty diverse place. "Basics" is relative. | | I am not saying there should be a dissertation about how the | thing works, but it's generally bad form to use abbreviations | without using the long form at least once - for people who | would indeed like to search for more information. | teeray wrote: | It's still wise to define acronyms before you use them to | enable future Googling (links are better!). Three extra words | is a small price to pay to make documentation more friendly | to newcomers. | chockchocschoir wrote: | Again, at one point you have to assume either basic | knowledge or at least basic knowledge about how to search | for things, otherwise everything would be very verbose. | | Take one of your repositories as an example: | https://github.com/timraymond/pricegrabber | | > A gem for interacting with the Pricegrabber API | | Should you have to add "Application Programming Interface | (API)" the first time you use "API" anywhere? Realistically | no, because the audience can be assumed to understand what | it means. If they don't, it's only a search away. | | Same goes for networking and DNS/BGP/CNAME and more. If | you're using a library/server for BGP, you either know what | those terms are, or know how to find out more. | | But not all resources are meant for beginning who don't | know the basic terms in a field, and that's OK, because | otherwise everything would be extremely verbose when it | doesn't have to. | nmz wrote: | It's that thing facebook messed up the other day and nobody | could connect to it. | fragmede wrote: | In this context, BGP stands for Border Gateway Protocol. | | I opened a PR to fix that. | https://github.com/osrg/gobgp/pull/2535 | ZiiS wrote: | Border Gateway Protocol how the internet shares its routing | table. | zinekeller wrote: | Border Gateway Protocol | (https://en.wikipedia.org/wiki/Border_Gateway_Protocol), | basically the GPS of the internet (not technically the same, | but it's close enough). | | Cloudflare has already a good explanation on how it works, so | I'll just point everyone out to this article: | https://www.cloudflare.com/learning/security/glossary/what-i... | | Also, about that undefined BGP. I'm not sure if this will help | explain why BGP wasn't explained, but this is from NTT OSRG | (Open-source Research Group), so probably they thought that | everyone knew what BGP is (since that you probably won't | encounter this otherwise). | | Also, they have a Rust version: | https://github.com/osrg/rustybgp | [deleted] | kxrm wrote: | This is great, I have been learning "bird" and finding | information on the web about using bird is very challenging since | adding bird to any search doesn't necessary make the results | better. If this project can maintain and keep their documentation | clear, I would totally consider switching to this instead. | alaties wrote: | Yeah... Bird configurations are a little rough to learn. The | examples they have on the website are pretty lacking. Their | mailing list is usually helpful though. | | Quagga is usually easier to find examples for since it's | modeled after Cisco switch syntax for configuration (same basic | syntax of arista switches). | | Both of these really suck to learn as a programmer since you're | usually coming into these without much of a network engineering | background. I remember struggling a lot with both of these | config syntaxes until a network engineer took me under his wing | and taught me basics, principles, the engineering challenges of | packet switching at scale, etc. | rayhaanj wrote: | I've been working on a BGP implementation in Rust over the last | few years: https://github.com/net-control-plane/bgp/ | | It's still in a proof of concept stage and nowhere as complete as | GoBGP though. | ternaryoperator wrote: | Thank you for having a front page that actually says what BGP | is. | zinekeller wrote: | I'm not sure if this will help explain the culture or not, | but this is from the NTT (the Japanese telecommunications | company), so probably they thought that everyone knew what | BGP is (since that you probably won't encounter this | otherwise). | | Also, they have a Rust version: | https://github.com/osrg/rustybgp | kyrra wrote: | Searching around, I found someone that benchmarked gobgp, | rustybgp, and some others, and gobgp didn't seem to do all | that well compared to other implementations. | | https://elegantnetwork.github.io/posts/comparing-open- | source... | [deleted] | kisamoto wrote: | As a BGP alternative (in Go) has anyone checked out SCION? | | https://github.com/scionproto/scion | wmf wrote: | I gave up when I saw new packet headers which means you might | not be able to use existing ASICs. | xyquadrat wrote: | SCION looks very promising, and by now it has also been | deployed in Switzerland's financial network, so it seems ready | for production: | | https://www.six-group.com/en/newsroom/media-releases/2021/20... | | (Actually, the original creator of SCION teaches my CompNet | course, which is pretty cool. His rants on BGP are quite | legendary.) | pmarreck wrote: | A language without default runtime error handling unless you | manually check after every line of code, used to control | something as important as an Internet gateway? What could | possibly go wrong? Please tell me that Go at least has static | analysis tooling around it by now | bradfitz wrote: | Good thing C doesn't run the world! ___________________________________________________________________ (page generated 2022-03-19 23:00 UTC)