Open6

IPA システムアーキテクトの学習

yudegaeruyudegaeru

命令の実行順序

  • 命令読み出し
    • プロセッサが主記憶から命令コードを取得、プロセッサ内の命令レジスタに転送
  • 命令解析
    • プロセッサ内の命令デコーダが命令レジスタ内の命令コードを解析
  • 実行アドレス計算
    • オペランド(演算対象のデータ)が格納されている主記憶上のアドレスを計算
  • オペランド読み出し(オペランドフェッチ)
    • 主記憶からオペランドを取り出して、プロセッサ内のレジスタ(アキュムレータ)に転送する
      • ※アキュムレータはオペランドだけでなく演算結果も格納したりする
  • 命令実行
    • オペランドに対して命令を実行する
  • 結果格納
    • 結果を主記憶に格納する

主記憶がイベントストリームみたいになってて、そこにリクエスト情報が入っていてリクエストで処理したい内容のデータが一緒に入っていると想像するとイメージしやすい。

データキャッシュ:演算で用いたデータをしばらく再利用するため保持するプロセッサ内にあるメモリ
プログラムレジスタ:現在処理している命令の主記憶上のアドレスを記憶しているレジスタ

yudegaeruyudegaeru

プログラム割り込み

プログラム割り込みの流れ

同期的に行われるかは謎だけど少なくとも多分INTCまでは同期で行われるはず。INTCは割り込みが成功したかどうか知りたいと思うので。

参考:
INTCとか処理の流れの参考:https://www.cqpub.co.jp/interface/sample/200606/I0606147.pdf
CPU、メモリ(主記憶装置)の仕組み:https://katuhito.net/cpu_program/

割り込み要求の要因

内部割り込み 外部割り込み
プログラム割り込み SVC割り込み マシンチェック割り込み 入出力割り込み タイマ割り込み コンソール割り込み
プログラムでのゼロ割算、不正な命令実行 プログラムがOSのカーネル機能を使う命令 ハードウェアの障害発生 入出力装置の入出力の完了や中断を知らせる割り込み カウントダウンタイマの設定時間経過やインターバルタイマによって一定時間で生じる割り込み キーボードやマウスからの入力による割り込み

コンピュータの5大装置(入出力装置についてわからず調べた):https://www.kenschool.jp/blog/?p=5572
割り込みについて:https://www.momoyama-usagi.com/entry/info-calc-sys17

yudegaeruyudegaeru

マルチプロセッサの性能

下記の計算式でCPUをn台用いた時のマルチプロセッサの性能がわかるが、
※aはオーバヘッド

P = n / (1 + (n - 1) * a)

どれだけnを増やしても性能が 1/a を越えることはない。
これを「並列化に関するアムダールの法則」という。

n を増やしていっても 結果的にオーバヘッド分だけが処理時間として残る。

yudegaeruyudegaeru

ファイバチャネルについて

ファイバチャネルとは、複数クライアントからデータ共有や一元管理に使用するストレージ専用のネットワーク(SAN)の代表的なプロトコルである。

プロトコルという意味だとTCP/IPと同じだが、体型が異なっていて
TCP/IP: アプリケーション層(https/http etc)、トランスポート層(tcp/udp etc)、インターネット層(ip/icmp etc)、ネットワークインターフェース層(lan etc)
の4階層であるのに対して、
https://www.itmanage.co.jp/column/tcp-ip-protocol/
ファイバチャネルはFC0~FC4の5階層からなる。
よくわからないのでリンクだけはる。
https://ja.wikipedia.org/wiki/ファイバーチャネル

名前からも光ファイバを使用して接続することができる。
電気ケーブルからも繋げられる。

ストレージといってるのは補助記憶装置のことでディスクとかそういうものを指す。

SANとLANの違い
https://it-note.stylemap.co.jp/networks/what-is-a-san-benefits-and-use-cases/#:~:text=SANは専用ネットワークを,センターに適しています。

SAN(Storage Area Network)とLAN(Local Area Network)は、どちらもネットワークですが、その目的と接続するデバイスが異なります。

SANは主にストレージデバイス間での通信に特化したネットワークです。サーバーやワークステーションからストレージデバイスに高速で信頼性の高いアクセスを提供します。一方、LANは、コンピュータ、プリンタ、スキャナなどのさまざまなデバイスを相互に接続するネットワークです。主にデータ共有やアプリケーションへのアクセスに使用されます。

SANは専用ネットワークを使用するため、高速かつ高い可用性を備えています。一方、LANは共有ネットワークであり、他のトラフィックと帯域幅を共有するため、パフォーマンスが低下する可能性があります。用途としては、SANは大量のデータを高速に処理する必要がある大規模企業やデータセンターに適しています。

他に参考になりそうなもの。
https://community.fs.com/jp/article/what-is-a-lan-switch-and-how-does-it-work.html
https://www.dospara.co.jp/5info/cts_str_pc_fibre-channel.html?srsltid=AfmBOoqw8u1syyv10-zDet0fYIo3Ie0okV2ie4E65GkQopmLFPb_5FUz

yudegaeruyudegaeru

データベースのクラスタリング技術

クラスタリングとは?

データの クラスタ化とは、少ないIO処理でアクセスできるように、連続的にアクセスされるデータを近くに保存することを言います。データクラスタは、データベース チューニングにおいて、非常に重要な役割を果たします。
https://use-the-index-luke.com/ja/sql/clustering#:~:text=データの クラスタ化と,な役割を果たします。

