みなさんこんにちは。ゆーろんです。
今回はWeb3.0と呼ばれる次世代のインターネットから考えた最新のWeb系技術に関して調べたのでまとめました。
はじめに「Web3.0」とは
Web3.0とは「分散型インターネット」と称される次世代のインターネットを指します。
それを構築するためのヒントとなるワードとしては「メタバース」「仮想通貨/ブロックチェーン」「NFT」などがあります。
それに加わる新勢力として2022年に「高性能AI」が登場しました。
もともとAIはビックデータ解析などとの関係もあり、2015年以降から注目され使われていましたが、昨年一気に可視化される形となりました。
具体的にはOpenAIの「ChatGPT」や「NovelAI」「StableDiffusion」など画像生成系AIなど注目を集めました。他にAIを使った人工音声としては「CoeFont」「VOICEVOX」などもあります。
これらのサービスやテクノロジーを応用しWebアプリケーションの開発を進めるためのWebアプリの最新技術としては「マイクロサービス」「Go」「RPC」「Kubernetes」などが注目されています。
マイクロサービス
マイクロサービスは、プロダクト(Webアプリ)を機能に沿った複数の小さい「マイクロサービス」に分割し、連携させることで大きいソフトウェア機能を実現することを指します。対照的なサービスとしてはモノリシックサービスが上げられます。これはすべてのサービス(機能群)を1つのシステムで実現するものです。
マイクロサービスアーキテクチャでは機能ごとに独立したサービスを構築します。独立したサービスを繋ぐために重要な技術やインターフェスとしてはAPIやRPCがあり、これらはマイクロサービスの連携に欠かせません。マイクロサービス構築するための技術としてはGo /gRPC, Kubernetes(k8s)が注目されています。
参考記事(外部リンク)
アプリケーションのスピーディな開発、運用を実現する「マイクロサービス」とは何か。マイクロサービスのメリットを最大限に生かすために「HashiCorp Consul」を利用して複雑なインフラ調整を自動化し、より早く開発、運用する仕組みを紹介し Weekly system design newsletter: https://bit.ly/3tfAlYDCheckout our bestselling System Design Interview books: Volume 1:Kubernetes、マイクロサービスのスピーディな開発にHashiCorp Consulが必要な理由 | LAC WATCH
What Are Microservices Really All About? (And When Not To Use It)
Go と gRPC
Go
Googleの開発した静的型付けコンパイラ言語です。
Goには簡単にWebサーバーの構築ができる特徴(gRPCサーバー)があります。またKubernetesとの相性がいいため日本のモダンWeb界隈で非常に注目されています。
参考記事(外部リンク)
サービス間通信とIDL(インタフェース記述言語)連載の2日目のエントリーです。 本当はGraphQLネイティブなデータベースの紹介をしようとしたのですが、紹介しようとしていたものがまだベータでクライアントライブラリが公開されていない(空っぽ 異なるマシン上で動作するサービス間で情報をやり取りする手法にはさまざまなものがあるが、その中でも近年注目されているのが「gRPC」だ。gRPCはGoogleが自社サービス向けに開発して使用していたものをオープンソース化し […]gRPCのGo実装の新星、Connect | フューチャー技術ブログ
サービス間通信のための新技術「gRPC」入門 | さくらのナレッジ
gRPC
Googleが開発したRPCです。
RPCは「遠隔手続き呼び出し」とも呼ばれ、コンピュータで動作するソフトウェアからネットワークを通じて別のコンピュータ上で動作するための通信規格です。
gRPCにはクライアント側が他端末のサーバーアプリのメソッドを直接呼び出せる特徴があるため非常に注目されています。
API
API(Application Programming Interface)はアプリケーションの機能同士を繋げるインターフェスです。
その歴史は古くXML-RPC, SOAPなどいろいろあったようですが、今はREST APIが注目されほぼ主流となっています。
マイクロサービスにおいてAPIはクライアントと各サービスを繋ぐために非常に重要なものです。
基本的にREST APIを使ってDBとやり取りをする機能を作る場合、1つのURIに対して1つのデータベース操作機能(CRUD処理)を提供することが多いですが、サービスが複雑な場合、REST APIでは大量のURIを作成する必要があります。
そこで、その問題を解決するために1つのURIで複数の機能を提供できる拡張技術の1つとして「GraphQL」が開発されました。
他のREST APIに関連する技術には「Swagger」や「tRPC」などもあります。
Kubernetes と Docker
Kubernetes(k8s)
Kubernetesはコンテナの運用管理と自動化を行うために設計されたオープンソースソフトウェアです。Kubenetesが管理する操作の対象はDockerなどのコンテナとなっています。
Docker単体でのコンテナにはコンテナ自体の管理や別サーバと連携ができない問題がありますが、Kubenetesを用いることで複数コンテナでサービスを提供/運用、ネットワークの連携管理が簡単になります。こういった仕組みはオーケストレーションと呼ばれます。
Docker
DockerはVM(Virtual Machine)の問題を解決したコンテナ仮想化技術です。
旧来の仮想化技術であるVM(VMware, Virtual Boxなど)はOSも設定する必要がある問題がありましたが、Dockerの登場によりアプリケーションを動かすためのミドルウェアとアプリのシステム(ソースコード群)のみでアプリケーションを構築できるようになりました。
またVMと違い圧倒的軽量な点も特徴の一つです。
Dockerのメリットにはミドルウェアの環境ごと共有できるため、Docker環境があれば誰でもすぐにアプリケーションを動かせる点、IaaS(AWSで言うFargateのECS基盤)にスクラップ/ビルドしやすい特徴があります。
つまりDockerを開発環境に用いることでEC2/VPSなどの仮想サーバにSSHで入ってLinuxコマンドを叩いてミドルウェアを設定するというステップを解決できるということです。
参考資料
みなさんは、「Web3.0(Web3)」という言葉をご存知でしょうか?2021年には、「NFT」や「メタバース」などの言葉が社会をにぎやかせましたが、最近特に注目を集めているのが、Web3.0。多くの企業から注目され、新たな時代のインターネ Microservices break down software applications into modules with detailed interfaces and specialized functions. Click he Node.jsとKubernetesを使い、マイクロサービスを作ってみたくなったので、このチュートリアルを作成してみました。バグや修正した方がよい点などあれば気軽にコメントをおねがいします。本チ…Web3.0(Web3)とは?〜分散型の次世代インターネット〜 | ecbeing
Microservices Definition, Examples, Architecture, and Best Practices
KubernetesとNode.jsでマイクロサービスを作成する 1/6 概要 - Qiita