トップページに戻る

AUTHOR: schwarz1009
TITLE: nginx
BASENAME: 2021/02/02/150017
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 0
DATE: 02/02/2021 15:00:17
CATEGORY: ネットワーク
CATEGORY: プログラミング
CATEGORY: データベース

nginx

Apacheなどのプロセス・スレッドベースのサーバでは、
接続の数だけプロセスやスレッドを作成する。
一つ一つの接続のリソース消費は微々たるものでも、
ものすごく多い接続になるとメモリを食う。
特に、1万接続ぐらいから、
不安定になる(C10K問題)が知られている。
これに対してnginxやNode.jsでは、
イベント駆動と非同期処理を上手く使う、
ノンブロッキングI/Oを採用し、
ひとつのプロセスだけで複数の接続を処理する。
イベント駆動で、必要になった時点で、
その接続に必要な処理を行う。
このようにすることで、
メモリの消費を抑えることができ、
ものすごくたくさんの接続でも
安定してサービスを提供することができる。

デザインパターンの概要

デザインパターンの概要について言えるのは、
クラスをどのように設計するか、ということです。
ある機能を実装する上での、
内部のクラス設計、
たとえば、抽象的なテンプレートやAPIから実装したり、
段階的に基礎から構築したり、
受付や代理人にやらせたり、
通知を行ったりします。
同時に、ある機能を実現する上での、
スマートなクラス設計を行います。
要素と入れ物を同一視したり、
要素に飾りをたくさんつけたり、
あるいは状態やミニ言語でクラス設計を表現します。
ほかにも、インスタンスがひとつであることを保証したり、
訪問者を作ったり、責任をたらい回しにしたり、
あるいは、機能のクラスと実装のクラスを分けたりします。
マルチスレッドにおいては、
スレッドの待機や排他制御を表現します。
詳しくはJava言語で学ぶデザインパターン入門が参考になります。

ITインフラ用語

レプリケーションは、データの複製を作ること。
ジャーナリングは、ログや記録を取ること。
ポーリングは、一定時間ごとに確認すること。
割り込みは、処理の途中で別の処理が入ること。
全体のスループットが悪い時、
もっとも効率の悪い部分(ボトルの首)が、
全体の円滑な流れを全て制限してしまうことを、
ボトルネックと呼ぶ。
冗長化とは、ある部分が故障しても別の部分を使うことで、
耐障害性をはかる仕組み。
この時、サーバがダウンしても別のサーバが代わりを務めることを、
フェイルオーバと呼ぶ。
詳しくは絵で見てわかるITインフラの仕組み (DB SELECTION)が参考になります。

PHPのセキュリティ

PHPのセキュリティに言えるのは、
「絶対に任意の悪意あるコードを実行させてはならない」ということ。
JavaScriptを挿入されて実行されたり、
別のサイトからコードを実行、
あるいはセッションを乗っとられたり、
SQLを挿入されたり、
コマンドを実行されたりするのに共通するのは、
任意の悪意あるコードを実行されるということ。
実際には、セッションハイジャックや
パスやエラーから情報が流出するなど、
ほかにもセキュリティ攻撃はある。
しかしながら、任意の悪意あるコードの実行を防ぐなら、
HTMLタグのエスケープ、トークン、
SQLでのプレースホルダなど、
対策における「本質」を知った上での対策ができる。

データベース用語

トランザクションとは、不可分の処理のことで、
データベースではトランザクションによってデータ処理を行い、
失敗すればロールバックする。
このようにすることで、データの矛盾のない状態を保つ。
データが破損すれば、
定期的なバックアップと、
詳細な記録であるジャーナルファイルから、
ロールフォワードすることで復旧させる。
複数のユーザーから同時に処理がされる場合、
排他制御を行うことで、データの破損を防ぐ。
データベースの定義は、スキーマで行われる。
データベースにおけるテーブルの、
列をカラム、行をレコードと呼ぶ。
リレーショナルデータベースでは、
テーブルを選択、射影、結合により、
もとのテーブルから自動的にテーブルを作成する。
これをリレーションと呼ぶ。
また、テーブルとは別にユーザーに見せるために、
ビューを作成できる。
ビューの実体はSQL文。
テーブルには、その行を一意に特定できる主キーや、
結合のために使う別のテーブルの主キーを指定する外部キーなどがある。
制約は、たとえば必ず一意に特定できるように、
重複した値を許さない一意性制約、
ヌル値を排除する非ヌル制約、
一意性制約と非ヌル制約を組み合わせた主キー制約、
外部キーとして矛盾しないようにする外部キー制約がある。
また、その行を一意に特定できるキーの列あるいは列の組のことを候補キーと呼ぶ。
たとえば、市町村のテーブルがあり、
都道府県名と市町村名の組み合わせで、
行を一意に特定できるなら、
この2つの組が候補キーとなる。
テーブルの正規化は、
データの重複や矛盾を排除するために、
候補キーなどの考え方を用いて、
テーブルを正しい規則に分割すること。
非正規形、第一正規形、第二正規形、第三正規形がある。
E-R図は、実体と関連を表した図で、
対応関係(カーディナリティ)の記述には、
一対一、一対多、多対一、多対多の
4種類のリレーションシップがある。
たとえば、掲示板に対してたくさんのコメントがつくような場合、
一対多のリレーションシップがあると言う。
Railsなどでは、has_many(たくさんの子がある)や
belongs_to(ひとつに所属する)などとも呼ばれる。
(「徹底攻略 応用情報技術者教科書 平成30年度」と「平成18年度 イメージ&クレバー方式でよくわかる栢木先生の基本情報技術者教室 (情報処理技術者試験)」と「真図解 基本情報技術者 2006年春―初歩から学べて合格できる」と放送大学「情報学へのとびら ('16)」を参考にしています。)