Archiv pro rubriku: Programování

Objektová úložiště jednou spolknou svět :-).

Objektová úložiště spolknou svět ?


! Nepropadejte panice ! 

Tradiční filesystémy a relační databáze zde budou s námi po mnoho dalších let o tom nemá smysl diskutovat, problém, ale vzniká dnes již na úrovni dat samotných, jsou totiž vysoce nestrukturovaná, bohužel nebo bohudík ?

Odhady říkají, že 80-90% dat kolem nás je nestrukturovaných, přesto se je snažíme popsat strukturou tabulek a relací, v nejhorším případě si uložíme string/json a ten si “žvýkáme” v aplikaci, otázka je zda-li je tento postup správný a nebojujeme proti vlastní “touze” dat být neorganizována.

Připomeňme si známý výrok Billa Jensena z knihy Simplicity.

Množství informací se zdvojnásobuje po každých 1100 dnech, tedy zhruba po třech letech, nicméně, čas, který nám zůstává k zpracování těchto narůstajících informací je stále stejný: 1440 minut denně".

Toto tvrzení bohužel již také není zcela platné, množství informace se zdvojnásobuje za polovinu času. :-(.

Strukturovaná data, ale mají stále a budou mít místo, jsou systémy, které generují “jen” tuto formu dat, senzory, čítače, čtečky, transakce, účto, sklady, … takové vše “bez lidí” z pohledu vývojářů je idylka, vše pevně zaškatulkováno, nikde nic nepřetéká, indexy indexují, ovšem reálný svět takový není.

NEstrukturovaná data jsou opačný extrémní protipól, svět plný chaosu jako kvantové fluktuace, je to náš svět takový jako jsou sami lidé, svět plný textů, audio a video obsahu, emailů, stránek, sociálna … je to “lidský” rozměr dat, pro vývojáře pekelný, nikdo přeci nechce “cpát” profilovou fotku či 100MB video jako blob do tabulky.

Nestrukturovaná data a web aplikace

Tradiční pohled dnešních web aplikací je generování strukturovaného výstupu dat na základě uživatelského vstupu (formuláře/upload) a ukládání na tradiční úložiště (filesystém, relační databáze), doba se však mění a uživatelé k nám budou (chtějí) tlačit data, které nelze jednoduše rozbít do “chlívečků”, protože jejich struktuře nerozumíme, typický zástupce největšího zdroje těchto dat jsou sociální media.

Proč objektová úložiště ?

Studie IDC z roku 2014 o nárůstu nestrukturovaných dat.

Proč “nová” objektová úložiště je zcela legitimní otázka, v první řadě je nutné pochopit (viz studie IDC), že internet je zaplavován masivním nárostem nestrukturovaných dat.

Je nutně změnit tedy přístup k těmto datům, je nutné je umět efektivně obsloužit, zvládnout je ukládat je jedna věc (zde by nebyl problém s klasickým filesystémem), ale většinou požadujeme další vlastnosti, snadný přístup, metadata, škálovatelnost (škálování relačních DB je obecně problém, distribuované FS mají své problémy), redundanci a výkon a flexibilitu (metadata nemohou mít pevnou strukturu tak jako to např. známe z filesystémů).

Objekt jako základ je elementární “struktura”, objekty nejsou na storage organizovány (flat), žádné adresáře ani hierarchie, objekt je reprezentován pouze svým ID, vyšší logiku, smysl, uspořádání zajišťuje aplikace a proto je důležité kvalitní API rozhraní, které je v těsnější integraci přímo s aplikací (aplikace “programuje”/řídí úložiště), z toho pohledu není překvapující, že některá cloud úložiště mají rozhraní přímo přes protokol HTTP/s (všimněte si, že filesystémy nebyly nikdo moc dobře stavěné na přístup přes HTTP/s).

object-storage-object-2016

object-storage-object-archi-2016

Ilustrace filesystému, blokového a objektového úložiště.

object-storage-compare-1200px-2016

Kde to najdu, kde to kvete, AWS S3, Google Cloud Storage a ti druzí …

Začít experimentovat je “snadné”, Amazon Web Services je cloud platforma jejíž součástí je i služba AWS S3 (Simple Storage Service), zajímavou alternativou na testing/vývoj je projekt Minio, což je minimalistický object storage s API kompatibilní s AWS S3.

Dalším zástupce je Google Cloud Storage, nemáme přímé zkušenosti, přednáška byla ovšem dost zajímavá, cenově asi “zatím” stále lépe než AWS, také si zatím hrajeme.

Z opensource možností projekt Ceph, distribuované objektové úložiště umožňující blokovou i file storage, predikuje se velká budoucnost, společnost RedHat koupila projekt Ceph a otevřela ho veřejnosti, předpokládá se integrace s platformou OpenStack a posazení vedle OpenStack Swift object storage, což je další open projekt storage řešení nebo můžete zkusit hodit oko na openio.io.

A to je vše, díky za pozornost.
František Havel, MOJEservery.cz

Mikroslužba ipinfo.io

Linux mini-howto?
Krátce o nástrojích ze života sysadmina.

Mikroslužba ipinfo.io


Pro menší projekt jsme hledali jednoduché řešení  realizace IP address look/whois/geolokace a to nejlépe formou služby s jednoduchým API, k ruce nám velmi vhod přišla právě mikroslužba ipinfo.io, zřejmě by to šlo vše realizovat svépomocí, ale máme rok 2016 tak proč se trápit.

Protože na více místech používáme RabbitMQ (message broker, fronty, zprávy) a opravdu čas se s tímto konceptem naučit se již vyplatil, nebyl velký problém napsat si vlastní službu na vyřizování požadavků z fronty  “rabbit whois” nad ipinfo.io, hlavní app je neinteraktivní a pouze přehazuje do fronty požadavky a nepotřebuje okamžitě odpověd, triviální.

ipinfo.io

Pohodlná služba s jednoduchým API, vrací výsledky v JSON (lze se i ptát v JSON), k dotazům lze použít vše co rozumí http protokolu (v placené variantě i https), základní verze je zdarma do 1000 dotazů/den, prostě super, nic více nepožadujeme, máme max. pár desítek požadavku za den a pokud se neplatu ipinfo běží na AWS.

Ukázka a více na http://ipinfo.io/developers.

ip@ip:~$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.3860,-122.0838",
  "org": "AS15169 Google Inc.",
  "postal": "94035"
}

