地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

2021-08-01から1ヶ月間の記事一覧

【memcached】 pymemcacheは障害が発生したmemcachedを自動で切り離す

まとめ pinterest/pymemcacheは障害が発生したmemcachedを自動でリバランスして書き込みに行かないような機能を持っている 特定ノード間だけで起きてたりするとデータの不整合が発生するかもしれないから注意が必要 memcachedのクライアントを選ぶときはこの…

【Redis】キャッシュスタンピード対策をPythonで実装してみる

背景 ryuichi1208.hateblo.jp この前描いてた記事のスピンオフ的な記事でキャッシュスタンピード対策をPythonで実装するとしたらどんな感じかなと思って調べてみた記事。内容としては以下の記事でやっていることの一部を掘り下げて考えてみたという感じです…

【systemd】Type=notifyについて調べたメモ

systemdのカスタムサービスファイルを書くときにどのTypeで起動を判定するかのTypeでType=notifyについて調べたメモです。 github.com Type=notifyとは 以下のような記載があります。フォアグラウウンドで実行を継続するデーモンで使えるType=simpleとほぼ同…

【Ruby】メモリの共有率を計算するスクリプトを書いた

github.com マルチプロセスモデルなどで動くアプリケーションがどれくらい他プロセスとメモリを共有しているのかを計算スクリプトを書いてみました。 Linuxに関してのCoWの細かい話は他記事で書いてるので省略。引数のpidからtgidを中で取得したりして子プロ…

【Linux】SO_REUSEPORTに入門してGracefulなrestartを目指す

ジムのマッサージ機に乗りながらsocket(7)のmanを読んでいたらSO_REUSEPORTというオプションがあって気になって調べたのでメモ SO_REUSEPORT (Linux 3.9 以降) Permits multiple AF_INET or AF_INET6 sockets to be bound to an identical socket address. T…

【Nginx】proxy_cache_lockが思ってたのと違った件

背景 pkg.go.dev ISUCONの過去問を眺めていたらキャッシュのThundering Herd問題を解決するのにsingleflightというライブラリを使った解決策があることを知ったので調べていたらNginxでも似たようなことをできそうと言うことを知ったので調べてみたメモ。 キ…

【Nginx】proxy_cache_bypassを使ってみる。

Nginx -> appみたいな構成でproxy_cacheを入れているとappまでリクエストが到達せずにNginxがリクエストを返すことができる。これはこれでとても便利なのでがブラウザのスーパリロード時はappまで貫通させたいみたいなケースがあったので調べたメモ。 結論 p…

New Game Opsが面白そう

qiita.com https://qiita.com/furandon_pig/items/840e853f7400ad54f65e

【Ruby】SYNCNTを調整して早めにタイムアウトさせる

自宅で動いてるVMが15台を超えそれぞれどのポートで何してるんだっけってなることが増えてきた。コマンド一発でどのサーバのどのポートがopenになってるのかを確認するコマンドが欲しくなったのでRubyで実装しようと思ってやったメモ。 実装方針 docs.ruby-l…

【MySQL】MySQLのEXPLAIN

mysql> explain select id from friends where sex = 20 and age = 1; +----+-------------+---------+------------+------+---------------+---------+---------+-------------+------+----------+-------------+ | id | select_type | table | partitions …

【Ruby】入門した

Rubyへ入門し始めたので感想とかをつらつらと。入門の動機は仕事で使う機会が出てきそうだから。がっつりアプリケーションコードを書く職種でもないけど社内の多くツールがRubyで書かれていたりアプリケーションを触る機会が出るとしたら知っておいて損ない…

【Go】SIGPIPEをハンドリングする

func main() { signal_chan := make(chan os.Signal, 1) signal.Notify(signal_chan, syscall.SIGPIPE) go func() { select { case <-signal_chan: os.Exit(1) } }() run() } func run() { for { _, err := fmt.Println("run!") if err != nil { if errors.I…