記事

シャーディングとパーティショニングの違い

データベース

概要 時々どっちがどっちか混乱してしまうので、メモを残す。 シャーディングとパーティショニングの違い 項目 シャーディング パーティショニング データの分割方法 水平方向(≒水平パーティショニング) ex. 行 垂直方向 ex. テーブル、データベース、カラム メリット パフォーマンスの向上、スケーラビリティの向上 パフォーマンスの向上、データの検索性向上 デメリット データや...

パーティショニング シャーディング

デプロイ戦略について

アプリケーション

概要 デプロイ戦略についてまとめる。 デプロイ・リリース・ロールバックの定義 デプロイ戦略の前提知識として言葉の定義を明確にしておく。 デプロイとは、「実行環境に実行可能なプログラムを配置すること」 リリースとは、「ユーザーがアクセスできる状態にすること」 ロールバックとは、「古いバージョンのリリースをリリースすること」 デプロイ戦略の種類 代表的と思われるものを取り上げる。 インプレースデプロイ...

デプロイ

プロキシサーバー(フォワードプロキシサーバー)・リバースプロキシサーバー・ゲートウェイサーバーの違いについて

インフラストラクチャ

概要 プロキシサーバー(フォワードプロキシサーバー)・リバースプロキシサーバー・ゲートウェイサーバーの違いについてまとめる。 プロキシサーバー(フォワードプロキシサーバー)とは クライアントとサーバーの間に配置され、両者の通信を代理で行う(中継する)サーバー。 クライアントからのリクエストを代理をする。 クライアント→プロキシサーバー→インターネット→サーバー メリットは次のようなものがある。 ...

フォワードプロキシ リバースプロキシ ゲートウェイ

GCPについての覚え書き

インフラストラクチャ

概要 Google Cloud認定アソシエイトクラウドエンジニアの試験に向けた勉強をしている際の雑多な覚え書き。 考え方 責任共有モデル 最小権限の原則 組織全体でガバナンスを発揮する 権限の分譲 ステートレスなアプリケーションとイミュータブルなインフラ 自動化によるトイルの削減 スケーラブル・高可用性・堅牢性 モニタリングと自動的な通知 cf. https://blog.g-gen.co.j...

GCP

MySQLで全文検索

データベース

概要 MySQLにはだいぶ前から全文検索が使えるになっているが、最近まで全然触ってもいなかったので軽く素振りしてみた。 MySQLで全文検索を始める MySQLで全文検索を利用するのはElasticSearchよりも圧倒的に手間が掛からない。 検索対象としたいカラムにFULLTEXT INDEXを付与、MATCH (col1,col2,...) AGAINST (expr [search_modi...

MySQL

PyroscopeでContinuous Profiling

アプリケーション

概要 PyroscopeというContinous Profilingのツールを導入してみた。 Continous Profilingについてはこちら参照。 What is continuous profiling? 今年に入ってからGrafanaが買収したらしい。 Grafana Labs が Pyroscope を買収してコード プロファイリング機能を追加 買収してからは、Grafana Pyr...

プロファイリング

DefaultServeMux以外でpprofを使う方法

アプリケーション

概要 net/http/pprofをDefaultServeMux以外(Goの標準のルーター以外)で使う方法についてメモ。 ハマりどころ pprofをblank importするだけではだめ。 package main import ( _ "net/http/pprof" ) DefaultServeMux以外のルーターを使う場合はblank importするだけ...

Golang Tips

Google Cloud認定アソシエイトクラウドエンジニアを受験した

インフラストラクチャ

概要 Google Cloud認定アソシエイトクラウドエンジニアを受験して合格したので、再受験するときや別の試験を受けるときのために勉強した過程を振り返っておく。 前提 ソフトウェアエンジニア7~8年目くらい。 GCPの経験は2年くらいあるかな・・どちらかというとAWSのほうが触っている感じ。 モチベーション 業務でAWSとGCPの両方を触る機会があり、AWSの方はアソシエイトレベルの認定を取得し...

GCP

Goのhtml/templateでURLをエンコードさせない

アプリケーション

概要 html/templateを使っているときに、テンプレートに渡すURLをエンコードさせたくなかった。 template.URLを使う Goのhtml/templateを使って、URLをテンプレートに渡すとエンコードされてしまう仕様になっている。 cf. https://pkg.go.dev/html/template#hdr-Contexts セキュリティ上の理由でこのような仕様になっている...

Golang Tips

buildxを使ったGoアプリケーションイメージのクロスコンパイル

アプリケーション

概要 プライベートで開発しているアプリケーションのイメージをクロスコンパイルする必要性に駆られて(ローカルの開発環境と本番の環境でアーキテクチャが異なっていることが起因)対応したのでメモ。 buildx Docker Desktopにはbuildxが標準で備わっているのでそちらを利用する。 Docker Buildx buildxを使うことでマルチアーキテクチャ対応のイメージを簡単に作ることができ...

Golang Docker