sql >> Databáze >  >> NoSQL >> Redis

Ukládání objektů JSON do mezipaměti na straně serveru

Můžete použít memcached, ale opět by vás každý zasáhl do databázového serveru. Ve vašem případě říkáte, že výsledky dotazu jsou jaksi perzistentní takže by mohlo mít větší smysl ukládat odpovědi JSON z vaší webové služby do mezipaměti.

To lze provést pomocí Reverse Proxy s vestavěnou mezipamětí. Myslím, že příklad by vám mohl nejvíce pomoci, jak to děláme s Jetty (Java) a NGINX:

V našem nastavení máme instanci Jetty (Java) obsluhující API pro naše mobilní klienty. Rozhraní API naslouchá na localhost:8080/api a vrací výsledky JSON načtené z některých dotazů v místní databázi Mysql.

V tuto chvíli bychom mohli poskytovat API přímo našim klientům, ale zde přichází Reverse Proxy:

Před API sedí webový server NGINX naslouchající od 0.0.0.0:80/ (všude, port 80) Když se mobilní klient připojí k 0.0.0.0:80/api, vestavěný Reverse Proxy se pokusí načíst přesný řetězec dotazu z je to mezipaměť. Pokud se to nezdaří, načte jej z localhost:8080/api, vloží jej do své mezipaměti a poskytne novou hodnotu nalezenou v mezipaměti.

Výhody:

  • Můžete použít další vychytávky NGINX:automatickou kompresi GZIP souborů JSON uložených v mezipaměti
  • Ukončení koncového bodu SSL v NGINX.
  • Zaměstnanci NGINX pro vás mohou mít prospěch, když máte mnohem více připojení a všechna vyžadují data z mezipaměti.
  • Můžete konsolidovat koncové body svých služeb

Přemýšlejte o zneplatnění mezipaměti:

Musíte myslet na zneplatnění mezipaměti. Můžete říct NGINX, aby si podržel svou mezipaměť, řekněme, týden pro všechny požadavky HTTP 200 pro localhost:8080/api nebo 1 minutu pro všechny ostatní stavové kódy HTTP. Pokud ale přijde čas, kdy chcete aktualizovat API za méně než týden, mezipaměť je neplatná, takže ji musíte nějak smazat nebo zkrátit dobu mezipaměti na hodinu nebo den (takže většina lidí narazí na mezipaměti).

To je to, co děláme:Rozhodli jsme se vymazat mezipaměť, když je špinavá. Na serveru běží další JOB, který naslouchá události Update-API spouštěné přes Puppet. JOB se za nás postará o vymazání mezipaměti NGINX.

Dalším nápadem by bylo přidat funkci vymazání mezipaměti do vaší webové služby. Důvod, proč jsme se rozhodli proti tomuto řešení, je:Webová služba by musela vědět, že běží za reverzním proxy, což narušuje oddělení obav. Ale řekl bych, že záleží na tom, co plánujete.

Další věc, díky které bude vaše webová služba správná by bylo poskytovat správné ETAG a hlavičky s vypršením platnosti mezipaměti s každým souborem JSON. Opět jsme to neudělali, protože máme jednu velkou událost aktualizace namísto malých pro každý soubor.

Postranní poznámky:

  • Nemusíte používat NGINX, ale jeho konfigurace je opravdu snadná
  • NGINX a Apache mají podporu SSL
  • Existuje také slavný Reverse Proxy (https://www.varnish-cache.org), ale pokud vím, nedělá SSL (zatím?)

Pokud byste tedy použili Varnish před svou webovou službou + SSL, použili byste konfiguraci jako:NGINX -> Varnish -> Web Service.

Reference:- NGINX server:http://nginx.com- Varnish Reverse Proxy:https://www.varnish-cache.org- Puppet IT Automation:https://puppetlabs.com- NGINX reverzní proxy návod:http:/ /www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy/ http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html




  1. Redis + Node.js – jak získám hodnoty

  2. Architektura pro bezpečnost:Průvodce pro MongoDB

  3. hdel uvnitř hget block nodejs redis

  4. Redis::CommandError:ERR Klient odeslal AUTH, ale není nastaveno žádné heslo