2024/01 CTOへの日報まとめ

日報




2024-1-4

Amazon SQSに用意されている3つの主要な機能について理解することができました。

デッドレターキュー

  • consumerによる処理に失敗したメッセージは再びQueueに戻されるが、一定回数以上連続して処理に失敗したメッセージを別のQueue(DeadLetterQueue)に格納して別の方法で処理したり、メッセージを確認して処理に失敗した原因を分析するための仕組みのこと

可視性タイムアウト

  • consumerにメッセージが重複してdequeueされ処理される可能性を下げるために、処理中のメッセージは一時的に他のconsumerからは見えなくする仕組みのこと
  • 数秒から数時間の間で設定が可能

遅延キュー

  • enqueueされたメッセージをdequeueできるようにするまでの、Queue単位で設定可能な待ち時間のこと
  • 設定された待ち時間が経過すると、consumerでメッセージを取得可能
  • メッセージを正常に処理するために必要な準備時間がある場合に利用する

メッセージタイマー

  • enqueueされたメッセージをdequeueできるようにするまでの、メッセージ単位で設定可能な待ち時間のこと
  • Producer側で設定する
  • 設定された待ち時間が経過すると、consumerでメッセージを取得可能
  • メッセージを正常に処理するために必要な準備時間がある場合に利用する

弊社プロダクトでの完了通知では、SNSのsubscriberに設定したメールアドレス宛に直接通知を送るため、SNSのみでよく、SNSにSQSを組み合わせる必要はありませんでした。しかし、完了通知やその他通知をLambdaやアプリケーションなどで受け取り、受け取ったメッセージやデータに基づいて特定の処理を行いたい場合は、SNSにSQSを組み合わせることで(SNSのsubscriberにSQSのQueueを登録することで)より複雑で高度なことが実現できるかと思いますので、今後そのような機会がありましたら、今回得た知識を活かせたらと思います。

2024-1-9

GraphQLについて概要を理解することができました。

  • GraphQLとは、データ取得や操作のためのクエリ言語
  • Facebookによって開発され、2015年に公開された
  • 従来のREST APIの代わりとしてよく使用され、クライアントがサーバーから必要なデータをより効率的に取得できるように設計されている

特徴や利点

  • 効率的なデータ取得:クライアントは必要なデータのみを指定して取得できる。これにより、不必要なデータの取得がなくなり、ネットワークの使用量が減少する
  • 単一のエンドポイント:GraphQLは一般に単一のエンドポイントを使用する。これにより、複数のAPI呼び出しを行う代わりに、一つのリクエストで必要なすべてのデータを取得可能
  • 型システム:GraphQLは強力な型システムを持っており、データの構造を定義することが可能。これにより、クライアントとサーバー間の契約が明確になり、エラーを減らすことができる
  • リアルタイムデータ:GraphQLのサブスクリプションを使用することで、リアルタイムデータの取得が可能になる。これはチャットアプリケーションなど、リアルタイムの更新が必要な場面で有用
  • 柔軟性と再利用性:クエリは非常に柔軟であり、異なるクライアントやプロジェクト間での再利用が容易
  • 強力な開発者ツール:GraphQLは、クエリのテストやデバッグを容易にするための強力なツールを持っている。例えば、GraphQLのIDEであるGraphiQLは、クエリの作成とテストに広く使用されている

欠点

  • 複雑なクエリやデータ取得が多い場合、サーバー側での負荷が高くなる可能性がある
  • 学習コストがやや高い
2024-1-11

クエリ言語であるSQLとGraphQLの違いについて知ることができました。

SQL

  • 主にRDBのためのクエリ言語。DBからデータを取得、挿入、更新、削除するために使用される
  • サーバー側で実行され、データベース内のテーブルからデータを取得する
  • データベースのスキーマと密接に関連しており、テーブルやリレーションシップを基に機能する

GraphQL

  • APIのためのクエリ言語。クライアントがサーバーから必要なデータを指定して取得するために使用される
  • クライアント側で実行され、APIを通じてサーバーからデータを取得する。サーバーはGraphQLクエリを解析して、必要なデータを返す
  • GraphQLはAPIのデータ要求に焦点を当てており、クライアントが必要とするデータの形状を指定することができる

主な違い

  • 対象:SQLはデータベース操作に特化しているのに対し、GraphQLはAPIを通じたデータ取得と操作に特化している
  • 柔軟性:GraphQLはクライアントが必要なデータのみをリクエストできるため、データのオーバーフェッチやアンダーフェッチを防ぐことができる
  • インターフェース:SQLはデータベースのテーブルとカラムに基づいているが、GraphQLはAPIのスキーマに基づいており、より高度なデータの抽象化が可能
2024-1-11

