Naar de inhoud

Oplossingen · Bots

Een VPS voor een Telegram-bot

Een bot gebruikt in rust minder dan honderd megabyte en is vooral aan het wachten, dus de machine is bijna nooit de beperking: U1-1 voor $6.90 per maand draait er prima een. Wat uw factuur echt bepaalt, is media, en of u uw eigen Bot API-server draait. Beide zijn een rekensom, en beide staan hieronder.

De beslissing onder de beslissing

Webhook of long polling

Dit, niet het pakket, bepaalt of uw bot een domein, een certificaat en een open poort nodig heeft.

Long polling

Uw bot maakt een uitgaande verbinding met Telegram en wacht op updates. Geen domein, geen TLS-certificaat, geen poort open naar het internet, werkt achter NAT. Het is de snelste manier om iets aan de praat te krijgen en voor de meeste bots een prima blijvende oplossing.

Webhook

Telegram maakt verbinding met u. Vereist een openbaar adres, een geldig certificaat en een open poort (allemaal mogelijk met elk pakket hier), en in ruil daarvoor is er geen polling-lus en schaalt het beter onder echte belasting. Stap over wanneer belasting of latentie daarom vraagt, niet eerder.

De rekensom

Hoeveel bots een pakket echt aankan

Bots = (RAM − 300 MB besturingssysteem) ÷ wat één bot inneemt. De twee kolommen zijn een stateless commandobot en een bot met een ORM, een scheduler en een cache.

Capaciteit voor botprocessen en maandelijkse verkeersbundel per pakket, met actuele prijzen
PakketRAMLichte botsZware botsDataverkeerPrijsImplementeren
U1-1Eén bot, elke publieksgrootte1 GB124Unmetered$6.90Implementeren
C1-1-25Eén bot, met verkeersmeting maar goedkoop1 GB1241 TB$9.90Implementeren
GL2-4Meerdere bots, of een bot met een database4 GB6325Unmetered$11.90Implementeren
BD-8Een zelf gehoste Bot API-server8 GB1315232 TB$12.90Implementeren

Het aantal gebruikers van uw bot zit niet in deze rekensom, omdat het niet in het probleem zit: Telegram geeft uw proces updates één voor één in plaats van een verbinding per gebruiker te openen. Wat het antwoord verandert, is status die u zelf bijhoudt: een grote cache, een database in het proces, een model.

Het getal dat de factuur bepaalt

Media, niet geheugen

Gemiddelde bestandsgrootte × berichten per dag × 30. Beide richtingen tellen: een ontvangen bestand is ook verkeer.

Maandelijks dataverkeer per berichttype bij honderd, vijfduizend en vijftigduizend berichten per dag
Wat de bot verplaatst100/dag5,000/dag50,000/dag
Alleen tekstEen commando en een antwoord. Praktisch gratis.< 1 GB< 1 GB3 GB
Foto'sEen gecomprimeerde afbeelding, verzonden en ontvangen.< 1 GB44 GB439 GB
Spraakberichten en korte videoDe gebruikelijke belasting van een communitybot.9 GB439 GB4.3 TB
Documenten en lange videoHet eigen downloadplafond van Telegram voor een gewone bot.59 GB2.9 TB28.6 TB

Het enige dat de machine verandert

Een bot op de openbare Bot API kan bestanden tot 20 MB downloaden en tot 50 MB uploaden (de limieten van Telegram, niet de onze), en de bestanden komen nooit op uw schijf. Draait u uw eigen Bot API-server, dan wordt het plafond 2 GB en komt elk bestand op uw server terecht. Vanaf dat punt zijn schijf en dataverkeer niet langer bijzaak: BD-8 biedt 100 GB SSD en 32 TB voor $12.90, en dat is de opzet die daarbij past. Doet u dat niet, betaal er dan ook niet voor.

Eerlijk gezegd

Wat wij zelf zouden kopen

We draaien zelf een Telegram-bot. Dit is de machine waarop we die zouden zetten.

Voor één bot

U1-1 · $6.90/mnd

1 core, 1 GB, 15 GB SSD, en geen verkeersmeter: een bot die onverwacht media gaat verplaatsen, kan dus geen onverwachte rekening opleveren. Zet de bot onder systemd met Restart=always, en de enige resterende manier waarop hij uitvalt is uw eigen code. Groeit u eruit, dan is een bot verhuizen niet meer dan een map en een token kopiëren.

