Autor Zpráva
ZdenekPro
Profil
Dobrý den,

hledám hostitele pro svůj podnik, pro obyčejné html a prodejní strojek s pár .php opracovávajícími nějakou SQL databázi (třeba MySQL). Netřeba výkon ani objem ani rychlost, dokonce to může chvíli stát. Ale nesmí se ztratit údaje z databáze, musí být naprosto spolehlivá i kdyby v jedné serverovně bouchla bomba. Já vím že to nejde, ale chci to. :)
Nesmí se ztratit jediná objednávka, v případě nedodání by došlo k velkým ztrátám času, škodám "morálním a na požitku zákazníka" – a k ostudě.

Od SQL potřebuji jednoduché běžné věci, hodlám vypracovat (byť jen poučený laik) strojek tak že bude veškerou činnost s db provádět jedním příkazem pro změnu jediného záznamu čímž zajistím nedělitelnost (atomicitu) a nebude potřeba serialize (které MySQL snad ani nemá).
Základem budou dvě serverovny a v nich dokonale zrcadlené disky. Zálohování hodlám provádět i uvnitř strojku ve své režii, v podstatě jsem vymyslel jednoduché sw CDP se vzdáleným zrcadlením (netuše o takových věcech ničeho), navíc hodlám zálohovat odesíláním na jednoduchý hosting jiného hostitele, ale nevím jak dokonalé to bude a zda obnovitelnost do posledního stavu zaručí => musím hledat hostitele se spolehlivými úložišti.

Zkoušel jsem velké české hostitele, ale první jedou na Windowsech a řekli rovnou že o spolehlivosti se nedá mluvit, druzí to mají spatlané z toho co jim zrovna přišlo pod ruku, třetímu se servery hroutí protože nemá oddělené prostory jednotlivých uživatelů, další nečetli co jsem psal... Zálohují i samostatný pronajatý server jednou denně - to by mne zákazníci utloukli platnými smlouvami (o kterých bych nevěděl protože by zmizely obnovením databáze ze zálohy).

Stručně shrnuto nejde o výkon, ale o spolehlivost uchování obsahu databáze. Základní otázkou je co vlastně hledat: VPS? RAID 999?
Znáte nějaké schopné hostitele kde by se dalo očekávat že to budou mít důkladně zazrcadlené?
Třeba i emerické (ale vím že i tamní renomované společnosti selhávají (navíc třeba při DoS nedokáží vyškrtnout útočící stroje (a zvýšený provoz dokonce nechají zákazníka zaplatit :-D ))).
Děkuji předem za doporučení co použít.
Davex
Profil
Domnívám se, že spolehlivou službu s individuálními parametry by měli být schopni nabídnout všichni velcí hráči.

Casablanca INT - Big Blue One
České radiokomunikace - Smart Cloud
Dial Telecom - Cloud Hosting
GTS - Virtual Hosting
Master - Cloud hosting
O2 - Cloud
T-Systems - Cloud Computing
Joker
Profil
ZdenekPro:
Tenhle problém má více aspektů.

Nesmí se ztratit jediná objednávka, v případě nedodání by došlo k velkým ztrátám času, škodám "morálním a na požitku zákazníka" – a k ostudě.
Nejsem si jistý, jestli tohle je platná úvaha.
Ztráta dat je problém skoro pro každého, ale to ještě neznamená, že nutně potřebujete dokonalý systém. Potřebujete systém, kde odhad škody vzniklé ztrátou dat krát pravděpodobnost ztráty dat dá přijatelnou míru rizika za přijatelnou cenu.
(teoreticky nejspíš výhodněji než budovat dokonalý systém s astronomickými náklady vyjde mít skoro dokonalý systém a v tom extrémně nepravděpodobném případě ztráty dat klienty odškodnit) .

Další aspekt je, že musí existovat nějaký moment, kdy tu operaci prohlásíte za platnou. Třeba když klient ztratí síťové připojení zrovna ve chvíli, kdy odesílá data na server, takže server data vůbec nedostane, nebo dostane jen část, nedá se to přece brát jako provedená operace.
Předpokládám, že ta transakce musí proběhnout tak, že klient něco odešle na server a dostane zpátky něco potvrzující, že data byla přijatá, čímž teprve je ta transakce uskutečněná.

hodlám vypracovat (byť jen poučený laik) strojek tak že bude veškerou činnost s db provádět jedním příkazem pro změnu jediného záznamu čímž zajistím nedělitelnost (atomicitu) a nebude potřeba serialize (které MySQL snad ani nemá).
Tohle mají řešit databázové transakce.
S tím uvedeným přístupem riskujete, že budete tlačen do špatné datové struktury v zájmu toho, aby údaje aktualizované současně byly pohromadě. A dost možná jak se ten systém bude časem měnit, jednoho dne stejně zjistíte, že už takový návrh není možné udržet.

Lepší je použít databázi která umí transakce (i MySQL je umí u tabulek InnoDB), v kódu vymezit jednotlivé transakce a nechat databázi, ať si zbytek ohlídá sama.
Jinak transakce neslouží ani tak k zálohování, jako k udržení konzistence dat.

Základem budou dvě serverovny a v nich dokonale zrcadlené disky.
Oddělená místa si můžete poměrně jednoduše zajistit i sám: Prostě si objednáte dva hostingy a aplikace bude ukládaná data duplikovat.
Ale podle mě by nejvýhodnější bylo použít žurnálování:
Každá změna dat by probíhala tak, že systém nejdřív do žurnálu na vzdáleném serveru (což může být skript zapisující do obyčejného souboru nebo do databáze) zapíše, co se bude měnit (primitivní metoda je, že tam uloží přímo SQL dotaz). Pak změnu provede a pak do žurnálu zapíše, že změna byla provedena.
Ze žurnálu se pak dá rekonstruovat podoba databáze a dokonce i zpracovat transakce, která se prováděla ve chvíli, kdy systém zhavaroval.
Zároveň se dají periodicky dělat zálohy databáze a při nich smazat/archivovat žurnál a zahájit nový. A kromě toho se zálohy dají samozřejmě ukládat i doma třeba.

