2019-01-01から1年間の記事一覧
概要 クレジットカード・シリアルナンバーなど、長くなるほど入力ミスはしやすくなります。 そんな時に毎回DBに問い合わせて正しい値かをチェックするのではなくアルゴリズムによって正しいものかどうかチェックする仕組みがcheck digit(チェックディジット…
背景 実行中のファイルに対してcpで上書きする場合だとText file busyで置き換えられず、mvだと何も聞かれず置き換えられる理由を深掘ってみました。 データ構造 mvやcpの動きを確認する前に必要な前提知識を説明します。 プロセスとinodeとの関係 プロセス…
背景 $ コマンド > outfile 2>&1 と $ コマンド 2>&1 > outfile は結果が異なります。 前者は標準出力、標準エラーともにoutfileに出力されるのに対し、後者は標準出力はoutfileに、標準エラーはターミナルに出力されます。 この違いを理解するためにUnixの…
背景 以前Docker multi stage buildなどビルド環境と実行環境が異なる(クロスコンパイル)時に、単純にGOOSやGOARCHをセットするだけではなく $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -a -installsuffix cgo -o main main.go のように CGO_ENA…
背景 今やWebだけでなく、iOS、Android、TV、カーナビといった多数のクライアントでAPIを利用する時代です。 各クライアントでBFFを置く設計もありますが、開発コストや運用コストを考えて同一のAPIサーバを用意し利用することも多いと思われます。 加えてサ…
概要 AppStoreでGrace Period機能がリリースされたました。 これはその機能の検証を行った結果です。 ※Appleは気づいたら仕様変更することもちょこちょこあるので、こちらの結果が常に正しいとは信じず参考程度に捉えてください 前提知識 サブスクリプション…
概要 以前↓の記事を紹介しましたが、 christina04.hatenablog.com http.Serverの各Timeoutを使わないと TCPハンドシェイクをしたあと全くリクエストを送ってこないクライアント Slowloris DDoS attack による大量接続攻撃を受けた時に困るので注意してくださ…
概要 christina04.hatenablog.com で一度まとめましたが、まだ理解があやふやなところがありました。 その後 Working With TCP Sockets を読んでようやくストンと理解できたのでまとめます。 経緯 たくさんのリクエストを受けるにはどうしたらいいか、で マ…
概要 write: broken pipeといったクライアント側の強制的なコネクション切断でのエラーハンドリングをする際の知見まとめ。 環境 golang/go 1.13.3 事前知識 知っておくと良い知識を先に説明します。 そもそもpipeとは pipeはプロセス間通信をするための単方…
概要 インターネットに晒されているWebサービスでは TV等で紹介されたことによる大量流入 悪意ある人物からの攻撃 クライアントのバグに依る大量リクエスト など、本来想定していた以上のトラフィックが来ることはよくあります。 単純にシステムを構築すると…
概要 Idle connectionをプールするkeep-aliveの仕組みですが、Goで適切に使用するためにはいくつか注意があります。 環境 golang/go 1.13.1 TCP Keep-Aliveの挙動をパケットキャプチャで確認する 例えば以下のようにDefaultTransportの一部の設定(①、②)を…
概要 タイムアウトと一口に言ってもサーバ・クライアント、そして各フェーズによって細かく設定があります。 今回はGoのnet/httpのtimeoutについて1つ1つ説明していきます。 環境 golang/go 1.13 Server 全体図 サーバ系timeoutと各フェーズは以下の関係に…
概要 気づいたらMongoDBも4.2になっていました。 以前に DockerでMongoDBのレプリカセットを構築 - Carpe Diem でレプリケーションを、 MongoDBでシャーディング - Carpe Diem でシャーディングを構築しましたが、設定項目が代わっていたりしたので復習がて…
概要 AbemaTVの合同誌にHashiCorp Vaultについて執筆しました。 techbookfest.org どんな内容 基本的にはこの技術ブログで紹介した内容を体系的にして、最新バージョンで改めて動作確認した感じにしています。 初めてHashiCorp Vaultを使う人にとって読みや…
概要 以前 christina04.hatenablog.com こちらの記事で、アプリケーション内でのレイヤ間のエラーハンドリングについてまとめました。 ではマイクロサービス間でそのエラーコードを伝播していくのはどうすれば良いのか、というのが今回の主題です。 課題 gRP…
概要 christina04.hatenablog.com で紹介したprotoeasyがリンクごと消えて使えなくなったので、protocの使い方を整理するために書きます。 環境 libprotoc 3.9.1 使い方 Goを例に基本的な使い方を説明します。 SRC_DIRディレクトリに.protoファイルがある場…
概要 機密情報の管理はいつも悩みのタネです。 その管理に僕はHashiCorp Vaultを推してますが、その理由を含めて説明します。 管理方法の課題 機密情報の管理で考えなければいけないことはたくさんあります。 データの暗号化 どこに保存するか 認証 アクセス…
概要 HashiCorp VaultにはCubbyhole Response Wrappingという仕組みが用意されています。 これによってトークンや秘密情報の受け渡し時の漏洩リスクを最小限にします。 課題・背景 人やマシンにトークンを渡す場合、 発行した人から漏洩する可能性 渡す際に…
概要 HashiCorp VaultにはDynamic Secretsという期限の付いた認証情報を動的に生成してパブリッククラウドやDBへのアクセスをセキュアに保つ仕組みが用意されています。 課題・背景 秘密情報とその周辺の認証を一元化し、適切な暗号化・Auditなどをしっかり…
概要 HashiCorp VaultのTokenにはLeaseという概念があります。 この概念によってよりローテーションを強制し、秘密情報のセキュアな管理をすることが可能です。 環境 Vault 1.2.1 default_lease_ttlとmax_lease_ttl root tokenを除く全てのtokenにはdefault_…
概要 KubernetesにはL4ロードバランサのServiceとL7のIngressがあります。 IngressはControllerによって挙動が大きく変わるので実際に手を動かして学んでみます。 環境 minikube 1.3.0 Kubernetes 1.15.2 nginx-ingress 0.24.1 nginx-ingress chart 1.6.19 H…
概要 Kubernetesの問題の1つに、マニフェストファイルがたくさんできるYAMLの壁と呼ばれるものがあります。 image mountするファイル label リソース割当 といった一部の要素だけ変えたい時、ほとんど構成は同じで似たようなマニフェストファイルが大量に出…
概要 KubernetesではRBACという、各種リソースへのアクセス権限を管理する仕組みが用意されてます。 たとえばPrometheusのようにKubernetesのAPIを叩く場合、各リソースへアクセスするための権限が必要になります。 今回はそれの基本的な仕組みや設定方法を…
概要 christina04.hatenablog.com でNode exporterを使った基本的な監視方法を説明しましたが、今回は具体的にどんな項目をどう監視すべきかを説明します。 USEメソッド サーバの監視すべき項目の指標としてUSEメソッドというものがあります。 項目 説明 Uti…
概要 GitHubを使った開発で使ってるツールを紹介していきます。 どれもあると無いとでは開発スピードが大きく変わります。 Fork GUIのGitクライアントです。 git-fork.com 以前はSourcetreeを使っていましたが管理するファイルが増えると非常に重くなったの…
概要 PrometheusはPull型の監視ツールであるため、監視対象がどれかを教えてあげなければいけません。 これまでの記事は全てstatic_configsを用いた静的な値で、スケールした時やサービスが増減した時に柔軟性がありません。 PrometheusはServiceDiscoveryを…
概要 前回はHTTPのAPIサーバの監視の仕方を説明しました。 christina04.hatenablog.com 今回はgRPCでのメトリクスの作り方を説明します。 環境 Prometheus 2.11.1 Golang 1.12.7 Grafana 6.2.5 prometheus/client_golang 1.0.0 go-grpc-prometheus 1.2.0 メ…
概要 前回は既存のexporterを利用せず、自分でメトリクスを生成する方法を説明しました。 christina04.hatenablog.com その方法を使って実際にAPIサーバ(HTTP)のメトリクスを生成し、可視化してみます。 環境 Ubuntu 18.04 Prometheus 2.11.1 Golang 1.12.7 …
概要 Metric types | Prometheus で定義されているようにPrometheusでは大きく4つのメトリクスタイプがあります。 Counter Gauge Summary Histogram 今回はGoのPrometheusクライアントライブラリを用いて各メトリクスを独自で用意する方法を説明します。 環…
概要 Prometheus + GrafanaではPromQLを使って柔軟なパネルが作成できる一方、作り方が複雑になりがちです。 今回は基本的なパネルの作り方を説明します。 環境 Grafana 6.2.5 Prometheus 2.11.1 パネル Grafanaのダッシュボードのパネルは大きく10あります…