発明のための再発明

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

Azureにおけるデプロイ停止の取り組み - Gandalf

はじめに バグのないコードは書けないません。 それを前提に、ブルーグリーンデプロイやカナリアリリースが実践されています。 それらの方法ではどのように問題を発見するかが重要になります。 この記事で紹介するGandalfは、Azure内で稼働する障害検知のた…

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

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

動的にLBの重み付けを変化する - Taiji by Facebook

はじめに AWSのALBでも重み付けルーティングが採用されたように、LBでは重み付けの機能がよくありますが、Facebookでは時間やイベントなどによるトラフィック変化に対応するため、エッジサーバー上のLBの重み付けを動的に変化するようにしています。 この、…

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

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

秒間100万リクエストをさばく - Googleの共通認可基盤 Zanzibar

はじめに Googleの提供するサービス郡が共通して利用している認可システムにはZanzibarという名前がついています。ZanzibarはGoogleDrive・Google Map・Youtubeなどの巨大なサービスにも使用されています。 そのため、利用量も凄まじく 数10億のユーザー 数…

Aurora - クラウド時代のDBアーキテクチャ

はじめに Amazon Auroraは、AWSを触る人ならほとんどの人が利用を検討したことがあるでしょう。 Amazon社内ではOracleを止めたというtweetもありました SHUTDOWN ABORT the last Oracle database running Amazon Fulfillment! pic.twitter.com/DorqTua2Lt— J…

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は…

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

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

分散ストレージ Ceph - "Ceph: A Scalable, High-Performance Distributed File System"

はじめに 分散ストレージであるCephについての論文を読んだので紹介します。 最近CybozuのNecoプロジェクトが始まり、面白そうなことをやっているな、と思っていたたところ、Cephについてのブログが出ました。 これを読んで、「Ceph読んでみたいな」と思った…

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

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

「F1 Query: Declarative Querying at Scale」 - Google内部のクエリ実行プラットフォームF1の動き

はじめに 以前Dynamoの論文を読んだので、ついでにGoogleのF1についての論文読んだ。 Dynamoは古かったが、こちらは2018年発表と新しい。 以下のリンクから手に入る。 https://ai.google/research/pubs/pub47224 F1はSpannerと一緒の文脈に居ることが多くSpa…

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

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

Dynamo: Amazon’s Highly Available Key-value Store

はじめに AmazonがDynamodbを紹介した論文を読んだ。 2007年のもので、NoSQLブームの走りとなったものだったと思う。 コンピュータ・サイエンス関係の「おすすめの論文」のようなもので、よくおすすめされるので読んでみたが、意外と面白かったので、面白か…

BeyondCorp - A New Approach to Enterprise Security -

GitHubのを眺めていたら、ORYのoathkeeperを見つた。 これがGoogleが社内で使用している「BeyondCorp」を参考にしているということが書いてあったので、その論文を読んだ。 BeyondCorpとは GoogleがVPNの代わりに使用している、認証・認可のシステム。 人・…

gh-ostの動き

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

WebエンジニアがVRに手を出した軌跡

Web業界で働いていて、普段はRubyを書いているエンジニアがVRに手を出して、なんとか自分がしたかったことが形になりました。 その経験から、「VR開発ってこんな感じ」というのを伝えられればと思います。 結論を言えば、「Webエンジニアにとってはブラウザ…

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のリポジトリに直接入っているものと、別リポジトリに分けられている…

Dapperを読んだ

Dapperとは googleが社内で利用している、分散トレーシングツール https://research.google.com/pubs/pub36356.html この論文から出来たOSSとしてはtwitterによるzipkin(github)、uberによるjaeger(github)が有る。 内容 マイクロサービスだと1つのリクエス…

Amazonに見るi18n -「国際化対応」とは何を変える事か

サービスを海外展開したり日本にいる外国人にアピールしたくなった時、国際化対応が必要になります。 この記事を通して、「国際化対応したい」という話が出た時に「どこをどのように」対応することになるのか、対応範囲や見積などがなんとなく伝わればと思い…

i18nの書き方 from JavaScript

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