PuSH deel 5

Deel 5 van de serie over de software ( en de hardware ) achter de OBA website.
In deel 1 tm 3 wordt uitgelegd wat PuSH is, en waarom we daarvoor gekozen hebben.
De OBA website is inmiddels 2 keer verhuisd : 1 keer van wordpress.com naar een eigen domein, de 2-e keer met behoud van de domeinnaam naar een andere hoster.
Vorige delen :

1
2
3
4

Problemen
Natuurlijk traden er problemen op.
Als je subscriber software een keer geen antwoord geeft, of een verkeerd antwoord, wordt de subscription stilletjes beëindigd. En dat gebeurtde nogal eens tijdens het ontwikkelen van de software. Even een comma vergeten, testen, en hup je abonnement is beeindigd ( zonder dat je daarvan een melding krijgt )Er bestaat wel een testhub bij Google, maar toen ik hem wilde gebruiken gaf hij de melding dat hij down was wegens overschreiding van de data-limieten.

PuSHpress bleek een bug te bevatten, waardooor je je maar 1 keer kon abonneren. Die bug heeft me dagen werk gekost, want mijn eigen blog was natuurlijk het eerste waar ik mee ging testen, en ik ontving maar geen pings. Gelukkig kreeg ik wel een ping van een wordpress.com blog, anders was ik nu nog steeds op de verkeerde plek naar een fout aan het zoeken geweest…
Toen ik de oorzaak van de fout eenmaal gevonden had, dacht ik dat er binnen zeer korte tijd een update van de plugin zou komen. Dat bleek niet het geval. Er is geen enkele reactie gekomen op mijn verzoek om een aanpassing, en intussen hebben al meerdere mensen mijn gepatchte versie geinstalleerd. Welkom in de wereld van wordpress.

Het maken van een goed onderhoudsscherm bleek lastiger dan ik dacht. Ik moest vaak met de hand zaken herstellen in de database. Daarom was ik blij dat mijn beheer-tool gebaseerd was op SQL. In plugins van anderen zie je ook vaak dat de schermen waarmee alle opties kunnen worden ingesteld de meeste coderegels nodig hebben.

Toen we klaar stonden om 190 abonnee’s te gaan omzetten naar PuSH, doken er weer nieuwe problemen op. Deze keer was het niet mijn schuld, maar van de bibliotheek die het PuSH protocol afhandelt. Die gebruikt SimpleXML om een feed in te lezen en daaruit 2 links te destilleren : de “self” URL en de “hub” URL.
Het leek wel alsof SimpleXML vast liep bij een al te grote feed. Hij kon dan de links niet vinden, en de class die alles moest regelen ging stilletjes dood, de door mij geschreven beheersoftware in de veronderstelling achterlatend dat alles goed gegaan was. Maar er kwam geen record in de subscription-tabel, dus alle records die de beheersoftware wegschreef werden vervolgens Orphans.
If you want something done right, do it yourself….
Ik ga SimpleXML dus maar vervangen door een meer solide XML-parser, of misschien negeer ik in dit geval XML helemaal. Het is een beetje een overkill voor zoiets simpels.

Toen de software eenmaal goed leek te draaien met een testblog bij verschillende providers en we 200 abonnee’s gingen invoeren, bleken er zo hier en daar wel wat addertjes onder het gras te zitten.
Web-log en Blogspot gebruiken beide het Atom protocol, maar de inhoud van de feeds is totaal verschillend. Afbeeldingen kunnen de meest exotische URL’s en fileformaten hebben. Er is binnen de RSS en Atom standaards zeer veel ruimte om dingen anders dan anderen te doen. Er is een ongelooflijke variatie aan tekensets in omloop. WordPress snapt het meestal wel, maar een muzieknoot in een titel gaf toch wel wat vreemde tekentjes. WordPress blijkt van alles in de samenvattingen te gooien, wat er niet in thuis hoort. Javascript, plaatjes, buttons, waar je een schone tekst zou verwachten. Doordat mensen ook zelf een samenvatting kunnen maken, bleek het nodig daarin te gaan filteren. De meeste manieren om lege regels te publiceren worden nu wel afgevangen, want je wil geen wit blok als samenvatting.
Sommige mensen schrijven korte gedichtjes, en dan willen ze niet het hele gedicht al als samenvatting op de voorpagina. De software probeert hier intelligent mee om te gaan, door bij korte stukjes de regels te tellen, in plaats van de letters.
De teststraat die ik bedacht had bleek niet afdoende te zijn om alle problemen goed te onderzoeken. Als een probleem optreedt bij een bepaalde blogger die slechts een keer per dag iets publiceert, moet je iets hebben om het probleem te kunnen reproduceren. Daarom is er een tooltje ontwikkeld waarmee de ontvangen pings als file kunnen worden opgeslagen en telkens opnieuw kunnen worden ingelezen, dat versnelt het foutzoekproces aanzienlijk.

