製品モデル

Python SELF JA
レベル 64 , レッスン 1
使用可能

2.1 現代の製品

今の製品はもう誰もプログラムとは呼ばないよ。現代の製品は、何十ものプログラム、何百ものインターネットサービス、そしてクラウドデータセンター(データ処理センターとも呼ばれる)によって提供される多くのAPIを含むことができるんだ。

多くの現代の製品(ほぼ全てと言ってもいいね)がクライアント・サーバーパラダイムで動作しているんだ。これは、君のデバイス(スマートフォン、ノートパソコン、コンピューター)に、ユーザー(君)とのコミュニケーションを担当するプログラムがあり、重要な機能はリモートサーバーに置かれていて、そこで全ての重要な処理が行われるってこと。

時々、君のクライアントが複数の独立したサーバーと通信したり、ある製品のサーバーが別の製品のサーバーと通信することもあるんだ。結果として、クライアントとサーバーのグローバルネットワークができて、全てが互いに協力して動いている。

だから、現代のアプリケーションモデルは、クライアント・インターネット・サーバーパラダイムって表現するのがいいかもね。あまりにも複雑なコミュニケーションが増えてきたからさ。今では「スマートコミュニケーションチャンネル」と呼ばれるものも出てきて、君のリクエストを誰にいつ送るかを自動で決定してくれるんだよ。

2.2 クライアント

クライアントプログラムは大まかに4つのカテゴリーに分けられるよ:

  • デスクトップクライアント — パソコンで動作するプログラム。
  • モバイルクライアント — iOSやAndroid用のアプリ。
  • ウェブクライアント — ブラウザで動作するサイトやウェブアプリ。
  • サーバークライアント — 他のサーバーで動作しているアプリ。

それぞれを更に細かく分けることもできるね。例えば、ウェブクライアントはサイトやウェブアプリであり、それはブラウザーとサイトで構成されるんだ。そしてブラウザーも様々で、動作も異なることがある。

でも、最も普及しているブラウザーを考えたとしても、まだその中に読み込まれるサイトが残る。一般的にサイトは3つの要素から成り立っている:

  • HTML
  • CSS
  • JavaScript

「これ以上簡単なことはないでしょう」と思うかもしれない。でも、今ではもう誰もHTMLとJavaScriptだけでサイトを書いていないんだよ。サイト開発には今やライブラリだけでなく、ReactやAngular、Vueといったフルフレームワークが使われているんだ。それに、サイトじゃなくて完全なウェブアプリケーションになっていて、自分のビルド、テスト、パラダイムを持っているんだ。

純粋なCSSも今では誰も使っていない。CSSを生成するのに役立つプリプロセッサや、完全なCSSフレームワークがあるんだ。メール用の特別なCSSフレームワークさえあって、メールがブラウザーやほとんどのメールクライアントで美しく見えるようにしてくれる。

純粋なJavaScriptで書く人も少ないね。大規模なウェブアプリケーションはTypeScriptで作られていて、それがJavaScriptにコンパイルされるんだ。まあ、わかるよね...

2.3 インターネットとインフラストラクチャ

クライアントとサーバーのコミュニケーションって簡単そうに聞こえるよね?でも、その関係もすでに変わっちゃってるんだ。

君の製品は、おそらく現代のデータセンターの一つに置かれることになるだろう。世界中の多くの企業が、君の製品のホスティングサービスを提供していて、彼らのサーバー上でも君自身の物理的なサーバー上でも構わない。お金を払えばどんな願望も叶うんだ。

物理サーバーはもう物理的じゃないんだ。現代のデータセンターは仮想サーバーのレンタルを提供しているんだよ。仮想サーバーは仮想的なコンピューターで、一つの物理サーバー上に数十個もあることができる。それに、サーバーのアップグレードが簡単なんだ。もっとメモリが欲しい?それなら数分で仮想サーバーに追加できるよ。

でも、このやり方ももう古くなってきていて、今はクラウドへの移行が流行っている。つまり、君の製品はデータセンターの仮想サーバー上に展開されるだけでなく、データセンターの大規模なインフラストラクチャとサービスを積極的に利用しているんだ。