http://ipinfo.io/developers/tools

http://ipinfo.io

ipinfo-io-blog-header-2016

Pěkná služba, děkujeme.
MOJEservery.cz

Advanced REST client pro testování REST API rozhraní

API


api-rest-client-1-2016

API, API, API (Application Programming Interface) je takové zaklínadlo dnešní doby, pokud služba/aplikace nedisponuje rozhraním pro komunikaci je vyřízená, nebrat doslovně, pojem API aby zde byl mnohem dříve než z něho web stihl udělat buzzword, konec konců už i DOS měl své API v podobě přerušení int 21h, služby BIOSu jsou API, systémová volání v moderních systémech nejsou nic jiného než opět API.

REST (Representational state transfer)

REST představuje jeden z konceptů (architektur) je vytvořit rozhraní, je postavená nad volání metod protokolem HTTP, datově orientované a masivně používané, oblíbené.

Malý pomocník, taky pomocník ...

Advanced REST client pro Google Chrome

ARC je aplikaci běžící uvnitř prohlížeče Chrome a dovoluje pohodlné odzkoušení API rozhraní, dříve jsme měli postup otestovat funkčnost a chování API pomocí jednoduchého řádkového klienta curl (a je stále dobré to umět, rozumět, lze to scriptovat a průběžně tak testovat) ještě předtím než zavoláte composer, požádáte ho o Guzzle a začnete “čarovat”.

“Absolutní výcuc” vyšel před lety na serveru Codingpedia.org.
http://www.codingpedia.org/ama/how-to-test-a-rest-api-from-command-line-with-curl/

Proč dát ARC šanci ?

  • GUI rozhraní, úplná “klikačka”, jednoduchost
  • Úplná kontrola na HTTP hlavičkou, lze upravit “cokoliv” (raw)
  • metody GET/POST/PUT/DELETE/HEAD/CONNECT/vlastní
  • Podpora pro WebSocket
  • Integrace s Google Drive
  • Import/export dat
  • Triviální instalace, okamžitá použitelnost

Užívejte moudře, děkujeme za pozornost.
MOJEservery.cz

api-rest-client-screen-2016-1

api-rest-client-screen-2016-2

api-rest-client-screen-2016-3

api-rest-client-screen-2016-4

To nejlepší z InstallFest 2016

To nejlepší z InstallFest 2016


Jako vždy podařená akce, zajímavý obsah, lidi, dobrá nálada, velké poděkování krom přednášejících patří organizátorům a partnerům za podporu této akce. Děkujeme.

Menší osobní výběr přednášek z Installfest 2016 toho nej z letošního ročníku akce, znovu opakuji osobní.

Celý kompletní program, slidy, video zde.
http://installfest.cz/if16/program
http://installfest.cz/if16/video

HaveAPI: vytvořte si API k čemukoliv (Jakub Skokan, Pavel Šnajdr)

