Carpe Diem

備忘録

混ぜるな危険 〜同期関数と非同期関数〜

概要

Node.jsといえば非同期やcallbackで有名ですが、1つの関数の中で非同期な処理と同期的な処理が混ざってしまうと期待しない挙動になることがあるので注意しましょう、という話です。

環境

  • Node.js 8.9.0

基本的な方針

  • 非同期な関数は全て非同期処理でまとめる
  • 同期的な関数は全て同期的な処理でまとめる

です。

続きを読む

C4インスタンスからC5インスタンスに移行するためのパフォーマンス検証

概要

前回のAMI作成方法に引き続き、移行前のチェックとして簡単なパフォーマンスチェックをします。

環境

負荷試験環境

インスタンスタイプ

サーバ インスタンスタイプ
攻撃ツール c5.2xlarge
C4テスト c4.large
C5テスト c5.large

攻撃サーバでCPUリソースが足りないということにならないよう、充分なスペックにします。

続きを読む

C5/M5インスタンス用のAMIをpackerで作成する

概要

先日東京リージョンにもC5/M5インスタンスが対応されました。
コスト的にC4/M4より10~15%ほど安くなるため、可能であれば逐次移行した方が良いです。
ただC5/M5からは

  • Elastic Network Adapter (ENA) 対応
  • NVMe対応のOSが必要
  • バイス名の変更

といった大きな変更が入っており、単純にインスタンスタイプを変更するだけだと動かない・パフォーマンスが十分に発揮できない可能性があります。

環境

続きを読む

Goのpprofの使い方【基礎編】

概要

pprofの使い方の備忘録として何回かに分けて書いてきます。
今回は前提知識として知っておくべきことを書きます。

環境

  • go 1.10.1

pprofは2つの計測方法がある

以下の2つのやり方があります。

  1. runtime/pprof が提供しているAPIを使ってファイルに出力する
  2. net/http/pprof を使ってプロファイル取得用の http サーバーを立てる

前者は短時間で実行が終了するようなケースで使います。
後者はWebサーバのようにずっと動かすプログラムのケースで使います。

続きを読む

Event LoopとMicrotasksについて

概要

以前

christina04.hatenablog.com

でMacrotasksとMicrotasksについて触れました。
ただこの時使ったのがPromisesetTmeout()だけで、他の種類の非同期関数を使った場合どうなるのだろう、と気になり検証してみました。

環境

  • Node.js v8.9.0
続きを読む

Angularでのコンポーネント→ビューのバインディング

概要

Angularではコンポーネント→ビュー方向のバインディングは以下の4種類があります。

これらの違いと使い分けを説明します。

環境

  • Angular v5.2.9
  • angular-cli v1.7.3
続きを読む

BigQueryのデータをUpdateする

概要

BigQueryは基本的にはログなど解析目的で利用するため、データ自体を更新することはありません。ただ

  • 一部間違ったログが入ってしまった
  • データの洗い替えが必要になった

みたいなケースが起き、解析結果が期待するものにならない場合は更新処理が必要です。
2016/11からDML(データ操作言語)が使えるようになったので、それを使って更新します。

注意事項

BigQueryは基本的に取得系メソッドをメインで利用するものなので、DMLに関しては以下のような制限があります。

f:id:quoll00:20180323112546p:plain

ref: Data Manipulation Language  |  BigQuery  |  Google Cloud

なので1レコードずつ更新するクエリをループで回すなんてことはせずに、一気に複数のレコードを更新するクエリを発行するようにしてください。

続きを読む