2018/06/23 このエントリーをはてなブックマークに追加 はてなブックマーク - nginxについて調べた(い) その2。リバースプロキシとロードバランシング

nginxについて調べた(い) その2。リバースプロキシとロードバランシング


前回に引き続き。


あえて、調べ直す。

リバースプロキシ(英: Reverse proxy)または逆プロキシは、
特定のサーバへの要求を必ず経由するように設置されたプロキシサーバ。
一般的なプロキシとは異なり不特定多数のサーバを対象としない。
リバースプロキシは、不特定多数のクライアントから寄せられる要求に対して、
応答を肩代わりすることにより特定のサーバの負担を軽減したり、
アクセスを制限することにより特定のサーバのセキュリティを高めたりする目的に用いられる。

wikipediaの引用。
https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%90%E3%83%BC%E3%82%B9%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7

分かるんだけどなんかしっくりこない。
何がリバース?

内部ネットワークと広域ネットワークとの接点に置かれ、
外部から内部へのアクセスを代行する。通常のプロキシ(代理サーバー)の「内部から外部へ」と反対であることが「リバース」の由来。

http://www.dnp.co.jp/artscape/reference/archive_words/detail/rvrs-proxy.html

なるほど、通常のプロキシとは逆方向だよということか。


HTTP、TCP、UDP のロードバランシングが出来るらしい。

  • Layer 7 request routing using URI, cookie, args, and more
    レイヤ7はOSI参照モデルのアプリケーション層ですね。URIやクッキーとかを使ってルーティングする機能がある。

  • Session persistence based on cookies *
    クッキーでセッションを永続化する機能がある。

  • Active health checks on status code and response body *
    ステータスとレスポンスボティのヘルスチェック機能がある。

  • Service discovery using DNS *
    DNSを使ってサービス検出する機能がある。サービスディスカバリーってよく聞く言葉だな

ロードバランシングには5種類の方式が使えるらしい。
ラウンドロビン、最小接続数、ハッシュ、IPハッシュ(NGINX Plusのみ)、Least Time(NGINX Plusのみ)。NGINX Plusというのはnginxの商用版らしい。

  • Round‑Robin (the default) – Requests are distributed in order across the list of servers.
  • Least Connections – Each request is sent to the server with the lowest number of active connections, taking into consideration the weights assigned to the servers.
  • Hash – Requests are distributed based on a user‑defined key such as the client IP address or URL. NGINX Plus can optionally apply a consistent hash to minimize redistribution of loads if the set of upstream servers changes.
  • IP Hash (HTTP only) – Requests are distributed based on the first three octets of the client IP address.
    NGINX Plus has an additional algorithm:
  • Least Time – Requests are sent to upstream servers with the fastest response times and fewest active connections.

2018/05/29 このエントリーをはてなブックマークに追加 はてなブックマーク - nginxについて調べた(い) その1。概要を見る

nginxについて調べた(い) その1。概要を見る



なんとなく、調べたいので調べます。


enのwikipedia見てみましょう。
https://en.wikipedia.org/wiki/Nginx

The software was created by Igor Sysoev and first publicly released in 2004.

2004年に公式にリリースされたらしいです。


公式サイトを見て見ましょう。
https://nginx.org/en/

以下、引用。

nginx [engine x] is an HTTP and reverse proxy server, 
a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.
For a long time, it has been running 
on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and 
Rambler. According to Netcraft, nginx served or proxied 23.76% busiest sites in March 2018. 
Here are some of the success stories: Dropbox, Netflix, Wordpress.com, FastMail.FM.
  • nginxはHTTPサーバーであり
  • リバースプロキシのサーバーであり
  • TCP / UDPのプロキシサーバーであり
  • Yandex、Mail.Ru、VK、Ramblerとかロシアのサイトでよく使われていて
  • Dropbox、Netflix、Wordpress.com、FastMail.FMとかでも使われている

なるほど。


ざっくり、web serverでwikipediaで見てみる。
https://en.wikipedia.org/wiki/Web_server