Vragen

Wat mensen vragen voordat ze er een kopen.

Hoeveel RAM heeft een Telegram-bot nodig?
Veel minder dan meestal wordt verkocht. Een bot is een langlopend proces dat bijna al zijn tijd wacht: een stateless commandobot zit rond 60 MB, en een bot met een ORM, een scheduler en een cache dichter bij 150 MB. Nadat het besturingssysteem ongeveer 300 MB heeft genomen, heeft een machine van 1 GB nog ruimte voor 4 zware bots of 12 lichte. Het aantal GEBRUIKERS speelt nauwelijks mee, omdat Telegram updates één voor één aan uw proces levert, niet via een verbinding per gebruiker. Wat het antwoord wel verandert, is status die u zelf in het geheugen houdt: een grote cache, een database in het proces, een model.
Webhook of long polling?
Begin met long polling, kies webhooks wanneer het ertoe doet. Bij long polling opent uw bot een uitgaande verbinding naar Telegram en wacht: er is geen domein, geen certificaat en geen open poort nodig, dus het werkt achter NAT en is de snelste manier om iets aan de praat te krijgen. Bij een webhook maakt Telegram verbinding met U, dus u hebt een openbaar adres, een geldig TLS-certificaat en een poort open naar internet nodig. In ruil daarvoor verdwijnt de polling-lus volledig en schaalt het beter als de bot echt druk is. Beide draaien prima op de kleinste machine hier. De eerlijke reden om over te stappen is belasting of latentie, geen mode.
Wat zijn de limieten voor bestandsgrootte?
De limieten van Telegram, niet de onze: een bot die de openbare Bot API gebruikt kan bestanden tot 20 MB downloaden en tot 50 MB uploaden. Met uw eigen Bot API-server wordt dat 2 GB en, belangrijker, komen de bestanden op de schijf van uw server terecht in plaats van via die van Telegram te lopen. Dat is de enige wijziging die echt verandert welke machine u nodig hebt: ineens doen schijf en dataverkeer ertoe, en daarom zet de tabel hierboven BD-8 bij die rij en niet bij de andere.
Raakt mijn bandbreedte op?
Een tekstbot nooit. Een mediabot misschien, en dan is het dertig seconden rekenwerk waard: gemiddelde bestandsgrootte × berichten per dag × 30. Vijftigduizend spraakberichten per dag van 3 MB is ongeveer 4.3 TB per maand. Dat is meer dan de bundel van de meeste goedkope pakketten en lang niet de 32 TB van BD-8, of de lijn zonder verkeersmeting, waar de vraag niet speelt. Beide richtingen tellen: een bestand dat uw bot ontvangt en een bestand dat hij verstuurt zijn allebei verkeer.
Hoe houd ik de bot draaiende nadat ik de terminal sluit?
Een systemd-unit, geen screen-sessie. Schrijf een klein servicebestand met Restart=always, schakel het in, en de bot komt terug na een crash en na een herstart zonder dat u er wakker voor hoeft te zijn. Dit is de meest voorkomende reden dat een bot op een VPS "uitvalt", en het is geen hostingprobleem: een handmatig gestart proces sterft samen met de SSH-sessie die het startte. Docker met een restart policy doet hetzelfde als u het liever zo verpakt.
Kan ik meerdere bots op één server draaien?
Ja, en de meeste mensen zouden dat moeten doen. Elke bot is een apart proces met een eigen systemd-unit en een eigen token; ze delen de machine, desgewenst de database, en verder niets. De rekensom in de tabel gaat precies over deze vraag: een machine met 4 GB biedt plaats aan 25 zware bots voordat geheugen de beperking wordt. Houd ze op aparte poorten en onder aparte gebruikers als ze voor verschillende mensen zijn.
In welke regio moet de bot draaien?
Overal waar uw gebruikers bij kunnen en uw latentie naar Telegram redelijk is. De bot praat met de infrastructuur van Telegram, niet rechtstreeks met uw gebruikers, dus de gebruikelijke regel "dicht bij uw publiek" telt hier minder dan voor een website. Biedt de bot dezelfde gebruikers ook een webdashboard of een API, kies de regio dan daarop. Twijfelt u, implementeer dan per uur in twee regio's, meet, en verwijder de verliezer: $0.0113 per uur maakt dat een goedkoop experiment.