サーバのクラスタ構成については、HAと負荷分散がある。
HAはActice/Stanbyの構成で、安定性・可用性の向上を目的とする。
負荷分散はロードバランサを使用して、処理を複数のサーバに分散してデータ処理の高性能・高速化を目的とする。
https://community.fs.com/jp/article/server-cluster-and-futanbunsan-ha.html

シェアードナッシングとシェアードエブリシングについて

下記で書いていたように複数マシンに分散させて処理させるのをシェアードナッシングと考えていたが、複数マシンがどこまでを指しているのかが正しく理解できていなかった。
サーバとそれが扱うストレージ(ディスク)も含めてマシンと定義して、それを分散させるってことね。互いのマシンが独立した処理ができるように。
データベースで言うとデータベースシャーディングがそれにあたるのか。
https://zenn.dev/link/comments/fbbc94dcddb985

下記はPostgreSQL Enterpriseの記事であるが、
https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/enterprisepostgres14sp1-scaleout-architecture/
シェアードエブリシング方式は下記のように共有ストレージ(ディスク)を複数データノード間で共有する。キャッシュ整合性が失われるとインターコネクトによってデータキャッシュ整合性を解決するらしい。
ただ不整合が生じるとここの調整が行われるのでボトルネックになることが多いらしい。

シェアードナッシング方式は下記のようにデータノードごとに異なるストレージ(ディスク)を持つ。
俗に言うシャーディングとかパーティションというやつで、ノードを拡張する時はパーティションの再配置が必要。
また、パーティションの設計もちゃんとしないといかんやつ。
シェアードエブリシングとは異なり、キャッシュ整合性の解決がないのでデータノード間が独立して動ける。

クラウド利用の互換性も考えて、可用性以外はシェアードナッシング方式に軍配が上がってる。
シェアードナッシング方式は可用性を考えて、データノードごとに冗長化する必要がある。
フェイルオーバ時は24時間止めちゃいけない系のサービスであればホットスタンバイにしておく必要がある。
RTO/RPOを元にそこは判断する。
ちなみに関係ないがAWSのDR戦略では「パイロットライトまたはウォームスタンバイ」が一番メリットとコストのバランスが取れているとのこと。
https://aws.amazon.com/jp/blogs/news/disaster-recovery-dr-architecture-on-aws-part-iii-pilot-light-and-warm-standby/
https://aws.amazon.com/jp/blogs/architecture/disaster-recovery-dr-architecture-on-aws-part-i-strategies-for-recovery-in-the-cloud/

yudegaeruyudegaeru

RPCとREST

あとで読む。gRPCは聞いたことあるのでそこと紐つけて理解する。

RPCとは?

RPC、つまりリモートプロシージャコールは、ネットワーク上の別のアドレス空間に存在するプロシージャ(または関数)をローカルのプロシージャのように呼び出すためのプロトコルです。これは、分散システムにおける通信とデータの交換を容易にするための重要な手段です。
https://lab.wallarm.com/what/grpc-と-rest-主要な-api-設計を比較し、どちらが最適かを判/?lang=ja

RPCは、クライアント-サーバーモデルを使用しています。クライアントはリモートサーバー上のプロシージャを呼び出し、その結果を受け取ります。このプロセスは以下のステップで行われます:
・クライアントがプロシージャの呼び出しを開始します。
・クライアントスタブ(クライアント側のRPCシステムの一部)がパラメータをマーシャリング(パッケージ化)します。
・パラメータがネットワークを介してサーバーに送信されます。
・サーバースタブがパラメータをアンマーシャリング(解凍)し、適切なプロシージャを呼び出します。
・プロシージャの結果がサーバースタブに返され、マーシャリングされます。
・結果がネットワークを介してクライアントに送信されます。
・クライアントスタブが結果をアンマーシャリングし、クライアントに返します。
https://lab.wallarm.com/what/grpc-と-rest-主要な-api-設計を比較し、どちらが最適かを判/?lang=ja

RPCには主に2つの種類があります:同期型と非同期型です。
同期型RPC:クライアントはリモートプロシージャが完了するまで待つ必要があります。これは、クライアントが結果を受け取る前に他のタスクを実行できないことを意味します。
非同期型RPC:クライアントはリモートプロシージャの完了を待たずに他のタスクを実行できます。結果は後で利用可能になります。
https://lab.wallarm.com/what/grpc-と-rest-主要な-api-設計を比較し、どちらが最適かを判/?lang=ja

RESTとは?

REST は、ソフトウェアコンポーネント間でデータを交換するための一連のルールを定義するソフトウェアアーキテクチャアプローチです。ウェブの標準通信プロトコルである HTTP に基づいています。RESTful API は、作成、読み取り、更新、削除操作のための POST、GET、PUT、DELETE などの HTTP 動詞を介してクライアントとサーバー間の通信を管理します。サーバー側リソースは、エンドポイントと呼ばれる URL によって識別されます。

REST は次のように機能します。
クライアントは、サーバー上のリソースの作成、変更、削除を要求する
リクエストにはリソースエンドポイントが含まれ、追加のパラメータが含まれる場合もある
サーバーが応答し、操作が完了するとリソース全体をクライアントに返す
応答には JSON 形式のデータとステータスコードが含まれる
https://aws.amazon.com/jp/compare/the-difference-between-grpc-and-rest/

REST API は通常 HTTP 1.1 を使用します
https://aws.amazon.com/jp/compare/the-difference-between-grpc-and-rest/

HTTP 1.1とは

あとでかく

gRPCとは?

あとでかく

↓参考になりそうな記事
https://qiita.com/S4nTo/items/0ff0445542538ef49a05