駆け出しエンジニアです。
わからない用語だらけのため、備忘録を残しておきます。
マイクロサービス(マイクロサービス アーキテクチャ)
複数の規模の小さなサービスを組み合わせてひとつの大きなアプリケーションを構成する、ソフトウェア開発の技法のひとつ。
従来は、「すべての機能がまとまったひとつの大きな塊」としてソフトウェアを設計することが多かったのに対し、マイクロサービスは「まず機能を分解していき小さなサービスをつくる。それらを組み合わることでひとつの大きなソフトウェアを構成する。」という考え方。
ひとつひとつのサービスは小さいだけでなく、自らの持つ役割に専念して、自律的に機能するという点もマイクロサービスに欠かせない要素。
具体的には、個々のサービスはできるだけシンプルにすること、そして複数のサービスがひとつのOSやハードウェアの上で動かないようにすることが重要。
API gateway
APIゲートウェイとは、APIの管理や実行を容易にするしくみのこと。
まずAPIとは、ソフトウェアやアプリケーションなどの一部を外部に公開することにより、第三者(私達)が開発したソフトウェアと、機能を共有できるようにしてくれるもののこと。
APIゲートウェイはクライアントから受け取ったリクエストを、それぞれのマイクロサービスにルーティングする。
通常のマイクロサービス・アーキテクチャの場合、クライアントとそれぞれのAPIは個別に通信を行うことになる。
例えば、1つのWebサービスに「決済サービス」「ショッピングカート」「メール機能」「レコメンド機能」といった複数のAPIが使われている場合、クライアントはそれぞれのAPIと個別に通信することになりこの例でいえば計4回の通信が発生する。
APIゲートウェイを使うと、クライアントはAPIゲートウェイと通信を行い、APIゲートウェイがそれぞれのマイクロサービスと通信するため、クライアントはマイクロサービスを知る必要がない。
トラフィック
トラフィックとは、交通(量)、通行(量)、往来などの意味を持つ英単語。
ITや通信の分野では、通信回線やネットワーク上で送受信される信号やデータのことや、その量や密度のことをトラフィックということが多い。
Webの分野では、WebサーバやWebサイトへの外部からの接続要求数、アクセス数、送信データ量などのことや、サイトやページの間を行き来する閲覧者の流れのことをトラフィックということが多い。
エンドポイント
ITの分野では、通信ネットワークの末端に接続された機器や端末、あるいは利用者が直に触れて操作する機器などを指すことが多い。
特に、セキュリティの分野でネットワークの中継機器などと対比して、利用者が操作するパソコンやスマートフォンなどを対象とした保護施策を「エンドポイントセキュリティ」などという。
電子機器内部の構成で、回路や配線の終端の端子やコネクタ、また、それらに接続された装置などのことをエンドポイントということがある。
ソフトウェアの分野では、あるプログラムがAPIなどの形で外部に公開している機能の所在を示す識別名やネットワーク上のアドレス、URL/URIなどのことをエンドポイントということがある。
レイテンシ
データの転送要求などのリクエストを発してから、リクエストの結果が返ってくるまでにかかる遅延時間のこと。
例えばメモリやハードディスクなどの記憶装置からデータを読み出す場合には、命令を送ってから記憶装置におけるデータが記録された箇所までアクセスする時間と、記憶装置から読み出されたデータが命令の結果として返ってくるまで、わずかながら遅延時間が生じる。
また、コンピュータのCPUとSDRAMなどのメモリとの間ではクロック周波数が異なるため、処理にレイテンシが生じやすい。この場合の遅延は特にメモリレイテンシなどと呼ばれることがある。
一般的に、レイテンシの値が小さければ小さいほど、コンピュータのデータアクセスに関する性能は高いということになる。
コードフリーズ
「パソコンがフリーズした」のフリーズと同じ単語 freeze だが、
コードフリーズはある状況で意図的に行うフリーズを指す。
コードフリーズ=主にソフト開発の終盤で「プログラムの追加・変更をストップすること」。
ドメインチーム体制
チーム単位で、ある程度担当領域を決めてしまって取り組むチーム体制のこと。
フルサイクルエンジニア(フルサイクル開発者)
フルサイクルエンジニアという言葉は、2018年5月に書かれた
Full Cycle Developers at Netflix — Operate What You Build
という記事にある "full cycle developer" に由来している。
Netflixにおけるフルサイクルとは、開発チームが運用とサポートを含めたサービスライフサイクルの一連のタスクをすべてを担い、開発を回すことを意味する。
▼参考にさせていただいた記事
DDD(Domain Driven Design(ドメイン駆動設計))
1.開発を進める上で実際の業務をきちんと理解せずに作ると、リリースしても全然使われずに不評なものができてしまう。
2.メンテナンス性が悪く整理されていないプログラムを書いたら、後から修正するのが大変になってしまう。
DDDはこのような問題を解決するために生まれたもので、
実際にあるドメイン(専門領域)をどのように実装に落とし込み、開発に変換して行くかを考えた手法の一つを指す。
▼参考にさせていただいた記事
本日のアウトプットは以上です。