スキップしてメイン コンテンツに移動

第1回 Build Insider OFFLINE に参加してきました

6/8(土)に第1回 Build Insider OFFLINEに参加してきた。

飲食の供給が無料という非常に太っ腹なセミナーだった。
もちろんセミナー自体も無料なのに太っ腹なセミナーだった。
次回もあるならまた必ず参加したいものだ。

4つ参加してきた講演うち特によかった2つを、
以下箇条書きでそれぞれの講演のメモとか感想とかをつらつらと書きます。


■よりよい開発を目指すための、プロセス&ツール活用
※TFSはTFServerで、TFServiceはTeamFoundationServiceと記載しています。
  • Kinectの本を何冊か出版されている中村薫さんのセミナー。
     今日はKinectの話はでなかったが。
     一度ご本人を拝ませて頂きと思っていたが、やっと拝見できました。
     Blogはもとより、Kinectの本も非常に利用させて頂いております。
  • セミナー内アンケート
    • TFS知ってる → 9割
    • TFS使ってる → 3割
    • Scrum知らない → 2人
    • TFServiceを知っている → 5割
  • 結論
    • 状況、環境によって、プロセスツールを使い分ける
    • そのためにはプロセス、ツールの特徴を知る必要がある
    • 使いこなせる武器を複数持つこと
  • 道具の変化
    • 今もTFS、github、Jenkinsを使っているとのこと
  • TeamFoundatuionService
    • バージョンコントロール
    • 作業項目
    • 自動ビルド環境
    • テスト環境  → テストをサポートしているツールは少ないが、TFSなら可能
    • 今年価格の発表がある、らしい
    • 実は3週間に1回更新が入って、機能が増えている
  • TeamFoundationServer2012
    • pros
      • 割愛
    • cons
      • 環境構築、運用が手間
      • Windows環境以外のビルドは難しい
  • リリースのイノベーション
    • 例えばTeamFoundationServiceは3週間に1回リリースされている
    • TFSだって、3か月に一回Updateされている
    • どこだってやろうと思えばできるはずで、やらないといけない時代に来ている
  • TFServiceではもう使えます
    • 分散バージョン管理ができるようになった、らしい
    • いずれTFSにも利用できる
  • デモ
    • 便利そう
      • ビルド後にテストを実行とか
      • チェックイン前にビルドして、成功したらチェックインとか
    • ビルドに10分かかる!?

■.NET最先端技術によるハイパフォーマンスウェブアプリケーション
  • ソーシャルゲームの規模感
    • 1クリックごとにDBへの更新処理あり
    • 5000リクエスト/sec
    • デイリーで1億リクエスト
    • 実はPHPで動いている!
  • なぜC#
    • PHP(CakePHP)が重い!
    • PHPのリリースは楽なんだが、ビルドまでの道のりが長い
    • あーだこーだでC#がいい
  • AWSを利用した現在(PHP)の構成
    • ES2でApache200台 → C#で何台に削減できるかだろうか?
    • Memcashedはさようならの予定
  • 基本構成
    • WindowsServer2012
      • AWSのWindowsServer
      • IIS8+.NET Framework4.5
    • RDS
      • SQLServer?
    • Redis
      • インメモリ型KVS
      • キャッシュ
  • なぜリレーショナルデータベース
    • NoSQLでいい?
      • AzureTableとか無限スケールするし?
      • 機能面は満たせるが・・・
      • 水平分割が始まったら選ぶかもしれないが、少なくとも現状はRDBSで問題ない
  • DB側の性能問題対策のための垂直分割
    • 外部キーが付与できない制約などがあるため、C#でロジック組んで対応している
    • HWが進化しているから、垂直分割のままでいけるんじゃないか
  • MySQLのツール
    • HeidiSQL
      • 以外に便利
    • JetProfiler
      • SQLProfileの代わり、ないよりもいい程度だが、ないと苦しい
  • C#からのDB取扱い事情
    • EntityFrameworkなどの重量級O/Rマッパは不採用
  • Micro-ORM
    • Dapper
    • DataRow => Objectへの変換だけを担うもの
  • 性能比較
    • HANDCODED 55(単位不明の処理時間)
    • DAPPER 56(単位不明の処理時間)
    • EF(COMPILED) 120(単位不明の処理時間)
    • →EFは遅い。 HANDCODEDはプログラム記載量がネックになる。
       というわけでDAPPERを選択。
  • コネクションへの型付け
    • 現状テーブルは300程度
  • Redis
    • オンメモリで動作するデータストア
    • Key-Value以外にリスト・ハッシュ・ソート済みセットなどのデータ構造が使える
    • RDBSと組み合わせないと厳しいが、RDBSを補うには最適
    • 詳しくは C#のRedisライブラリ「BookSleeve」の利用法 参照
    • パイプライン処理ってのもあって、これがなかなかC#と相性がいい
  • シリアライズ
    • protobuf-netを利用
    • C++での性能比較では遅いって結果もあるが、C#との相性がいい
    •  結局シリアライズ、デシリアライズのアルゴリズムに依存する
  • BookSleeve
    • 非同期
    • 全てがbyte[]で返ってくるので、シリアライズする層を作っている
  • 非同期的シチュエーション2
    • Task.WhenAll
      • 複数タスクをこの一行で待てる
      • BookSleeveとの相性がいい
  • 非同期でのはまりどころ
    • TransactionScope内でawaitできない
    • 別スレッドになるので、実行時例外となる
    • 手動でBeginTransactionして回避・・・
    • デッドロック
      • .Eesult/Waitで取るとデッドロックする場合がある
      • 全てasyncで通せばデッドロックしないけれど
        • TransactionScope使いたいなら、その中で同期的に待つしかない
        • フィルターが未対応なので、フィルター内で書く場合は待つしかない
    • HttpContext.Currentが消滅する・・・
      • これからのWeb開発ではContextCurrentが存在しない場合もあることが前提
  • メモれず
  • APIアクセス
    • HttpClinet
    • DefaultはThreadPoolは最初Core数分。
      ThreadPool.SetMinThreadで設定可能。
      Core数を超えると、あるアルゴリズムで増やすか待つか判断する。
      ただ結局IO待ちが多いので、
      必要と分かっているなら最初から増やしておいたほうがい。
  • 数字は常に見えるところに
    • 何がどの程度早いのか、遅いのか常に意識できるように
      • 肌間隔を養う
      • 環境の違いによって、ネットワークによってはRedisがDBより遅いとか出てしまう
  • NewRelic
    • パフォーマンス監視サービスツール
    • インストールも超簡単!
    • スローリクエスト時の完全なスタックトレースが見れる
    • インストールすると若干遅くなるが、それ以上の利益ある
  • 現在グラニではHiring中です!
