タグ

ブックマーク / zenn.dev/gorogoroumaru (2)

  • 開発者が知るべきキャッシュ設計でよく遭遇する問題

    はじめに 分散システムの設計および開発において、キャッシュはパフォーマンス向上のための非常に重要な要素です。頻繁にアクセスされるデータをキャッシュすることで、アクセス速度が遅いデータベースへのアクセスを削減し、データへの迅速なアクセスを可能にします。これにより、システムの全体的な効率とパフォーマンスが向上します。 しかし、キャッシュは慎重に設計しないとむしろパフォーマンス上のデメリットになるケースが存在します。 この記事ではよく遭遇するキャッシュ設計の問題とその回避策について解説します。 Cache penetration DBに存在しない値を検索したときに、DBから返された空の結果をキャッシュしない場合に発生するシナリオです。 このシナリオではDBに存在しない値を繰り返し検索することにより、その値がキャッシュされていないため検索ごとにDBへのアクセスが必要になってしまいます。 存在しない

    開発者が知るべきキャッシュ設計でよく遭遇する問題
    efcl
    efcl 2023/12/23
    Redisなどのキャッシュ設計。 エラーもキャッシュしてDoSしにくくする話やブルームフィルター、ロックについて
  • バイナリを読み解いて学ぶDNSパケットの構造

    最近RustDNSリゾルバを自作する記事を読んだので、勉強がてらGo言語で書き換えることにしました。 記事ではまずDNSのプロトコルについてバイナリレベルで解説します。次回の記事でGo言語を使用して実際にDNSパケットのパーサーを作成します。 DNSとは DNSはドメイン名をIPアドレスに名前解決するために使用される通信プロトコルです。 通常、DNSパケットはUDPトランスポートを使用して送信され、512バイトに制限されています。 ただし、TCPで送信することも可能で、eDNSを仕様することでパケットサイズを拡張することもできます。 記事では従来のUDPによるDNSパケットの送信について解説します。 UDPにおけるDNSパケットの最大長が512バイトである理由 IPv4の仕様では最小パケットサイズとして576バイトと定義されています。 この値は、64バイトのヘッダーと512バイトのデ

    バイナリを読み解いて学ぶDNSパケットの構造
    efcl
    efcl 2023/11/11
    DNSパケットの構造
  • 1