Snel, Furieus en Goedkoop: server met voldoende prestaties voor een klein bedrijfsdatabase voor minder dan US$1000
(c) Alexey Kovyazin, IBSurgeon, 21 september 2017 (laatste update - 29 september 2017)
Het is gemakkelijk om een krachtige server te krijgen als je bereid bent veel $$$ uit te geven: er zijn toonaangevende leveranciers zoals Dell, HP en veel minder bekende hardwarebedrijven, die je graag een krachtige machine verkopen (meestal met een levertijd van 4-6 weken).
Echter, geld is altijd een probleem, vooral voor kleine bedrijven en start-ups, dus er is veel vraag naar ‘goed-genoeg’ goedkope oplossingen. Dit artikel beschrijft de praktische aanpak voor het bouwen van een ‘goed-genoeg’ databaseserver met voldoende prestaties voor kleine bedrijven. Het bevat ook berekeningen en links naar de specifieke producten die wij aanbevelen.
Ons bedrijf (IBSurgeon) levert database-consulting en onderhoudsdiensten voor Firebird-databases, en wij zien vele soorten servers (of beter gezegd, computers die als server worden gebruikt). Grote klanten gebruiken high-end configuraties met SAN op basis van SSD’s, 350+Gb RAM en dubbele top-Xeons aan boord, maar kleine en middelgrote bedrijven gebruiken minder krachtige machines omdat ze niet veel rekenkracht nodig hebben en niet veel geld hebben.
We hebben gemerkt dat veel servers eigenlijk gewone werkstations zijn, en het meest interessante is dat ze jaren en jaren redelijk stabiel werken. Er zijn echt exotische dingen, zoals Windows XP op een computer met 2Gb RAM (de computer is gebouwd in 2002!), maar de meerderheid zijn gewoon ‘goed-genoeg’ zelfgebouwde hardware-oplossingen.
Natuurlijk is het een kwestie van statistiek, en niemand zal aanraden om een werkstation als server te gebruiken, maar de vraag is: waar ligt de balans tussen stabiliteit en kosten? Is het een goede aanpak om een goedkope zelfgemaakte server te gebruiken qua prijs-kwaliteit? Wat kunnen we krijgen voor USD$1000? Wat zijn de risico’s verbonden aan niet- dure hardware?
Wie kan geïnteresseerd zijn in een databaseserver onder usd$1000?
Laten we de volgende situatie bekijken: een kantoor met 20-25 medewerkers, mensen werken 7x5, de databasegrootte is ongeveer 50Gb. Het is een typische situatie voor een klein bedrijf dat een ERP- of CRM-systeem of een specifieke applicatie gebruikt (bijvoorbeeld een automatiseringssysteem voor tandartspraktijken) voor kleine bedrijfsapps op basis van Firebird.
Laten we ons voorstellen dat het bedrijf niet overladen is met geld en ze willen zo veel mogelijk besparen, zonder de betrouwbaarheid te verliezen, om goed-genoeg prestaties te bereiken. De verantwoordelijke persoon in een bedrijf begrijpt dat alle hardware vroeg of laat zal falen en wil de bijbehorende risico’s verminderen.
Wat voor server hebben ze nodig voor een Firebird-database van die omvang en belasting? Volgens de Firebird Hardware Guide is de meest kritieke resource voor de database schijf-IO, daarna RAM, en als laatste CPU (interessant is dat wanneer klanten uit het MKB servers kopen bij grote leveranciers, ze vaak kiezen voor servers met krachtige CPU’s en langzame schijven, waarschijnlijk vanwege marketingmateriaal dat het belang van CPU overdrijft).
Schijven
Snelle IO betekent dat we solid state drives (SSD’s) nodig hebben, aangezien SSD de koning is van willekeurige lees- en schrijfbewerkingen. Natuurlijk is SSD geen wondermiddel voor databases, maar het biedt echt hoge prestaties, en nu is het de juiste keuze voor databases.
SSD komt in 2 varianten - enterprise-grade en consumer-grade schijven. Het belangrijkste verschil tussen hen is een resource, grofweg berekend als het aantal IO-bewerkingen dat ze kunnen uitvoeren.
Bijvoorbeeld, Samsung 850 Pro 256 Gb MZ-7KE256BW - customer-grade SSD (gebaseerd op MLC-technologie), het heeft TBW (total bytes written) 150 Petabytes, en DWPD (Disk Writes Per Day) = 0.16. Of, eenvoudiger, de resource kan worden uitgelegd als 40Gb aan schrijfbewerkingen elke dag gedurende 10 jaar.
Update: we kregen de suggestie dat Samsung PM863a ($181.59) of SM863a ($249) betrouwbaarder zijn dan 850 Pro, maar nog steeds betaalbaar - in wezen, voor extra $60 kunnen we betere stabiliteit en enige vorm van bescherming tegen stroompieken krijgen.
Is dat veel of niet? We hebben een testserver met consumer-grade SSD waar we belastingtests uitvoeren om intensief werk van 100 verbindingen op een 60 Gb database te simuleren. Elke dag worden 3 van dergelijke tests gestart, elk 3 uur - dit betekent dat deze tests een werkdag van 9 uur simuleren. De tests draaien al 2 jaar, en de resterende resource (volgens de firmware) is 54%.
Natuurlijk betekent ~50% van de resource dat de schijf binnen het volgende jaar vervangen moet worden… Is dat zo erg? Elke paar jaar neemt de snelheid van SSD toe en dalen de prijzen: de SSD in het voorbeeld heeft 6Gb/s en kost $137, over 2-3 jaar zijn er 12G-schijven voor dezelfde prijs.
Amazon-prijs vanaf USD$124
Enterprise-grade SSD’s zijn gebouwd op basis van een andere technologie (SLC) en kunnen ongeveer 30x meer bewerkingen uitvoeren dan de customer-grade SSD van dezelfde grootte. Ook kosten ze ongeveer 3x meer dan consumer-grade SSD’s. De vraag is: hebben we echt 30x meer IO-rondes nodig voor de kleine bedrijfsserver voor 3x de prijs?
Als we op zoek zijn naar een snelle en betaalbare oplossing, is het zeer aantrekkelijk om goedkope customer-grade SSD’s te gebruiken en ze regelmatig te vervangen (en de resource natuurlijk te monitoren met firmware).
Risico’s verbonden aan SSD
Als adequate mensen begrijpen we dat customer-grade hardware minder resource heeft en een grote kans heeft om te falen, dus moeten we deze kansen verminderen. Hoe kunnen we dat doen?
Om de kans op plotseling hardwarefalen te verkleinen, is het noodzakelijk om 2 SSD’s voor de database te gebruiken, gebundeld in RAID1. RAID1 betekent niet dat we een aparte RAID-controller nodig hebben; het is goed genoeg om de RAID-mogelijkheden van moderne moederbordchipsets te gebruiken - in wezen is er een eenvoudige RAID-controller zonder cache.
Update: aangezien goedkope RAID-controllers op het moederbord de TRIM-functie van SSD’s mogelijk niet ondersteunen, wordt aanbevolen om software-RAID in te stellen om prestatievermindering te voorkomen; dit orkestreert gelijktijdige bewerkingen op softwareniveau.
Als er geen cache is, wat zal dan de prestatie zijn? Moderne SSD’s, zoals de Samsung in het voorbeeld, hebben ingebouwde cache en zeer slimme controllers - dus ze zijn snel genoeg zonder speciale RAID-controllers.
Natuurlijk is het noodzakelijk om de gezondheid van schijven te controleren; meestal biedt de firmware een goed genoeg schatting van de levensduur van de schijven.
Back-ups
Natuurlijk hebben we schijven nodig voor back-ups. De beste keuze is een paar SATA-schijven van elk 2Tb - bijvoorbeeld Seagate SkyHawk 2TB Surveillance Hard Drive, met 5900 rpm.
Amazon-prijs is $74,99
We hebben 2 HDD’s nodig omdat schijven voor back-ups ook in RAID1 moeten worden geplaatst, om bescherming te bieden tegen plotseling hardwarefalen. Deze back-upschijven kunnen redelijk langzaam zijn; hun belangrijkste doel is om back-ups op te slaan en een adequate snelheid van sequentieel lezen/schrijven te bieden. 5900 rpm-schijven zijn langzamer dan 7200 rpm, maar ze staan bekend als betrouwbaarder. Deze specifieke serie schijven (Seagate SkyHawk) is ontworpen voor lineaire schrijfbewerkingen: dat is wat we nodig hebben voor back-ups.
Risico’s voor back-upschijven
Het risico is hetzelfde als voor SSD, en we beschermen ons er op dezelfde manier tegen: RAID1 en monitoring. Er moet een kleine kans zijn dat beide schijven in RAID1 tegelijkertijd falen.
Systeemschijf
Hebben we een aparte schijf nodig voor het besturingssysteem? In de goedkoopste configuratie - nee, het is goed genoeg om OS en database op dezelfde schijf te houden. Het versnelt de degradatie van de SSD enigszins, maar niet zo veel - in ons scenario zou het zeker 3 jaar moeten meegaan.
CPU
Voor een Firebird-databaseserver is het beter om een CPU met veel kernen en een zo laag mogelijke frequentie te kiezen. Ja, je leest het goed - er is geen behoefte aan hoogfrequente CPU’s voor een databaseserver. Firebird (indien correct geconfigureerd) gebruikt alle kernen voor normaal werk, maar belast ze niet voor 100%.
Er zijn uitzonderingen: sommige onderhoudsbewerkingen (back-up en herstel) profiteren van een snelle CPU, en slecht geschreven SQL-query’s met verkeerd gebruik van indexen - ze verbruiken 100% van de kern, maar dit is een duidelijk teken dat databaseprestatie-optimalisatie vereist is. Over het algemeen is het niet mogelijk om langzame query’s te compenseren met high-end CPU’s: zelfs als de CPU 3x sneller is, blijft de langzame query langzaam.
Aan de andere kant kan het hebben van meerdere kernen het bestaan van dergelijke CPU-intensieve query’s compenseren: met minder dan 25 gebruikers en 8 kernen is de kans niet zo groot dat alle kernen tegelijkertijd bezet zijn door langzame query’s.
En aangezien we op zoek zijn naar de goedkope oplossing, zijn we beperkt tot desktop-CPU’s - en helaas moeten we zeggen, tot AMD-chips. In wezen, als Intel een desktopprocessor met 8 kernen zou kunnen leveren voor dezelfde prijs of iets hoger dan AMD FX-8320E, zouden we ook Intel kunnen gebruiken, maar op dit moment zie ik die optie niet.
Deze AMD-chip is niet zo modern en niet zo snel, maar hij heeft 8 kernen en is goedkoop, dus het is de optimale keuze voor onze snelle en goedkope server.
Amazon-prijs is USD$108
Risico’s verbonden aan desktop-CPU
Wat is het potentiële risico verbonden aan CPU? Voor laagfrequente (d.w.z. niet overklokte) chips met adequate koeler is er bijna geen risico. Wanneer heb je voor het laatst gehoord over een defecte desktop-CPU - in 2003? Natuurlijk zijn server-CPU’s veel sneller, maar we zoeken een goed-genoeg oplossing.
Het is een goed idee om CPU-belasting en temperatuur te monitoren om incidentele herstarts te voorkomen.
RAM
De benodigde hoeveelheid RAM hangt af van de databasegrootte en het aantal gebruikers. In ons scenario is de databasegrootte 50Gb en hebben we maximaal 30 gebruikers.
De maximale grootte die Firebird kan verbruiken is de databasegrootte (in dit geval wordt deze volledig in RAM gecachet) plus 200-300Mb per gebruiker (in het geval van Firebird 2.5 SuperClassic). Dus de ideale maximale RAM-grootte is 64Gb, maar aangezien we willen besparen, en aangezien we snelle SSD hebben, kunnen we zo weinig als 16Gb gebruiken.
Sommige gebruikers in dit scenario werken prima met zelfs 8Gb, maar 8Gb is vrij krap: in dat geval mag geen andere applicatie op dezelfde server worden gebruikt. 16Gb is het aanbevolen minimale optimum.
Amazon-prijs is USD$59.99 x 2 = $120
Risico’s verbonden aan RAM
RAM is kwetsbaarder voor storingen dan CPU’s maar minder dan schijven. Enterprise-grade RAM heeft speciale mechanismen om de kans op fouten te verminderen, zoals pariteitscontroles. Hoe kunnen we het risico op geheugenstoringen inschatten en verminderen?
Ten eerste zijn er methoden om geheugenchips te controleren, en als dergelijke tests succesvol zijn doorstaan, zullen RAM-chips vele jaren werken. Ten tweede, wanneer RAM faalt, is het meestal erg merkbaar: de computer heeft ofwel een blauw scherm of kernel panic, of frequente herstarts: al deze symptomen vereisen controle en, in geval van slechte resultaten, vervanging van RAM.
Moederbord
Het moederbord is een belangrijk onderdeel van elke computer. Gelukkig zijn moderne moederborden voor desktops zeer betrouwbaar, vooral moederborden die 4-5 jaar geleden zijn uitgebracht - ze hebben alle noodzakelijke updates en zijn stabiel. En - ja, ze zijn goedkoop.
We hebben een moederbord nodig met RAID-ondersteuning, met ingebouwde videokaart en met voldoende SATA-aansluitingen. Zoiets als dit:
ASUS M5A78L-M Plus/USB3 DDR3 HDMI DVI USB 3.0 760G MicroATX Motherboard
Amazon-prijs is USD$74,99
Het heeft zeer positieve recensies en is eenvoudig te configureren voor RAID1.
Desktopbehuizing
We hebben een desktopbehuizing nodig om alle computercomponenten aan te sluiten, met voldoende voeding. Zoiets als dit: $76,82 http://amzn.to/2ydeYs1
UPS
Het enige dat geen onderdeel is van de server, maar elke computer met belangrijke gegevens erin zou moeten hebben - een ononderbreekbare stroomvoorziening (UPS).
UPS beschermt een computer tegen stroomuitval en fluctuaties. In onze ervaring is een stroompiek of abnormaal stroomverlies van de computer de belangrijkste bron van databasecorrupties.
Zoiets als CyberPower CP1200AVR, voor $117.97, zou goed genoeg moeten zijn.
Totaal
Als resultaat hebben we de totale prijs van alle computercomponenten en UPS = USD 855,27 - dat is zelfs minder dan USD 1000, maar voordat deze componenten een werkende computer worden, moeten ze worden geassembleerd, voorzien van een besturingssysteem en getest.
| Item | Prijs | Aantal | Totaal |
|---|---|---|---|
| SSD Samsung 850 Pro 256 Gb MZ-7KE256BW | $124,24 | 2 | 248,48 |
| Seagate SkyHawk 2TB Surveillance Hard Drive | 74,99 | 2 | 149,98 |
| CPU AMD FX-8320E | $86,02 | 1 | 86,02 |
| RAM Corsair Vengeance 8GB | $61,99 | 2 | 123,98 |
| Moederbord ASUS M5A78L-M Plus | $57 | 1 | 57 |
| Desktopbehuizing | $69,99 | 1 | 69,99 |
| CyberPower CP1200AVR | $119.82 | 1 | 119,82 |
| Totaal | 855,27 |
De server assembleren
Om al deze onderdelen tot een werkende server samen te voegen en daar een besturingssysteem op te installeren (we zouden een variant van Linux aanraden, zoals CentOS7+ of Ubuntu Server 16+), moeten al deze componenten correct worden geassembleerd/aangesloten.
Het is niet moeilijk, het vereist alleen een schroevendraaier, wat geduld en tijd om instructies zorgvuldig te lezen en wat YouTube-video’s te bekijken. 10 jaar geleden kon bijna elke ontwikkelaar een computer uit deze onderdelen assembleren, tegenwoordig is dat anders, maar nog steeds niet moeilijk.
Wat als je de server niet wilt assembleren?
Er is een snellere weg - het is mogelijk om een computer met een vergelijkbare configuratie te kopen die bijna aan onze behoeften voldoet, en daar extra componenten (bijv. schijven) in te pluggen.
Ik zou aanraden om naar deze computer te kijken - oorspronkelijk ontworpen als game-pc, heeft hij een 8-core CPU en 16 GB RAM, en kost slechts USD$709.
Het zal nodig zijn om hem uit te rusten (behuizing openen en inpluggen) met een paar SSD-schijven (+$248,48), nog een back-up schijf (+$74,99) en natuurlijk een UPS (+119.82). Het totaal wordt USD 1153 - dat is hoger dan het doel van $1000, voornamelijk vanwege de videokaart en de mooie desktopbehuizing. Je moet nog steeds RAID1 configureren (in BIOS) en natuurlijk daar een server-besturingssysteem installeren in plaats van het vooraf geïnstalleerde Windows 10 Home.
Deze aanpak kan worden gebruikt om een krachtige desktopcomputer om te toveren tot een server - voeg gewoon redundante SSD’s en back-up schijven toe.
In het verleden gebruikten veel MKB-bedrijven en startups dergelijke zelfgebouwde servers, nu is er een trend om cloudgebaseerde virtuele machines te gebruiken.
Hoe verhouden virtuele machines zich tot een zelfgebouwde server?
Natuurlijk vereist het bouwen en onderhouden van een eigen server enige vaardigheden (niet zo hoog als het misschien lijkt), dus veel bedrijven willen van alle hardware-servers af (en mogelijk ook van de systeembeheerder die verantwoordelijk is voor servers).
In het volgende artikel zullen we een VM in de cloud bekijken als databaseserver voor het MKB.
Meer artikelen over Firebird databaseprestaties:
- Firebird Hardwaregids
- Afstemmen van 1,7 TB Firebird database
- Firebird Prestatieoptimalisatieservice
- 45 manieren om Firebird database te versnellen
- Verzameling van geoptimaliseerde Firebird configuratiebestanden
Neem contact met ons op
Stel gerust al uw vragen: [email protected].
Dankbetuiging
Veel dank aan de mensen die suggesties en verbeteringen voor dit artikel hebben gestuurd:
- Vlad Khorsun
- Dmitri Kuzmenko
- Pavel Zotov
- Sergey Nikitin
- Emil Mustea