製品モデル

Frontend SELF JA
レベル 48 , レッスン 1
使用可能

11.1 現代のプロダクト

現代のプロダクト

今のプロダクトはもう誰もプログラムって呼ばないよね。現代のプロダクトは何十ものプログラム、何百ものインターネットサービス、そしてデータセンターのクラウドが提供するたくさんのAPIから成り立ってるんだ。

多くの現代のプロダクトは(っていうか全部かもしれないけど)、クライアント-サーバーのパラダイムで動いてるんだ。つまり、デバイス上(スマホ、ノートPC、コンピュータ)にはユーザとのコミュニケーションを担当するプログラムが入ってて、全く重要な機能はリモートサーバーにあるんだ。そこで全ての重要な処理が行われるのさ。

時にはクライアントが複数の独立したサーバーとやり取りすることもあるし、ひとつのプロダクトのサーバーが他のプロダクトのサーバーにアクセスすることもある。こうして、クライアントとサーバーの間にはある種のグローバルなネットワークができあがって、みんなが一緒に働いているんだ。

だから現代のアプリケーションモデルは、クライアント-インターネット-サーバーのパラダイムとして説明した方がいいかもしれないね。コミュニケーションがものすごく複雑になってきたからね。「スマートチャネル」っていうのもあって、リクエストを誰に送るべきか、いつ送るべきかを自分で決定してくれるんだよ。

11.2 クライアント

クライアントプログラムは大きく4つに分類できるよ:

  • Desktopクライアント — コンピュータで動作するプログラム
  • Mobileクライアント — iOSまたはAndroid向けのアプリ
  • Webクライアント — ブラウザで動作するサイト/ウェブアプリ
  • Serverクライアント — 他のサーバー上で動作するアプリ

さらにそれぞれを分解することもできるよ。例えば、webクライアントはサイトまたはウェブアプリだけど、それはつまりブラウザとそれに読み込まれるサイトから成り立ってるってこと。ブラウザもみんな同じじゃなくて、いろいろ動作が違うんだよね。

一番使われているブラウザを使ったとしても、そこにはサイトが読み込まれるわけで。サイトは通常3つの要素で構成されてる:

  • HTML
  • CSS
  • JavaScript

「簡単じゃん」と思うかもしれないけど、今やHTMLとJavaScriptだけでサイトを作る人はいないよ。今ではReactやAngular、Vueみたいなフルフレームワークを使ってウェブサイトじゃなくて完全なウェブアプリを作るんだ。コンパイルやテスト、パラダイムもあるしね。

昔のCSSも使われなくなってきてるよ。CSS生成を手助けするプリプロセッサもあるし、CSSフレームワーク全体もあるし。Email用のCSSフレームワークもあるんだぜ、それであなたのメールがブラウザや多くのメールクライアントで綺麗に表示されるようにね。

JavaScriptでももう誰も書いてないよ。大きいウェブアプリはTypeScriptで書いて、それをJavaScriptにコンパイルするんだ。わかるでしょ…

11.3 インターネットとインフラ

クライアントとサーバーのコミュニケーションって簡単そうでしょ?でも、それさえももう変わったんだ。

まず、あなたのプロダクトは現代のデータセンターのどこかにホスティングされることが多いね。世界中の多くの企業が、あなたのプロダクトを彼らのサーバーまたはあなたの物理サーバー上にホスティングするためのいろんなサービスを提供しているんだ。お金さえ払えば何でもできるよ。

インターネットとインフラ

物理サーバーはもう物理的ではない。今のデータセンターは仮想サーバーのレンタルを提供してるよ。仮想コンピュータって感じで、ひとつの物理サーバーにはたくさんの仮想サーバーがあることもあるんだ。でもそれはサーバーのアップグレードの面では便利だね。メモリがもっと必要ってときは、数分で仮想サーバーに追加できるんだから。

でもその方法ももう古いかも。今はクラウドへの移行が流行ってる。あなたのプロダクトが単にデータセンターの仮想サーバーに展開されるだけじゃなく、そのデータセンターのインフラとサービスの大きなセットを積極的に利用するんだ。

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

これらのデータセンターとクラウドはあなたのプロダクトの一部になり始めてる。例えば、Amazonには世界中にたくさんのデータセンターがあるから、CDNサービスを提供している。あなたの公開コンテンツはAmazonの全データセンターでキャッシュされ、世界中のユーザがより速く受け取れるようになるんだ。

また、Amazon Gateway APIサービスを通じてあなたのアプリケーションのAPIへのアクセスを通過させることができる。これにより、あなたのサービスと非常に柔軟に作業することができるよ。異なるサービスに負荷を分散したり、DDoS攻撃を反射したり、ファイルのアップロードを自動化したり、スマートキャッシュを設定したり、その他たくさんのことができる。

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

それに、ルーターや5Gタワー、衛星、海底のインターネットケーブルみたいな話にはまだ触れてないからね。あなたのサーバーからクライアントへビデオストリームを送っているのに、それがうまくいかないってときは、クライアントのネットワークがイマイチで接続が途切れちゃうからなんだ。さて、その問題を解決するのは誰だろう?

11.4 サーバー

サーバー側という言葉は、かなり異なるものを示すことが多いので、一番人気のあるものについて知っておくといいね。

物理サーバー

物理サーバーは、リソース(プロセッサ、メモリ、ストレージ)を持つ独立したコンピュータで、データの処理やさまざまなソフトウェアアプリケーションを動作させるための機器です。これらのサーバーはデータセンターに設置されて、ウェブサイト、アプリケーション、データベース、その他のサービスのためにパワーを提供します。

仮想サーバー

仮想サーバーは、物理サーバーの環境で動作するプログラムでエミュレートされたサーバーです。仮想化技術を用いることで、1つの物理サーバーを複数の独立した仮想サーバーに分割することができ、それぞれが独自のオペレーティングシステムを持ち、独立してリブートしたり設定したりできます。

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

Nginxのようなプログラムサーバーは、ウェブリソースへのリクエストを処理するためのサーバーソフトウェアです。Nginxはウェブサーバーとして広く知られていますが、マイクロサービスアーキテクチャでのメールプロキシサーバーやリバースプロキシサーバー、そして負荷分散機能も兼ね備えています。

データベースサーバー

データベースサーバーは、データベースの管理とそれへのリクエストの処理に使用される専門のサーバーです。それは、データをネットワークを介してアクセスできるようにし、取引処理、データの検索と変更をサポートしつつ、情報の保存の信頼性とセキュリティを提供します。データベースサーバーの例には、MySQL、PostgreSQL、Oracle Database、Microsoft SQL Serverがあります。

そして、どこかのデータセンターの仮想サーバーの1つに、ReactとNode.jsで作られたあなたのプロジェクトが動いていて、それがデータベースとやり取りし、NginXからリクエストを受け取り、Splankにアクションログを送っているんだ。

でも、あなたのコードのおかげで、あなたのプロダクトを利用する数百万人のユーザーが幸せになるんだ。彼らはプロダクトを使い、お金を払ってくれるので、プロダクトのオーナーも幸せになる。会社の株は上がり、あなたは株でボーナスをもらって幸せになるでしょう。なんか自然の中の幸せの循環みたいだね :)

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