以上です。

コメント

このブログの人気の投稿

Excelのマクロの差分もGitHubみたいに見たいよね

なんやかんやでまだ残っているExcelマクロ。修正したはいいが、差分が・・・。 Google先生に聞いてみるとWinMergeでできるらしいが、なぜかうまくいかない。 そう、WinMergeもExcelもバージョンが新しくなっていたのでうまくいかなかったみたい。 前提は Excel 2013 WinMerge 2.14.0-jp63 over です。 以下差分を確認するための手順です。 WinMerge をインストール ここから WinMerge の2.14.0-jp-63 より新しいバージョンをダウンロード 画面に従ってぽちぽち押していけばいい。 ただし・・・このときに必ずカスタムインストールで プラグイン にチェックを入れること!!(このプラグインを利用します) WinMerge のプラグインの設定変更(やらなくてもOK) WinMerge を起動 プラグイン → プラグインの設定 → CompareMSExcelFiles.sct をダブルクリック ”ワークブックの情報を複数ファイルに展開する” にチェックを入れる Excel の設定変更 ファイル → オプション → セキュリティセンター → セキュリティ センターの設定 ボタンを押下 マクロの設定 を選択 ”VBA プロジェクト オブジェクト モデルへのアクセスを信頼する” にチェックを入れる WinMerge で差分を表示する WinMerge を起動して、比較したいファイルを二つ選択する プラグイン → 展開プラグインの選択 → ファイル展開プラグイ に CompareMSExcelFiles.sct を選択して OK ボタンを押下する 各シートの差分と合わせて、*.bas の形式でマクロの差分が表示される(はず)

間違ったフォーマットのプログラムじゃないんだけど

以下エラーに対し、 ファイルまたはアセンブリ 'SSPI'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 以下環境で対応した話です。 VisualStudio2012(C# ASP.NET MVC4.0) IIS7.5 とあるところのdllを使用中 ASP.NETをIISに発行しようとしたら、上記エラーが発生。 他のプロジェクトでは問題なく発行できているのに、 何かと思ってみたら、google先生に尋ねてみると、 DLLファイルの対象プラットフォーム(32bit/64bit)が異なる とのことでした。 このサイトでは対処方法として、 運用環境のプラットフォームに合わせ、適切なランタイムファイルを配布してください。 と記載されていますが、今回の私のようにとあるところのdllを使用している場合などは、 そうもいかない場合もあるでしょう。 そこでdllを変更できない場合には、 IISのアプリケーションプールの設定で、 32bitアプリケーションを有効化してあげることで対応できます。 以下手順です。 コントロールパネル → 管理ツール → インターネット インフォメーション サービス (IIS) マネージャー を起動します。 変更したいアプリケーションを右クリックして、詳細設定を選択します。 32ビットアプリケーションの有効化をTrueに変更します。 もう一度発行します。 ここまでです。 簡単だけど知らないとなかなかはまるかなって気がしますね。 独特のくせなのかもしれません。 そして、次なるエラー発生中です・・・。

SQLServer2008でのトランザクションログの切り捨て方

SQL Server 2008でとあるDBのトランザクションログが一杯に。 BACKUP LOG DatabaseName WITH TRUNCATE_ONLY を使ってトランケートしようとしたら、 'TRUNCATE_ONLY' はBACKUP オプションとして認識されません。 との冷たい返事。2008で廃止されていたのを忘れていた。 SQL Server 2008 で廃止されたデータベース エンジンの機能@MSDN そこでヌルデバイスを使用してバックアップを取得する方法で、切り捨てを試みる。 BACKUP LOG DatabaseName TO DISK = ‘nul’ GO するとまた冷たい返事。 現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。 2008では過去にフルバックアップを取得しておかないと、ランザクションのバックアップが取得できないことを忘れてた。てなわけで、まずはデータベースのフルバックアップを取得して、 BACKUP DATABASE DatabaseName TO DISK = ‘nul’ GO もう一度トランザクションのバックアップをして、やっと切り捨てれた。最初から単純にしておけばよかった・・・。