Knot Resolver (Ondřej Surý)

Softwarově definované rádio (Jan Hrach)

Kontejnery != Docker (Václav Pavlín)

Buildsystemy (Tomáš Chvátal)

Arduino a ESP8266 (Petr Stehlík)

Buildíme Fedoru pro Raspberry Pi po hackersku (Ľubomír Rintel, Richard Marko)

ELK – sežere Vaše logy (Věroš Kaplan)

DNSSEC na vlastní doméně snadno a rychle (Ondřej Caletka)

Monitorování a bezpečnostní analýza v počítačové síti (Tomáš Čejka)

Linux mini-howto: Jak rychle smazat všechny tabulky v MySQL databázi

Linux mini-howto?
Krátce o nástrojích ze života sysadmina.

Databáze MySQL/MariaDB je důvěrně známá a napříč opensource světem široce používaná, obsahuje dva jednoduché SQL příkazy DROP TABLE a DROP DATABASE pro smázení tabulky či celé db.

mini-howto-mysql-delete-all-tables-blog-headerBohužel/bohudík neexistuje žadný příkaz “DROP ALL TABLES” ve smyslu smaž všechny tabulky v aktuální db.

Když už narazíte na “zkryplený” návrh celé DB, kde si původní autor dohání potřebu řádků a relací množstvím a tabulek a jejich jméno používá jako klíč je na čase po notné dávce relaxační hudby vymyslet jak smazat těch 1146 tabulek, jasně můžete udělat drop databases a pak create database, ale třeba to zrovna takto nechcete/nemůžete.

Varianta 1. (ktéra se mi vůbec nelíbí zápisem, ale je elegantní)

SET FOREIGN_KEY_CHECKS = 0; 
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
  FROM information_schema.tables 
  WHERE table_schema = 'database_name'; 

SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1; 

Varianta 2. (aneb plivneme si postaru unixovsky do dlaní)

# mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

Hotovo! Užívejte moudře a díky za pozornost.

František Havel, MOJEservery.cz

Spuštěn nový web, www.perfectdayplana.cz – Půjčovna svatebních a společenských šatů Planá

Realizováno,

pro našeho nového zákazníka PerfectDay – Půjčovna svatebních a společenských šatu Planá vytvořena www prezentace, nové komplexní stránky nabízejí veškeré aspekty moderního webu včetně optimalizace zobrazení pro mobilní zařízení (chýtré telefony, tablety), snadnou editaci obsahu, integrovanou fotogalerii, optimalizaci pro vyhledavače, sitemap, strukturovaný obsah a integraci sociálních sítí a google maps.

Jádro webu je postavené na nejrozšířenějším redakční systému na světě → WordPress poslední generace s podporou automatických bezpečnostní aktualizací, obalené základní sadou prověřených pluginů a na míru upravenou šablonou, díky systému WordPress umožňuje web do budoucna bohaté možnosti rozšíření o novou funkcionalitu a hlavně nehrozí případ vendor-locku (uzamčení zákazníka na konkrétního dodavatele) v případě nasazení proprietárního redakčního systému (když se zákazní rozhodne odejít, vemu svůj web a najde si někoho s tisíců vývojárů v ČR pro WordPress).

Poslední krokem k nasazení byla implementace emailů pro komunikaci se zákazníkem na vlastní doméně, následné zaškolení pracovníku pro obsluhu webu,  práce s redakčním systémem je snadná a přímočará, práce s galerií je díky podpoře štítků velmi jednoduchá, díky systému oprávnění nehrozí chýbné nastavení obsluhou, automatické verzování dokumentů nabízí možnost vrátit se k původní verzi při neopatrné úpravě.

Práce se zákazníkem byla velmi inspirující i pro nás, tolik energie, vlastních nápadu a chuť dělat věci perfektně se odráží v preciznosti celého nápadu záložit půjčovnu svatebních šatů a společenských šatů, děkujeme a držíme palce, těšíme se na další spolupráce.

Využijte služeb PerfectDay Planá, nebudete zklamáni!

http://www.perfectdayplana.cz

PerfectDay – Půjčovna svatebních a společenských šatů Planá

PerfectDay Planá - www.perfectdayplana.cz
PerfectDay Planá – www.perfectdayplana.cz

Děkujeme za příležitost a těšíme se na další spolupráci. MOJEservery.cz.

Nebojte se SQLite!

SQLite je transakční databázových systém, s nulovou konfigurací, bez serverové části, jednoduchý, kompaktní, lehký design, postavený nad souborovým systémem respektive souborem.

SQLiteLogo3