Čili i v případě havárie hlavního hostingu by bylo možné rekonstruovat veškerá data z databáze. V extrémně nepravděpodobném případě, že by zhavaroval současně hlavní hosting a záložní hosting by byla ztracena data od poslední zálohy.
A v případě současného zničení serverů hlavního hostingu, záložního hostingu a počítače na který se stahují zálohy bychom nejspíš čelili nějaké globální katastrofě, takže ztráta dat z nějaké aplikace by nikoho nezajímala.
ZdenekPro
Profil
[#2] k Davex
Děkuji, postupně je oslovím a uvidím jaké řešení nabídnou.


[#3] k Joker
škody vzniklé ztrátou dat krát pravděpodobnost dá přijatelnou ... cenu. (teoreticky nejspíš výhodněji ... vyjde mít skoro dokonalý systém a v nepravděpodobném případě ztráty dat klienty odškodnit) .
Tak to je, když z běžného e-shopu nepřijde super mega kartáček na podrážky za mikro cenu tak to klient většinou neobrečí, jenže tady přímá peněžní škoda vzniklá zákazníkovi z jedné zmizelé objednávky může dělat klidně 100 000 Kč, k tomu možnost že bude nárokovat kompenzace za škody nemajetkové například zkažené prázdniny dětí (v případě zvlášť velkých požadavků bych u soudu nemusel dosvědčit proti sobě vznik smlouvy, že) a ještě to odrazování ostatních přes noviny a tvZnova... Nicméně do úplné krajnosti zálohování hnát nehodlám, jak píšete, protože platit za hosting pro malý podnik 200t není rozumné.

Zákazník něco odešle na server a dostane zpátky něco potvrzující, že data byla přijatá, čímž teprve je ta transakce uskutečněná.
Dostane zprávu potvrzující že objednávka byla přijata, zpracována a uložena, čímž vzniká smlouva, a z pohledu tohoto tématu je dokončena ta nedělitelná posloupnost transakcí.

riskujete, že budete tlačen do špatné datové struktury v zájmu toho, aby údaje aktualizované současně byly pohromadě.
To mi leží vzadu v hlavě a ozve se pokaždé když přemýšlím nad strukturou db řádku, příkladem "co uděláš se sloupci když přidáš další činnost která se se zákazníky bude muset provést (obeslání nějakým oznámením, různé reakce a následné postupy) atd...."
Když jsem dělal před půl rokem průzkum možností (na jejichž uskutečnění teď po vleklých potížích jiných složek přichází řada) a jak se co dělá poznamenal jsem si "MySQL Cluster - NDBCLUSTER nevím zda je již dospělý, PostgreSQL údajně má v sobě nějakou synchronní replikaci (vzdálené zrcadlení) ale vypadalo spíše jako rozpracovaná záplata."
InnoDb s transakcemi pro předejítí rozpadu dat prozkoumám.

aplikace bude ukládaná data duplikovat.
Přesně to je součást zamýšleného sw zrcadlení (zrcadlení na úrovni aplikace) jako doplněk k hw zrcadlení, jen jsem dvě vzdálená místa čekal u jednoho hostitele (což tady není tak obvyklé).
Hodlám zapisovat každou činnost s databází do prostého .txt na vzdálený jednoduchý hosting (jiného poskytovatele, kterého jsem vybral před půl rokem a spletl jsem se jak jsem zjistil při hostování běžných stránek a tak zůstane jen tupou skládkou .txt), navíc odesílat zprávy o potvrzených objednávkách do free-mailu jinde.
žurnálování
jsem vymyslel vlastní hlavou (ač laik, dělal jsem řízení procesů místo databází) z ničeho, pak jako obvykle zjistil že kolo již bylo vynalezeno, mírně jsem ho vylepšil přeskládáním vazeb (ale možná že ho nakonec raději udělám jak popisujete). Aby v žurnálu se nemohl objevit nebezpečný stav rozdílný od skutečnosti, nejdříve se zapíše rozhodnutí smlouvu uzavřít, pak se smlouva potvrdí zákazníkovi a poté do žurnálu zapíše zaslání potvrzení (při rekonstrukci se nanejvýš zašle podruhé potvrzení).

Zároveň se dají periodicky dělat zálohy databáze a při nich smazat/archivovat žurnál a zahájit nový. A kromě toho se zálohy dají samozřejmě ukládat i doma třeba.
To je přesně ono. V případě krachu disků i zrcadla vypnout stránky, vybrat zálohu, protáhnout žurnály od té zálohy jednoduchým .php nad DB a pustit stránky.

Takže to máme jeden hosting se vzdáleným zrcadlením, což se zřejmě nabízí pod šifrou "DB server bezi na VPS v HA rezimu, na dvou fyzickych virtualizacnich servrech. Oba fyzicke s. jsou v ruznych datacentrech, kde je vse DUAL." "k tomu pridat online replikaci DB serveru, pokud odpadne virtualni server v HA rezimu, posledni verze dat bude v jinem DC, bez ztraty jedineho radku." Což obnáší přijatelných 15t.
K tomu už mám jednoduchý hosting pro zálohy pro případ krajní nouze (a free-mail prozíravě pořízený již před 20 lety, takže teď nemusím žádný shánět).

Pokud by byly zničeny všechny zálohy na magnetických nosičích, pořád zbývá papírový počítač z ABC mladých techniků...

0