発明のための再発明

Webプログラマーが、プログラムの内部動作を通してプログラムを作る時の参考になるような情報を書くブログ(サーバーサイドやDevOpsメイン)

プログラミング

非同期で大量データをさばく

はじめに 最近、マイクロサービスの拡大と共にキューやストリームを使用した非同期処理が増えたと思います。 この記事では、Netflix・Pinterest・Airbnbが公開した、各社の非同期処理の具体例を紹介します。 (各事例は簡単な概要の紹介しか書かないので、よ…

Dgraphによる高速並行キャッシュ - Ristretto

はじめに RistrettoはグラフデータベースのDgraph内のキャッシュが遅いという問題から生まれたキャッシュライブラリです。 GolangWeekly(@golangweekly)で紹介されていたのを見つけて気になったので、動きを追ってみました。 Ristrettoは、以下の特徴を持っ…

Uber製Docker registy「Kraken」とTorrent

Krakenとは Uberから、Krakenという拡張性と可用性に焦点を当てたP2P型のDocker registryが公開されました。 3Gのdocker imageを2,600ホストから同時にダウンロードしても、半数以上のホストが10秒で完了し、99%のホストで18秒以内にダウンロードを完了する…

CoreDNSにおけるプラグインチェーンの実装

はじめに CoreDNSはサービスディスカバリ機能を持ったDNSです。 CNCFでGraduatedになっているプロジェクトで、KubernetesのデフォルトDNSにもなっています。 公式: https://coredns.io/ GitHub: https://github.com/coredns/coredns この記事では、CoreDNSは…

稼働システムのマイグレーションの痛みを和らげる技法

サービスを長く継続すると避けられないのが「マイグレーション」です。 しかし、マイグレーションには多くの手間がかかる上に致命的なバグも出やすく、難しい作業です。 そんなマイグレーションを実践し、詳細を公開している企業があります。 それを参考にど…

巨大企業のサーバー構成や内部ツールを覗く

はじめに この記事は設計・アーキテクチャ Advent Calendar 2018の1日目の記事です。 大きなサービスを支えるのは一筋縄では行かず、考えることは多くあります。しかし、ありがたいことに巨大な企業の中にも自社のサーバー構成やそれを支えるツールを公開し…

yarnを使ってimportが解決されるまでを追う

yarn add から webpackがimportを解決するまでを追う Javascriptでは、Yarnとwebpackを使うのが主流なので、それらがどのような動きをしているかを追った。 事前準備 動きを追うために以下を用意した コード Verdaccio コード コードの配置は以下 . ├── buil…

gh-ostの動き

gh-ostとは gh-ostは、binlogを利用したmysql用のデータベースマイグレーションツールです。 大抵のマイグレーションツールがtriggerを使いつつ移行するのに対して、gh-ostはbinlogを使うことで、負荷制御やテスト可能性を実現しています。 githubはここ。 g…

gVisorのechoを読む

gVisorが面白そうだったので、どんな風に動いているか書きます。 使用したコミットは、 GitHub - google/gvisor at c400a0356b856e71fd30e3fe10372d7bb94356cb です。 gVisor概要 gVisorは、先日googleが公開した、アプリケーションとホストの分離を目指した…

javascriptで記号プログラミング

JS記号プログラミング入門 - Qiita で紹介されていた記号プログラミングがとてもおもしろかったので、chromeで作ってみました コンソールに大きめの文字で「hello crazy hacker」と出力するコードです。 綺麗な書き方は、 console.log('%chello crazy hacker…

DBマイグレーションを行う技術

データベースのスキーマを変更するということはデータをいじる行為であり、最悪の場合データが消えます。 最悪の事態にはならなくとも、思わぬ場所に影響が起きたり、データの不整合が発生する恐怖と戦う必要が有ります。 テストや切り戻しを含めて計画し、…

grpcの動き

grpcがどんな風に動いているかを覗いてみます。 grpcとは 下の画像のようにgoogle製のrpcフレームワーク言語をまたいで扱えるのが特徴です。 クライアントは言語ごとに作られていて、grpcのリポジトリに直接入っているものと、別リポジトリに分けられている…

i18nの書き方 from JavaScript

Webサイトを多言語化する 最近多言語化に関する仕事をしている関係でi18n(l10n)用のライブラリを色々と見たので、 i18nライブラリによくある使い方を紹介します。 とは言ってもほとんどのライブラリは同じような書き方をするのでJavaScriptを例にします。 ラ…