バックアップを保存するためのサーバーが必要?クラウドには便利なインフラストラクチャが用意されているよ。信頼性99.9999999%のデータベースが欲しい?それもあるよ。Kafka、RabbitMQ、NoSQL?全部揃っていて設定も簡単。お金さえ払えばね。

そして、これらのデータセンターとクラウドが君の製品の一部になり始めている。例えば、Amazon は世界中にたくさんのデータセンターを持っているから、CDNサービスを提供していて、君のパブリックコンテンツをすべてのAmazonデータセンターでキャッシュして、世界中のユーザーがそれをより速く受け取れるようにしてくれるんだ。

それに、君のアプリケーションのAPIコールをAmazon Gateway APIサービス経由で送信することができて、君のサービスとのやり取りを非常に柔軟に設定できる。異なるサービスに負荷を分配したり、DDoS攻撃を防いだり、ファイルの自動アップロードをしたり、賢いキャッシュを設定したり、まあ色々とね。

だから、アプリケーションクライアントと君のサービスの間にはたくさんの「スマートコミュニケーション」が生まれて、それを設定することができるし、するべきなんだ。たとえ君がそれを個人的にやることがなくても、それらが存在していることを知っておくべきだし、君のプログラムの動作に大きく影響を与える可能性があるんだよ。

これでは、ルーター、5Gタワー、衛星、そして海底のインターネットケーブルといったトピックにはまだ触れていない。君がサーバーからクライアントへ映像ストリームを送っているとき、クライアントの通信が悪くて接続が頻繁に切れると、誰がその問題を解決することになると思う?

2.4 サーバー

"サーバー"という言葉の背後には全く異なる概念が隠れているかもしれない。君にとってよく知られたものを紹介するのは役に立つだろうね。

物理サーバー

物理サーバーは、データ処理や様々なソフトウェアアプリケーションの動作を保証するために使用される、独立したコンピューターとしてのリソース(プロセッサ、メモリ、ストレージ)を備えた機器だよ。これらのサーバーはデータセンターに設置されて、ウェブサイト、アプリケーション、データベース、その他のサービスのホスティングに用いられる。

仮想サーバー

仮想サーバーは、物理サーバーの環境内で動作するソフトウェアエミュレートされたサーバーなんだ。仮想化技術を利用して、一つの物理サーバーを複数の独立した仮想サーバーに分割することができて、それぞれが独自のオペレーティングシステムを持ち、独立して再起動したり設定したりできるんだ。

サーバープログラム(例えば、Nginx)

Nginxのようなサーバープログラムは、ウェブリソースへのリクエストを処理するために使用されるサーバーソフトウェアだよ。Nginxは、ウェブサーバーとして広く知られていて、メールプロキシサーバーやリバースプロキシサーバーとしてマイクロサービスアーキテクチャで動作したり、負荷分散も担ったりすることができる。

データベースサーバー

データベースサーバーは、データベースを管理し、リクエストを処理するために使用される特化されたサーバーだよ。これはデータの中央集権的な保存と処理を保証し、ネットワークを通じてデータへのアクセスを提供する。データベースサーバーは、トランザクション処理、データ検索や変更をサポートしながら、情報の信頼性とセキュリティも保証するんだ。データベースサーバーの例として、MySQL、PostgreSQL、Oracle Database、Microsoft SQL Serverがある。

どこかのデータセンターで仮想サーバーの一つとして君のPythonとDjangoのプロジェクトが動作することになる。それはデータベースとやり取りし、NginXからのリクエストを受け取り、自分の働きの記録をSplankに送信するんだ。

だからこそ、君のコードのおかげで製品の何百万ものユーザーが幸せになる。彼らはその製品を使ってお金を払うし、その場合、製品のオーナーも幸せになる。会社の株価が上がって、君もボーナスとして株をもらって幸せになる。まるで自然の中の幸せの循環みたいだね :)

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION