<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;}
@font-face
        {font-family:Menlo;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#467886;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
span.E-MailFormatvorlage20
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1040743819;
        mso-list-type:hybrid;
        mso-list-template-ids:613030408 134676495 134676505 134676507 134676495 134676505 134676507 134676495 134676505 134676507;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:1461848098;
        mso-list-type:hybrid;
        mso-list-template-ids:-145032702 1002488946 134676505 134676507 134676495 134676505 134676507 134676495 134676505 134676507;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Times New Roman",serif;
        mso-ascii-font-family:Aptos;
        mso-fareast-font-family:Aptos;
        mso-hansi-font-family:Aptos;
        mso-bidi-font-family:"Times New Roman";
        color:windowtext;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:1916741292;
        mso-list-type:hybrid;
        mso-list-template-ids:2103231608 1872649280 134676505 134676507 134676495 134676505 134676507 134676495 134676505 134676507;}
@list l2:level1
        {mso-level-number-format:alpha-lower;
        mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Times New Roman",serif;
        mso-ascii-font-family:Aptos;
        mso-fareast-font-family:Aptos;
        mso-hansi-font-family:Aptos;
        mso-bidi-font-family:"Times New Roman";
        color:windowtext;}
@list l2:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l2:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l2:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l2:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l2:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l2:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE-CH link="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;mso-fareast-language:EN-US'>Dear all<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>My 5 cents (or Rappen in CH) if it comes to serving many clients.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>We are running a 4 node cluster since several years – rock solid and w/o any issues. This cluster serves many thousands of listeners from all over the world. Our source transcoder sending the audio streams to each Node.  Hence, transcoding power is not an issue here. The four Nodes a geographically dispersed in</span><span lang=EN-GB> 3 countries in Europe. In our case </span><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>each Node is running Debian with icecast and has 10Gbit connectivity with brilliant worldwide peerings. Good peering is key, choose your ISP wisely </span><span lang=EN-GB style='font-size:11.0pt;font-family:"Segoe UI Emoji",sans-serif;mso-fareast-language:EN-US'>😊</span><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>.Each icecast servers has the same multi domain ssl cert. which allows us to deliver to several customers (each customer a subdomain) the cluster is round robin load balanced by using AWS Route53. This approach may can be achived also with other DNS Providers like Cloudflare. For example, if one node need to be taken down for maintenance, Route53 throws the Node out of the DNS automatically. This will be achived with “health checks” This mechanism is pretty fast and responsive. If a client gets disconnected and tries a reconnect, the RR DNS is passing the client immediately to a working Node. No issues here as well. It just works.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>In the beginning we’ve experienced similar issues even though, the bandwidth capacity of the VM’s was never the root cause. We’ve identified some solutions:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'><o:p> </o:p></span></p><ol style='margin-top:0cm' start=1 type=1><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1;text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>Linux TCP stack tuning. Cloudflare has many studies published in their Blogs about this. But you will find a lot about this tuning also in the interweb<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1;text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>Consider to bake your own kernel, which is tuned for high throughput – goes in line with TCP Stack tunning<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1;text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>Tune the Linux open file limits and adjust the init start script for the icecast server. Example : start icecast with  ulimit -c unlimited and ulimit -n 32768<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1;text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>Consider to use FreeBSD instead of Linux. FreeBSD has the better TCP stack out of the box.<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1;text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>If all of this is not feasible for you, just add a new Node to the cluster and level the amount of clients to more Nodes.<o:p></o:p></span></li></ol><p class=MsoNormal style='margin-left:18.0pt;text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>For the points 1. and 2. I can’t give you a “out of the box” solution or default settings. It’s an iteration process: adjusting, trial, load testing, monitoring and <repeat><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>Because the result will need to fit your requirements, therefore every setup might need a different tuning. And btw. do not try using icecast on Windows Servers, if you need to serve a lot of clients </span><span lang=EN-GB style='font-size:11.0pt;font-family:"Segoe UI Emoji",sans-serif;mso-fareast-language:EN-US'>😊</span><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'> <o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>Happy icecasting<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'>tom<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-GB style='font-size:11.0pt;mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=DE style='font-size:11.0pt;font-family:"Calibri",sans-serif'>Von:</span></b><span lang=DE style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Icecast <icecast-bounces@xiph.org> <b>Im Auftrag von </b>Fred Gleason<br><b>Gesendet:</b> Mittwoch, 20. März 2024 20:53<br><b>An:</b> Icecast streaming server user discussions <icecast@xiph.org><br><b>Betreff:</b> Re: [Icecast] Education - 1, 000s, 100, 000's, Millions of listeners. (What kind of infrastructure)<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On Mar 20, 2024, at 13:16, Wayne Barron <<a href="mailto:wayne@cffcs.com">wayne@cffcs.com</a>> wrote:<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p><div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><span style='font-size:9.0pt;font-family:"Helvetica",sans-serif'>In Windows and Linux web servers, we can create a forest for our web servers.<br>Send traffic to different servers to even the workload.<br><br>Can we do something like this with the Icecast servers?<br>(or)<br>Will we have to install new VMs, add the heavy stations on that one,<br>and send the new traffic there?</span><o:p></o:p></p></div></blockquote></div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Ok, I’m going to be “that guy”…<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I would argue that, as soon as you’ve hit an audience size of 10,000 or more (especially if that audience is at all geographically dispersed), IceCast is basically off the table. The reason why can be summarized in three letters: “CDN” [Content Distribution Networks].<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>To fan out to large, geographically dispersed audiences of 10,000 or more (not to mention 100k’s or, Lord help us, 1M’s or more), you need to get content cached in locations that are geographically close to your listeners. By far the easiest (read: most cost effective) way to do this at scale is to leverage the already existing infrastructure of CDNs (companies like Akamai or CloudFlare, that have a world-wide footprint). That means using streaming formats that utilize segmented distribution mechanisms, such as HLS or DASH. You can kinda-sorta do this sort of thing with IceCast by using relays, but it’s complex to configure and monitor while being not well supported at many CDNs (Akamai for example discontinued their IceCast product offering several years ago). HLS OTOH plays very well with that infrastructure because it’s effectively just a bunch of static files that get replicated via HTTP[S]. No special “server” software is required; bog-standard Apache or Nginx work just fine, because the complex “media handling” bits have been intentionally pushed to the endpoints; namely the encoder and (especially) the players. Today though, when FOSS HLS audio encoders are available and pretty much every browser supports playing HLS content natively, the complexity angle can be largely ignored by content creators.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Just my take. That, and 2 € will get you a (cheap) cup of coffee…<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Cheers!<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|---------------------------------------------------------------------|<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>| Frederick F. Gleason, Jr. |             Chief Developer             |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|                           |             Paravel Systems             |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|---------------------------------------------------------------------|<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|    All progress is based upon a universal innate desire of every    |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|    organism to live beyond its income.                              |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|                                                                     |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|                                                  -- Samuel Butler   |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|                                                  "Notebooks"        |<o:p></o:p></span></p><p style='margin:0cm;font-variant-caps: normal;font-stretch: normal;font-size-adjust: none;font-kerning: auto;font-variant-alternates: normal;font-variant-ligatures: normal;font-variant-numeric: normal;font-variant-east-asian: normal;font-variant-position: normal;font-variant-emoji: normal;font-feature-settings: normal;font-optical-sizing: auto;font-variation-settings: normal'><span style='font-size:8.5pt;font-family:"Menlo",serif'>|---------------------------------------------------------------------|<o:p></o:p></span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div></div></div></body></html>