従来のREST APIによるデータ取得と、GraphQLを用いたデータ取得の違いについて理解することができました。

REST API

  • 固定化されたエンドポイント:各種データにアクセスするために複数のエンドポイントが存在する。例えば、ユーザー情報の取得、記事の作成、コメントの作成などがそれぞれ異なるエンドポイントに存在する
  • オーバーフェッチ、アンダーフェッチ:クライアントはサーバーから提供されるデータの形式に依存しており、必要以上のデータ(オーバーフェッチ)を受け取ったり、必要なデータが足りず追加のリクエスト(アンダーフェッチ)を必要とすることがある

GraphQL

  • 単一のエンドポイント:GraphQLは通常、単一のエンドポイントを使用する。例えば、ユーザーが記事を投稿し、その記事にコメントを追加し、自分のプロフィールを更新するような一連の操作を、GraphQLを使用して1つのリクエストで行うことが可能。これにより、REST APIのように複数のエンドポイントに対して別々のリクエストを送る必要がなくなり、開発の効率性とアプリケーションのパフォーマンスが向上する
  • データの柔軟な取得:クライアントは必要なデータだけをクエリで指定できるため、オーバーフェッチやアンダーフェッチの問題を解消できる

従来のREST APIによるデータ取得から、GraphQLを用いたデータ取得に取って代わられている理由

  • 効率性の向上:クライアントは必要なデータのみを取得できるため、ネットワーク利用が効率的になる
  • パフォーマンス最適化:不要なデータの取得が減るため、アプリケーションのパフォーマンスが向上する

GraphQLは、データ取得の方法を大きく変革し、APIを介したデータのやり取りをより効率的かつ柔軟にすることを目的としている。これは特に大規模なアプリケーションや複雑なデータ要件を持つ場合に、REST APIに比べて大きな利点を提供する。

2024-1-15

gRPC(Google Remote Procedure Call)について知ることができました。

  • gRPCとは、Googleが開発したオープンソースのリモートプロシージャコール(RPC)システムのこと
  • RPCとは、ネットワークを通じて別のコンピュータ上でプログラムを実行することを可能にする技術

gRPCの特徴

  • 言語の独立性:gRPCは多くのプログラミング言語で利用でき、サーバーとクライアントが異なる言語で実装されていても通信が可能
  • 効率的な通信:gRPCはHTTP/2をトランスポート層として使用している。これにより低遅延、高スループット、多重化(同時に複数のリクエストやレスポンスの送受信)が可能となる
  • Protocol Buffers(プロトコルバッファ)の使用:gRPCでは、データのシリアライズにProtocol Buffersを使用する。これは効率的で、言語に依存しないバイナリ形式
  • ストリーミングサポート:gRPCはクライアントからサーバー、サーバーからクライアント、または双方向のストリーミング通信をサポートする
  • 強力な型付け:クライアントとサーバー間のインターフェースはIDL(Interface Definition Language)で定義され、これによりAPIの仕様が明確になり、開発とメンテナンスが容易になる

これらの特性により、gRPCはマイクロサービスアーキテクチャ、クラウドコンピューティング、分散システムなどの分野で広く利用されている。

2024-1-16

AWS Kinesisがどのようなサービスか概要を知ることができました。

  • AWS Kinesisとは、AWSが提供する大規模なリアルタイムデータストリーミングサービス
  • 主に、大量のデータをリアルタイムで収集し、加工、分析するために使用される

Kinesisが提供する主要機能は下記

Kinesis Data Streams

  • リアルタイムでデータストリームを収集し、数ミリ秒のレイテンシーでの処理を可能にする
  • この機能は、アプリケーションが大量のデータをリアルタイムで処理する際に使用される

Kinesis Data Firehose

  • ストリームデータをAWSのデータストア、S3、Redshift、Elasticsearch Serviceなどに直接ロードすることが可能
  • これにより、データを即座に分析し、より長期的なストレージソリューションに保存することが可能になる

Kinesis Data Analytics

  • SQLやApache Flinkを使用して、ストリーミングデータ上でリアルタイムの分析が可能
  • これにより、データストリームから洞察を得ることができる

Kinesis Video Streams

  • ビデオとオーディオストリームを安全にキャプチャ、処理、ストアするための機能
  • これは、セキュリティ、監視、マシンラーニングなどのアプリケーションで使用される

AWS Kinesisの利点は、スケーラビリティ、高い可用性、リアルタイム処理能力にある。 これにより、多くの企業や開発者がリアルタイムデータ処理のニーズに対応するためにKinesisを活用している

2024-1-18

Knockout.jsにおけるdblclickイベントバインディングというものがあることを知りました

2024-1-19

PHPのinterface周りの理解をすることができました