Nieuwe ontwikkeling : een kleinere server.
De server die ik gebruikte had een energieverbruik van 60 Watt. In geld omgerekend : 120 euro per jaar. In ruil daarvoor had hij wel een gespiegelde 500 Gb harddisk, maar sinds het importeren van VKblog klaar was, had hij eigenlijk niet zoveel meer te doen. Het oorspronkelijke idee was, om alle functies die nu gebruikt worden voor OBA onder te brengen op het gehoste platform. Maar door de ervaringen van de afgelopen maanden ging ik me afvragen of dat wel handig was.
– we krijgen veel meer en grotere pings dan ik van tevoren had ingeschat.
– bijna al het onderhoudswerk vindt plaats op de server die de pings ontvangt, aan de software op de VPS hoeft nauwelijks onderhoud gepleegd te worden.
– als er een storing is, heb je met 2 servers vrij snel een beeld waar het zit, omdat ze nooit tegelijk uitvallen.
– hoe minder werk de gehoste server moet doen, hoe sneller alles werkt.

Ik heb dus ook eens gekeken wat een nieuwe eigen server me zou kosten, en hoeveel stroom die zou kunen gebruiken, en zo kwam ik bij een Shuttle mini-pc.

girl not included

Dat zijn kastjes met een Intel Atom processor er in, waar je zelf alleen nog disks en geheugen aan toe moet voegen.
Ik was bijzonder gecharmeerd van de XS35V, omdat die passieve koeling had.
Geen ventilator dus. Mijn eerste opwelling was, om er een SSD disk in te stoppen en verder niets te veranderen aan de software.
Maar waar heb je eigenlijk een disk voor nodig ? De Shuttle kon maximaal 4 GB ram herbergen. Ik wist dat er Linux versies bestonden die op tiny hardware draaiden. Een PC kan ook opstarten van een USB-stick, of beter : van een SD-kaartje, want die hebben hogere snelheden dan USB-sticks. De Shuttle had er een gleuf voor.
Nu nog software.
Het meest kansrijk leek het tool “Debirf”, omdat ik dan verder alle software kon gebruiken die ik gewend was. Bij dit tool, en de meeste andere lookalikes die ik bekeken heb, ga je zelf een CD samenstellen en de image op een USB-stick zetten. Helaas waren er wel wat tegenslagen : de tools werkten niet op mijn PC en de verbinding met de server waar waar alles wat je nodig had op stond was gammel.
Ik wil wel een betrouwbaar systeem.
Werken zonder disk is lastig. Een USB-stick is veel trager dan een disk, en nog erger : hij gaat na 50.000 schrijfacties kapot. Je moet een RAMdisk gebruiken, die is 1000 keer sneller en gaat niet kapot. Maar dat vraagt om een aangepaste Linux, voor embedded systemen.

Hoe het werkt :
Tijdens het booten weet een PC niets van disks. Een disk is een mega-complex stelsel van data-structuren waar het kleine boot-proces helemaal geen verstand van heeft. Maar om alle hardware van de PC goed in te stellen, heeft de PC programma’s nodig, en die staan op de disk. Kip-ei probleem dus. Daarom is booten altijd een meertraps proces. De bios zoekt de disk, leest de eerste sector van de boot-partitie, daar staat een boot-loader in. Dat is een programma dat weer wat meer kan enz. De file vmlinuz bevat het kale operating-system zonder programma’s. Die wordt als eerste geladen en daarna een filesysteem. De inhoud van het intitiële filesysteem ( een RAMdisk ) wordt geladen uit het gecomprimeerde bestand initrd.img.
Na het booten schakelt Linux over van de initiële RAMdisk naar het echte filesysteem op disk, behalve bij een diskless versie van Linux, die draait verder met alleen RAM.
De samenstellers van de meeste embedded Linuxversies maken dankbaar gebruik van die initiële RAMdisk als hoofd filesysteem.

