Skip to content

Návrh architektury OKCZ 3.0

cosmo-cz edited this page Aug 7, 2014 · 2 revisions

Table of Contents

Návrh architektury

Cíl

Cílem je rozdělit aplikaci obalkyknih.cz na frontend, který je jen pro čtení (možná kromě nového api pro vkládání) a backend sloužící pro import nových obálek z jednotlivých zdrojů udržující hlavní datový model pro deduplikaci, provázání jednotlivých entit a do budoucna možnost doporučování.

Frontend bude nově implementován pomocí moderních nosql technologií umožňující případný provoz v cloudu a to i bez spojení s backendem (na způsob CDN - Content Delivery Network, ale bez potřeby geografické optimalizace).

Jako backend bude sloužit současné řešení nad aplikačním serverem Catalyst (Perl MVC web application framework) rozšířený o (pravděpodobně dávkové) aktualizace frontendu.

Frontend

Popis

Frontend poskytne vylepšené api pro poskytnutí metadat na základě dotazu na konkrétní záznamy (minimálně pomocí identifikátorů podporovaných současným řešením). Dotaz i odpověď bude inspirován api obalkyknih.cz 2.0 s důrazem na identifikaci kontextu jednotlivých vyhledaných záznamů pro možnost pozdějšího doporučování.

Dále poskytne api včetně logování a kontroly práv na základě referer hlavičky dotazu.

  • Spolu s obálkami bude zasílána http hlavička etag pro podporu kešování prohlížečem
  • Frontend se bude plnit 'líně' na základě dotazu na metadata, to umožní snadné prototypování, nasazení i výměnu frontendu:
    1. Zaloguje dotaz, pokud to není jen dotaz prohlížeče na ověření platnosti jeho keše
    2. Pokud zná odpověď na všechny záznamy, odpoví
    3. Pokud nezná, zeptá se backendu a uloží si vrácená metadata, stáhne si obálky a případné náhledy na obsahy a odpoví
    4. Pokud nějaký záznam backend nezná, frontend si to poznačí, aby se backendu neptal pořád dokola ale s nějakým časovým odstupem, protože backend se tento záznam pokusí stáhnout ze svých zdrojů v plánovaném čase (současné řešení obalkyknih.cz)
    5. Pokud je backend nedostupný, frontend si to poznačí a dotazy na backend nebude provádět dokud neuplyne nějaký delší timeout na backend (nebudou se ukládat do nějaké fronty)
  • Dále poskytne api pro zadání komentáře a hodnocení pod přihlašovacími údaji organizace/knihovny, tedy přes jejich server, nikoli prohlížeč (? OpenID ?)
  • Poskytne api pro nahrání / nahrazení obálky, tuto zaloguje a pokusí se rovnou nahrát na backend?

Datový model

Ukládány jsou jednotlivé dokumenty v NoSQL databázi. Jména jejich kolekcí prozatím odpovídají analogickým tabulkám v datovém modelu backendu:

  • book – kompozitni denormalizovaný dokument včetně všech identifikátorů, vracených metadat, review, rating, ... (budoucí normalizace jen z případných výkonnostních důvodů)
  • fileblob – obálka/náhled toc včetně etag, provázán s dokumentem book
  • library – řeší práva podle referer hlavičky
  • log – logování
Bude potřeba rozhodnout na základě upřesněného zadání, jestli se skeny z TOC budou nahrávat na frontend nebo backend, podle toho se doplní datový model.

Backend

Backend pojede v kopii virtuálního serveru obalky2 na cbvk, současný kód bude potřeba doplnit:

  1. Periodicky se bude aktualizovat z ostrého serveru obalkyknih.cz (MZK)
  2. Periodicky bude stahovat nově nahrané / nahrazené obálky z frontendu
  3. Periodicky bude nahrávat přes api nebo zneplatňovat nahrazené obálky z jiných zdrojů (web obalkyknih.cz)
  4. Poskytne podporu pro počáteční dávkové (bulk) naplnění frontendu (není nutně potřeba, pouze optimalizace)
  5. Backend bude výhledově periodicky číst kontext dotazů a logy ukládané frontendem a ukládat je do svých datových struktur pro provázání souvisejících záznamů pro plánované doporučování.

Technické řešení

  • Aplikační server Node.js
  • Databáze MongoDB (kvůli relativně malé velikosti ukládaných obrázků pravděpodobně nebude využit GridFS)
    • pravděpodobné použití žurnálu pro bezpečnost zápisových operací
    • je potřeba zvážit, který konektor do databáze použít (nativní mongodb, mongojs nebo mongoose)
  • Postup vývoje:
    • vývoj prototypu lokálně
    • výkonnové testy na virtuálním serveru cbvk
    • deploy na PaaS řešení RedHat OpenShift v bezplatné verzi pro ověření možnosti běhu v clusteru / cloudu
  • Ostrý provoz na virtuálním serveru cbvk
    • frontend pojede v samostatném virtuálním serveru vedle virtuálního serveru pro backend (obalky2)

Zobrazení technického řešení

Clone this wiki locally