タグ

ブックマーク / christina04.hatenablog.com (8)

  • structのメモリ割り当て - Carpe Diem

    概要 Goにおけるstructのメモリ構造を知ることでフィールド順序に対する意識が変わったり、なぜunsafe.Sizeof(string)が16bytesでunsafe.Sizeof(slice)が24bytesになるかが理解できます。 環境 Go 1.15.6 darwin 20.1.0 x86_64 各型のメモリ割り当て unsafe.Sizeof()を使うとその変数がどれくらいメモリを割り振るかが分かります。 ※変数の分確保するメモリであり、参照先のメモリは含みません 型 unsafe.Sizeof() bool 1 int32 4 int 8 float64 8 string 16 []T 24 The Go Playground structのフィールドにそれぞれの型を付けると、その分メモリが割り振られます structのメモリ割り当て 例えばbool, float64, in

    structのメモリ割り当て - Carpe Diem
    tito1201
    tito1201 2023/09/08
  • ポインタを図で理解する - Carpe Diem

    概要 Goのポインタを図で理解することで ダブルポインタとは Goは全て値渡し ポインタレシーバと値レシーバの違い がどういうことかを理解でき、参照渡しの時に x = y だと更新されず *x = *y だと更新される理由が分かります。 ポインタを図示する ポインタはメモリアドレスを指すというは理解しているでしょうが、ポインタ変数との関係を分かりやすくするために図示します。 func main() { var x = 100 fmt.Println("x address:\t", &x) var y *int fmt.Println("y value:\t", y) fmt.Println("y address:\t", &y) y = &x fmt.Println("y value:\t", y) fmt.Println("y address:\t", &y) } The Go Play

    ポインタを図で理解する - Carpe Diem
    tito1201
    tito1201 2023/03/16
  • 様々なrate limitアルゴリズム - Carpe Diem

    概要 インターネットに晒されているWebサービスでは TV等で紹介されたことによる大量流入 悪意ある人物からの攻撃 クライアントのバグに依る大量リクエスト など、来想定していた以上のトラフィックが来ることはよくあります。 単純にシステムを構築すると大規模トラフィックに対応できずシステムがスローダウンしてしまうため、何かしらrate limitをかけておいた方が良いです。 ただしrate limitと一口に入っても色々あるため、今回は主なrate limitアルゴリズムを紹介します。 Leaky bucket Leaky bucketはデータ転送レートを一定にする(=上限を設定する)アルゴリズムです。 下の図のように、様々な流量の水流がそのバケツに流れ込んでも小さな穴からは一定の水流が流れ出す仕組みです。 ref: What is the difference between token

    様々なrate limitアルゴリズム - Carpe Diem
    tito1201
    tito1201 2019/11/11
  • TerraformでECSのService Discoveryを使う - Carpe Diem

    概要 少し前にECSのサービスディスカバリが東京リージョンにも登場しました。 Amazon ECS Service Discovery がフランクフルト、ロンドン、東京、シドニー、シンガポールの各リージョンで利用可能に 今回Terraformでの使い方を説明します。 環境 Terraform v0.11.10 terraform-provider-aws v1.50.0 設定 Namespaceの設定 まずnamespaceを用意します。実行するとRoute53のドメインとして登録されます。 今回ECSで使う=内部アクセスのみなのでaws_service_discovery_private_dns_namespaceを利用します。 これはVPC内部からしかDNSクエリを叩けません。 resource "aws_vpc" "example" { cidr_block = "10.10.0.0

    TerraformでECSのService Discoveryを使う - Carpe Diem
  • remote_addrとかx-forwarded-forとかx-real-ipとか - Carpe Diem

    背景 ECSでNginxのコンテナをプロキシとして立てたところ、APIサーバのアクセスログのクライアントIPがNginxのコンテナIPになっていたのでその修正をしたのがきっかけです。 環境 Nginx 1.10.2 Docker1.12.1 構成 Client -> ELB -> Nginx -> API という構成とします。 ネットでよく見る情報 set_real_ip_from 172.31.0.0/16; real_ip_header X-Forwarded-For; を追加する、とか proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; を追加する、とかどれがどれだか分かりにくいので1つ1つ説明していきます。 用語説明 remote_

    remote_addrとかx-forwarded-forとかx-real-ipとか - Carpe Diem
  • ECSのオートスケール戦略 - Carpe Diem

    概要 ECSはコンテナのスケールアウトとインスタンスのスケールアウトのタイミングが重要です。 よく起きる問題としては インスタンスのスケールアウトが遅くてコンテナのスケールアウトも遅くなってしまう しきい値が不適切でインスタンスがスケールアウトせず、コンテナがスケールアウトしたくてもできない で、こういった事が起きないようにしないといけません。 スケールアウトの方針 対象 方針 インスタンス インスタンスの空きリソースがコンテナ1台分だけの状態がn分間続いたら コンテナ コンテナの使用率がn%を超えたら インスタンスはもう1台もコンテナを追加するリソースがない状況になったら早めにスケールアウトします。 コンテナは一般的なやり方で使用率が高くなったらスケールアウトすればOKです。 スケールインの方針 対象 方針 インスタンス コンテナがn分間ずっと1台を下回ったら コンテナ コンテナの使用率

    tito1201
    tito1201 2018/05/01
  • TerraformでECSを動的ポートマッピングに - Carpe Diem

    概要 以前ECSの記事を幾つか書きましたが、 TerraformでECS環境の構築 - Carpe Diem TerraformでECS環境の構築【オートスケール編】 - Carpe Diem 当時のECSは1インスタンス1コンテナにしないとポートが競合して同じ種類のコンテナを載せることはできませんでした。 しかし今ではALBが導入され、動的ポートマッピングといってコンテナ側のポートは80で、ホスト側にマッピングする際は動的に変えてよろしくやってくれる。ALBはその動的なポートに紐づくという機能が付いています。 これによって1インスタンスに同じ種類のコンテナがいくつもたてられるようになりました。 環境 terraform 0.11.0 terraform-provider-aws 1.3.1 成果物 今回のコードはこちら github.com コード インスタンスの設定 Auto Scal

    TerraformでECSを動的ポートマッピングに - Carpe Diem
    tito1201
    tito1201 2018/02/02
  • B TreeとB+ Treeの違い - Carpe Diem

    概要 インデックスに対してMongoDBはB Treeを採用し、MySQLのInnoDBはB+ Treeを採用しています。 どうして採用しているアルゴリズムが違うのだろう?と思って調べてみました。 主な違い B+ TreeはほとんどB Treeと同じですが、以下の点が異なります。 リーフノードとリーフノードを結ぶポインタがある データはリーフノードのみに保持する 具体例 言葉だけだと分かりにくいので、Visualizeするツールを使って具体例を表示します。 [1, 2, 3, 4, 5, 6, 8, 10, 15, 18]という数列に対し、Order: 3で作ってみます。 Orderは1ノードから出る枝の数のことです。 B Tree B-Tree Visualization B+ Tree B+ Tree Visualization 先程のB Treeと違って、データはリーフノードに持つの

    B TreeとB+ Treeの違い - Carpe Diem
    tito1201
    tito1201 2017/05/18
  • 1