Na enig prutsen met zelfgemaakte images las ik over Puppy Linux.
Niks zelf ISO in elkaar sleutelen : een complete distributie die je op een willekeurig medium kan branden en die er default van uit gaat dat er geen disk is, dus geen verbouwingen. En standaard uitgerust met piepkleine programma’s. Dat werkt dus fantastisch. Het enige probleem was, dat het geen server is, maar een office-pc. Ik moest dus nog wel even een monitor en toetsenbord aansluiten, voor ik hem als server kon inrichten.
Hoe dat inrichten ging :
Heel makkelijk : Je start de browser ( de eerste keer moet hij die nog downloaden, die zit er niet op ) en je surft naar een website waar de packages staan die je wil installeren.
( Puppy Linux heeft geen eigen repository zoals Ubuntu ) Hij pakt ze uit en installeert ze, en daarna heb je je server, al heeft hij nog niet het gerbruiksgemak van de Ubuntu server. Hoe gaat het dan als je hem uit zet, is dan niet alles weg ?
Nee, hij comprimeert het deel van de RAMdisk waar dingen in veranderd zijn, en schrijft het op het SD-kaartje. Ook alle geïnstalleerde packages bewaart hij op het SD-kaartje. Als je hem weer aan zet, leest hij het terug. Tussendoor schrijft hij het ook nog af en toe
( te vaak naar mijn smaak ) weg.
De LAMP ( Linux Apache MySQL PHP ) software die ik geïnstalleerd heb is niet gelijk aan de software op de Ubuntu server.
Alles staat op een andere plek, heet anders, is minder uitgebreid, alles om ruimte te besparen. ( hoewel dat met mijn enorme RAM disk niet nodig was )
Apache is vervangen door Hiawatha, die veel minder geheugen gebruikt, maar vrijwel hetzelfde kan. Na het lezen van de documentatie was ik bijzonder gecharmeerd van deze webserver, omdat alles wat je zou willen hebben er al in zit, waar je het bij Apache op een ingewikkelde manier moet toevoegen en configureren, zoals een tijdelijke ban bij hackpogingen of een bescherming van je foto’s tegen hotlinken, terwijl het toch een heel compact programma is.
MySQL is vervangen door MariaDB. MySQL is in handen gekomen van Oracle door de aankoop van Sun, en het is de vraag of het open-source blijft. MariaDB geeft die garantie wel.
PHP is wel dezelfde, maar draait als een los proces, waar het bij Apache geïntegreerd is in de webserver. Iets langzamer, maar veel zuiniger met geheugen.
Er ontbraken nog een aantal PHP modules die ik op de andere server later had geïnstalleerd en de logging werkte heel anders. Voor ik het vergeet : SSH moest er op. Je wil natuurlijk wel je monitor en toetsenbord terug, en zonder SSH kun je niet op afstand bij je server. Overigens starten alle grafische toeters en bellen pas op, als er een monitor gedetecteerd is; Puppy Linux heeft geen problemen met “headless” gebruik.

Als je eenmaal weet hoe het allemaal werkt, is dit een geniaal kastje om naast de router te laten staan. Het energieverbruik is maar 18 watt, maar er zit wel een 1.85 GHz dual-core Intel Atom processor in, dus hij is zeer ruim snel genoeg voor kantoorwerk. Er passen dezelfde onderdelen in als in een laptop, dus dezelfde disks en dezelfde DVD-brander. Het voordeel van een computer die 24 uur per dag aan staat is, dat je er dezelfde dingen mee kan doen waarvoor je nu webhosting koopt. Je kan er bijvoorbeeld mailtjes van een Gigabyte mee ontvangen, waar niemand anders zijn neus in heeft kunnen steken onderweg. Het enige dat je er nog van weerhoudt om webhosting helemaal aan de kant te schuiven, is de beperkte upload snelheid van je internetverbinding. Elke internetprovider adverteert met “nog sneller films downloaden”. Ze vertellen er niet bij dat hun computers die films niet hosten. Wat ze ook meestal niet vermelden, is dat de “upload” snelheid maar een fractie is van de downloadsnelheid. Dus zelfs al zet heel Nederland van dit soort servertjes naast de router, dan nog kun je alleen de sites van bedrijven als Sanoma Digital op flitsende snelheid bekijken, die anderen zijn een stuk trager.