SQLite je velmi populární, né vždy je totiž nutné a hlavně možné nasadit plnohodnotný klient-server SQL server (Mariandb, Postgres) ale mít po ruce možnost a výhody sql nad souborem se často hodí (např. i v systému Android).

Ve své podstatě jde o implementaci relačního databázového systému a standardu SQL-92 realizovaného v jazyce C (mimochodem zajímavě napsaná knihovna s implementací objektů pomocí struktur, pointerů).

Architektura SQLite z francouzské wikipedie
Architektura SQLite z francouzské wikipedie

Velmi často se používá SQLite v jazyce Perl přes knihovnu DBI, ukažme si základní snippet ve kterém bude vše co je potřeba pro práci s touto databází.

  • připojení /connect
  • vytvoření tabulky /create
  • vložení záznamu / insert
  • vyhledání záznamu / search
  • úprava záznamu / update
  • smazání záznamu / delete

Instalace:

Debian, Ubuntu

root@havel-machine:~# apt-get install sqlite3 libdbd-sqlite3-perl

CentOS, Fedora or RHEL

root@havel-machine:~# yum install sqlite perl-DBD-SQLite

 

#!/usr/bin/perl
 
use DBI;
use strict;
 
my $driver   = "SQLite";
my $db_name = "sqlite.db";
my $dbd = "DBI:$driver:dbname=$db_name";
 
# sqlite nepoužívý jméno a heslo
my $username = "";
my $password = "";
 
# vytvoříme a připojíme se db
# zároveň dojte k vytvoření souboru databáze sqlite.db
my $dbh = DBI->connect($dbd, $username, $password, { RaiseError => 1 }) or die $DBI::errstr;
 
# vytvoříme tabulku
my $stmt = qq(CREATE TABLE IF NOT EXISTS NETWORK
             (ID INTEGER PRIMARY KEY     AUTOINCREMENT,
              HOSTNAME       TEXT    NOT NULL,
              OS             CHAR(50),
              CPULOAD        REAL););

# provedeme dotaz
my $ret = $dbh->do($stmt);

if($ret < 0) { print STDERR $DBI::errstr; }
else { print STDERR "Tabulka vytvořena\n"; }

# vložíme řádky do tabulky
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,OS,CPULOAD) 
           VALUES ('linux-01', 'Debian 8', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
 
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,OS,CPULOAD)
           VALUES ('linux-02', 'CentOS 7', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
 
$stmt = qq(INSERT INTO NETWORK (HOSTNAME,OS,CPULOAD)
           VALUES ('windows-01', 'Windows Server 2012', 0.0));
$ret = $dbh->do($stmt) or die $DBI::errstr;
 
# získání dat z tabulky a výpis
$stmt = qq(SELECT id, hostname, os, cpuload from NETWORK;);

my $obj = $dbh->prepare($stmt);
$ret = $obj->execute() or die $DBI::errstr;
 
if($ret < 0) { print STDERR $DBI::errstr; } while(my @row = $obj->fetchrow_array()) {
      print "ID: ". $row[0] . "\n";
      print "HOSTNAME: ". $row[1] ."\n";
      print "OS: ". $row[2] ."\n";
      print "CPULOAD: ". $row[3] ."\n\n";
}
 
# změna záznamu
$stmt = qq(UPDATE NETWORK set CPULOAD = 50 where OS='CentOS 7';);

$ret = $dbh->do($stmt) or die $DBI::errstr;
 
if( $ret < 0 ) { print STDERR $DBI::errstr; }
else { print STDERR "Aktualizováno $ret řádků\n"; }

# smazání
$stmt = qq(DELETE from NETWORK where ID=2;);
$ret = $dbh->do($stmt) or die $DBI::errstr;
 
if($ret < 0) { print STDERR $DBI::errstr; }
else { print STDERR "Smazáno $ret řádků\n"; }

# Odpojení databáze
$dbh->disconnect();

 

Jak je vidět z příkladu použití je skutečně jednoduché a přímočaré, nebojte se ho vyzkoušet ve svých projektech, mnoho lidí do startu špatně odhadne požadavky a SQLite je tím pádem neprávem ignorováno jako něco podřadného, přejít na “vyšší” databáze z SQLite je triviální.

Knihovny (binding) existuje pro celou řadu programovacích jazyků kromě  uvedeného Perl, např. C/C++, Python, Lua, PHP, ale např. i Delphi a další.

SQLite není okrajový zapadlý projekt, je integrován přímo do systému Android pro uložení persistentních dat, používá ho iPhone nebo společnost Airbus ve svém software či firma Adobe, Bosh, Dropbox. (https://www.sqlite.org/famous.html)

SQLite používám rád, přemýšlejte o něm.

https://www.sqlite.org

František Havel