と、この情報にたどり着いた
https://w3techs.com/technologies/overview/web_server/all

October 2017
Below are the latest statistics  of the market share of  all sites of the top web servers on 
the Internet by W3Techs Usage of
Web Servers for Websites.

Product Vendor  Percent
Apache  Apache  48.5%
nginx   NGINX, Inc. 35.4%
IIS Microsoft   10.8%
LiteSpeed Web Server    LiteSpeed Technologies  2.9%
GWS Google  1.1%
All other web servers are used byless than1% of the websites.

Apache強いな。。ざっくりApacheとnginxだけ気にしとけば良いか…(雑)
IISは出くわしたら気にするレベルで良いだろう。。。うん。。
ただ、この情報が統計的にどの程度有意なのかわからない。

ということで、Apacheも知っておきたいところ。


この記事がよくまとまっているように思う。勉強になった。
https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations

Apacheよりnginxの方が後発ということもあり優れている部分もあるが、一方でApacheの方が優れている部分もありそう。例えば、Apacheはモジュールの動的ロードが出来るが、nginxは出来ないのだそう。これは相性によってどちらを選ぶかということも考えたりとかがある気がする。
また、nginxをリバースプロキシにして、併用するパターンもよくあると。
さらっと読んだだけでは理解が足りないのでこの記事を何回か読み直したい。


先ほど書いたように、ざっくりは

  • nginxはHTTPサーバー
  • リバースプロキシのサーバー
  • TCP / UDPのプロキシサーバー

ただ、機能もっと色々あった気がする。ので、調べると
https://www.nginx.com/products/nginx/#features

これが出てくる。
なんかこっちのサイトの方が今風だ。

  • Load balancer
  • Content cache
  • Web server
  • Security controls
  • Dynamic modules
  • Monitoring
  • High availability (HA) *
  • Kubernetes Ingress controller
  • Programmability
  • Streaming media

などが書いてある。機能というかfeatureである。


ざっくり追いかけてみましたが、調べきれないので、おそらく続きます。



2018/04/13 このエントリーをはてなブックマークに追加 はてなブックマーク - ベタープログラマを読みつつの何かメモ

ベタープログラマを読みつつの何かメモ



まだ読んでる途中なんですが、書いていきます。
目についたところをバラバラに読んでます。
また、読み進めたら追記するかも(しないかも)



ベタープログラマは良い本である。
内容に共感出来て、その瞬間何故かニヤける感じ。
それと同時に、自分自身を省みて申し訳なくなる。ああ、すんません。

読んでいると、irofさんとかが喋りそうな内容だなと思う。
俗っぽい言葉で言うとエモいのだが、
プログラマとしてかくあるべきと言うのを思い出させてくれるというか、
“プログラマとしての正しさ”とか”プログラマとしての向き合い方”とかを改めて思い直させてくれるという感じ。

初心にかえるにはもってこいであるし、正しい方向へ向かえる本だと思う。もちろん知らなかった知識の発見や、新しい方法も読者によっては含まれていると思う。


この本はとことん、プロダクト、特にコードを中心にして物事を論じている。プログラマーたるものコードが中心だというのは全く正しい。
しかも、綺麗なコードを書く方法よりも、”今存在している問題をはらんだコードをどう解決するか”とか”いつリファクタリングをするか、どこまでリファクタリングすべきか”など「書き方」よりも「判断の仕方」が書いてあったりするのでよい。


全てを読んでいないし、飛び飛びで読んでいるのですがメモします。

  • 6章航路を航行する
    ソフトウェア考古学、いい言葉

  • 7章汚物の中で転げ回る
    大事

  • 24章学びを愛して生きる
    これが出来なくなったら辛いし、逆にこれが出来て入ればなんとかできる気がする

  • 27章停滞を避ける
    気をつけたい

  • 28章倫理的なプログラマ
    気をつけたい

  • 29章言語への愛
    わかる

  • 30章プログラマの姿勢
    そっちか

  • 33章今度こそ分かった
    ほんますんません