Om te kunnen omschakelen van de ene server naar de andere, zonder dat iemand het merkt ( de omschakeling zelf gebeurt in de firewall van mijn internet toegangskastje ) moesten de databases van de 2 apparaten synchroon lopen.
Daar hebben de meeste databases een mechanisme voor, dus MySQL en het daarmee compatible MariaDB ook : database replication. De ene database wordt master, en de andere slave. Telkens als de master iets verandert, schrijft hij in een binair logbestand
( ik kende het van een ander merk als “audittrail” ) deze wijziging. De slave leest die trail ( dat hoeft niet op hetzelfde moment, de slave kan bijvoorbeeld ‘s-nachts uit staan ) en brengt dezelfde wijzigingen aan in zijn database. Om de zaak op te zetten moet je beide databases de nodige instructies geven. Daarna bevries je de master voor updates, je maakt een dump van de hele database, je geeft een commando om een paar tellers op te vragen en je ontdooit de master weer. Dan importeer je de backup van de master in de slave database, je stelt de getallen in die je tijdens de freeze van de master hebt bepaald, en je start de synchronisatie. Een kind kan het, het is alleen de kunst om de juiste commando’s uit het 2500 pagina’s dikke MySQL handboek te vissen.

Read Offline:
This entry was posted in Wordpress and tagged , , , . Bookmark the permalink.

8 Responses to PuSH deel 5

  1. knutselsmurf says:

    Deze post is de tweede die door de nieuwe server op OBA gezet is. De eerste miste nog een plaatje. Of de comments ook goed werken, is nog even afwachten; ook dat moest aangepast worden, omdat de nieuwe server geen Python interpreter had.

  2. Grutte Pier says:

    Ah, nu begrijp waarom je Puppy Linux kende 😉

    Ikzelf heb bijzonder slechte ervaringen met Shuttle, de PC-variant zeg maar. Zeer instabiel en vele BSOD’s. Hopelijk is dat nu verbeterd en gaat deze versie goed om met Linux en als server.

  3. beheerder says:

    The blue screen of death zal ik niet vaak zien. Ten eerste omdat er geen monitor is aangesloten, ten tweede, omdat er geen Windows op draait. Ik ken Shuttle alleen maar als fabrikant van bare-bones, en ik heb nog nooit iets slechts gelezen. De afwerking van het kastje en de aansluitingen vond ik een beetje goedkoop, maar de binnenkant is wel in orde.

  4. Grutte Pier says:

    Ik denk ook dat je nergens last van zal hebben. Mijn ervaringen zijn met XPC Sg-serie. Waardeloze zooi om als W-pc te gebruiken (was mijn keuze dan ook niet.. 😉 ).

  5. beheerder says:

    Geen idee. Voor mij is een PC een stuk gereedschap dat je omwisselt als het stuk is. Het viel me wel op dat het kastje niet zo mooi afgewerkt is als mijn bureauding, maar de prijs was er ook naar en hij is niet gemaakt om in het zicht te staan. Elke plek is goed, als je de luchtstroom maar niet belemmert.

  6. beheerder says:

    Nog even een reactie bij mezelf, om te controleren of de reacties-teller nu wel werkt.

  7. Aad Verbaast says:

    Indrukwekkend verhaal (ver boven mijn pet) vol met oplossingen die het knutselen ver overtreft.
    Als ik als leek dat zo lees, denk ik wel: er kan ook veel mis gaan. De afhankelijkheid is immers groot van externe partijen. Als ze even wat veranderen kon de boel wel eens makkelijk ontsporen.
    Of valt dat allemaal wel mee?

  8. knutselsmurf says:

    Makkelijk en moeilijk zijn relatieve begrippen. Iedereen houdt zich denk ik bezig met wat hij nog net kan, vooral als het om een hobby gaat. Ja, er kan veel mis gaan. Het zijn maar blogs, maar we pakken de zaken wel zo professioneel mogelijk aan.

Leave a Reply

Your email address will not be published.