När radion började få fler tjänster behövde nätet bli en del av arkitekturen.
En enkel stream behöver inte särskilt avancerad nätarkitektur. Ett kontrollcenter, webb, API:er, appstatus, spelare och interna tjänster gör det.
Jag började därför separera det som ska vara publikt från det som bara ska gå att nå internt. Brandväggen blev inte längre “bara internet in och ut”, utan en riktig del av radiosystemet. Externa anrop skulle landa i Relay 7 Gateway och därifrån gå till rätt intern tjänst. Interna API:er skulle inte behöva exponeras direkt.
Det gav ett tydligare flöde:
Jag delade också upp vissa nät i separata zoner för att kunna styra trafik och bandbredd utan att påverka radiomaskinerna. Det var trial and error även här. En regel som ser korrekt ut på papper kan få oväntade effekter när en reverse proxy, en stream och en app använder olika typer av långlivade anslutningar.
Det här är också skälet till att jag idag undviker att hårdkoda intern nätinformation i frontend. Webben ska prata med publika API-vägar. Gatewayn ska veta var den interna tjänsten finns.
Brandväggen blev också felsökningsverktyg
När jag hade flera interna tjänster började jag använda brandvägg och gateway för att göra gränserna synliga. Om bara Gateway får exponeras publikt kan jag snabbt avgöra om ett fel ligger före eller efter den.
Jag testade också bandbreddsregler och separata nätprofiler. Det lärde mig att en radioanslutning inte beter sig som vanlig webbladdning. En långlivad stream kan påverkas på helt andra sätt av shaping och timeouts. Därför försöker jag numera separera regler för interaktiv webbtrafik från regler för långlivade ljudflöden.
Jag fick lära mig att långlivade anslutningar inte är vanlig webbtrafik
När jag började göra mer med brandvägg, shaping och separata nät såg jag att en stream beter sig annorlunda än en vanlig sida. En webbsida gör korta anrop och kan ofta bara försöka igen. En radioström vill hålla samma flöde levande länge.
Det betyder att aggressiva timeouts, konstiga NAT-beteenden eller felaktig bandbreddspolicy kan ge små avbrott som aldrig syns när jag bara testar en API-request. Jag fick därför börja testa nätförändringar med riktig lyssning över tid.
Jag började även hålla radiomaskinerna separerade från annan trafik där det var praktiskt. Poängen är inte att en MP3-ström kräver enorm bandbredd. Poängen är förutsägbarhet. Om en annan enhet råkar starta en stor överföring ska inte radiokedjan behöva märka det.
Brandväggen blev på så sätt både skydd, trafikpolis och felsökningsgräns.