タグ

ブックマーク / techblog.kayac.com (50)

  • ISUCON8本戦出題記というよりぶっちゃけ工数感どうなの?って話 - KAYAC engineers' blog

    こんにちは! サーバーサイドサイドエンジニアの荒賀です。 普段はソーシャルゲーム事業部でゲームの開発したり、Lobi事業部でコミュニティサービスの開発をしたりしています。 さて、この度ISUCON8の戦問題の出題を担当させていただきました。 問題に関する解説は公式のブログを書きましたのでこちらを御覧ください。 ISUCON8 選問題の解説と講評 こちらでは技術的なことは置いておいて、業務としてどのようにISUCON8に関わってきたかを書き残しておきたいと思います。 (※カヤックの出題はISUCON3でもしており今回が2回目です。) はじまり (2017/12〜2018/2) だいぶ曖昧な記憶ですが、ISUCON7で優勝させていただいた直後の打ち上げの場で、僕の耳元で941さんが「来年はカヤックさんどうですか〜(ニヤニヤ)」と囁いてきたので、とりあえずニヤニヤで返したことを覚えています。

    ISUCON8本戦出題記というよりぶっちゃけ工数感どうなの?って話 - KAYAC engineers' blog
    kamipo
    kamipo 2018/11/01
  • 複数のデータベースをまとめてSELECTできるツール「mdq」を公開しました - KAYAC engineers' blog

    こんにちは。 2016新卒でLobiのサーバーサイドエンジニアをやっているmorikuniです。 今回は、mdqというGo製のツールを作ったので、その紹介をします。 mdqは複数のデータベースに並列にクエリを投げて、結果をJSONで出力してくれるというものです。 github.com mdqに近いコンセプトのツールとして、弊社の荒賀(@ken39arg)が作ったshard_promptがあります(#6「Shardingマジ怖い」tech.kayac.com Advent Calendar 2012)。 こちらはSQLを解析し、複数データベースにまたがる集約関数を一部サポートしていますが、MySQL専用かつ直列にクエリを投げるというものでした。 mdqでは複数データベースにまたがる集約関数はサポートしませんが、PostgreSQLなどMySQL以外のデータベースへのクエリや、並列処理による速

    複数のデータベースをまとめてSELECTできるツール「mdq」を公開しました - KAYAC engineers' blog
    kamipo
    kamipo 2017/02/13
  • 分散環境でユニークなidを発番するGo製プロダクト「katsubushi」のご紹介 - KAYAC engineers' blog

    Lobiチームの長田です。 今回はkatsubushiというアプリケーションを紹介します。 https://github.com/kayac/go-katsubushi katsubushiはid発番を行うアプリケーションです。 水平分割されたデータベースに対してユニークなidを発番するために作られました。 なお、記事中の「データベース」はMySQLを指します。 katsubushiの特徴 Snowflakeと同様のアルゴリズムでid発番 SnowflakeはTwitter社がかつて公開していたid発番アプリケーションです。 https://github.com/twitter/snowflake/tree/master 既にメンテナンスされておらず、masterブランチにはその旨が書かれたREADMEしか残されていません。 タグが切られているので、ソースコード等はそちらで確認できます。

    分散環境でユニークなidを発番するGo製プロダクト「katsubushi」のご紹介 - KAYAC engineers' blog
    kamipo
    kamipo 2016/10/28
  • Redis::Fast の reconnect について - KAYAC engineers' blog

    この記事は tech kayac advent calendar 9日目の記事です。 インフラチームの @tkuchikiです。 最近検証した Redis::Fast の reconnect について紹介します。 Redis::Fast とは Redis::Fast は、弊社 @shogo82148 作の高速な perl の Redis クライアントです。 社内の perl で書かれたアプリケーションは、Redis を使う場合、ほぼこのモジュールを使っています。 なぜ reconnect を考慮しないといけないのか Redis Sentinel や ElastiCache for Redis を使い、フェイルオーバーできる冗長構成を組んだ場合のことを考えます。 Master がダウンした際、自動で Slave を Master に昇格してくれるためダウンタイムが短くて済みます。 この場合、

    Redis::Fast の reconnect について - KAYAC engineers' blog
    kamipo
    kamipo 2015/12/10
  • 世界の何処かで MySQL(InnoDB)の REPEATABLE READ に嵌る人を1人でも減らすために - KAYAC engineers' blog

    tech.kayac.com Advent Calendar 2015 8日目担当の @m0t0k1ch1 です。 今年は MySQL さんにいろいろ泣かされた1年でした。特に、あの夏、幾夜をともにした実行計画のゆらぎは一生忘れな(ry さて。。。今回は、そんな中でも誰もが一度は嵌るであろう(?)MySQL(InnoDB)の REPEATABLE READ の嵌りどころについて自分なりにまとめてみようと思います。 この記事が目指すこと MySQL の各トランザクション分離レベルの嵌りどころについては、現状でも種々のブログ記事などでまとめられており、そんなに真新しい話ではないと思います。が、過去の自分のように、嵌ったことがない人間からすると、 話としてはなんとなく理解できる が、抽象的でいまいち身につかない というのが現実でした。嵌りどころに実際に嵌った今読み返してみると、「あーーー、、、そ

    世界の何処かで MySQL(InnoDB)の REPEATABLE READ に嵌る人を1人でも減らすために - KAYAC engineers' blog
    kamipo
    kamipo 2015/12/08
  • 今年の新人研修はgoでした - KAYAC engineers' blog

    新人研修のgo担当だったhandlenameです。 昨夏、Go言語を積極的に推進していきます。という宣言を出しましたが、 この一環として新人研修で扱う言語としてgoが選ばれました。 研修では何をやったのか Webサービスの開発・運用に関わる要素を対象としました。 goの研修に使える時間は合わせて10時間程度と限られていたこともあり、 かなり内容を絞っています。 開発環境の準備 研修に入る前に、受講者それぞれに開発環境の準備をしてもらいました。 brew install go 環境変数の設定 エディタの設定(保存時にgofmt自動実行) 幸いここで躓いた受講者はいなかったようです。 Tour of Go プログラミングは全くの未経験、という受講者はいなかったので、 いきなりTour of Gogoのコードを書いてもらいました。 基文法/制御構文/データ構造/並列処理 の4つのセクションに

    今年の新人研修はgoでした - KAYAC engineers' blog
    kamipo
    kamipo 2015/05/01
  • #10 Consulと連携するpull型デプロイツール stretcher - KAYAC engineers' blog

    tech.kayac.com Advent Calendar 2014 10日目担当の @fujiwara です。 最近書いている stretcher というデプロイツールの紹介をしたいと思います。 長いので3行で push型デプロイはホスト台数が増減しやすい環境に適さない 各種問題を解決するpull型デプロイツールを書いた Consul と連携するよ 中央ホスト配布(push)型デプロイの問題点 カヤックの自社サービスでは久しく Archer というツールを利用し、中央ホストから各デプロイ対象ホストrsync でファイルを配布する形のデプロイを行っていました。ここではこれを push 型と呼びます。 push型のデプロイは、ホスト台数が頻繁に増減する環境で以下のような問題があります。 新しくホストが起動してきた場合に、中央ホストからデプロイを行ったあとでないと (古い状態で起動してい

    #10 Consulと連携するpull型デプロイツール stretcher - KAYAC engineers' blog
    kamipo
    kamipo 2015/02/06
  • #17 うわさのdatabase.ymlをどうしているか カヤックCW編 - KAYAC engineers' blog

    こんばんは。クライアントワーク(受託開発)チームのnobu_ohtaです。 この記事は tech.kayac.com Advent Calendar 2014 17日目です。 この記事では、弊社クライアントワーク(受託開発)チームで production 環境で Railsdatabase.yml と secrets.yml をどう運用しているかを紹介したいと思います。 この話題最近ちょくちょく見かけますが、@mirakuiさんがやっているPodcastの Admins Bar #3: Fluentd, Rails, ActiveRecord でも取り上げられています。 なぜ機密情報をハードコードしないほうがいいか Rails 4.1からsecrets.ymlやdatabase.ymlで機密情報は直書きせずに環境変数から読む設定ファイルが生成されるようになりました。 アプリのリポジト

    #17 うわさのdatabase.ymlをどうしているか カヤックCW編 - KAYAC engineers' blog
    kamipo
    kamipo 2014/12/19
  • Dockerで非エンジニアでも開発環境を上げ下げできる、mirageというツールを作りました - KAYAC engineers' blog

    いやー今年もISUCONの予選参加募集がはじまりましたね! 昨年は出題側だったので胃が痛かったですが、今年は参加側ですので大変楽しみにしております。@acidlemonです。 Docker使ってますか? さてみなさん、Docker使ってますか? 使ってる? 使ってない? ぼくは使ってませんでした。えー今どきBlue-Green Deploymentやってないの? Immutable Infrastuctureじゃないの? と言われそうですが、世の中にはいろんなしがらみとかもあってなかなか簡単にエイヤーでコンテナに移行できるわけでもないのは皆さんなんとなく感じているのではないでしょうか。 とはいえ、最近これだけ話題になっているDockerですので、そろそろ使ってみたいなぁ…ということで、まずは開発環境をDockerで上げられるようにしました。 Dockerでコンテナを作るときには2つのアプロ

    Dockerで非エンジニアでも開発環境を上げ下げできる、mirageというツールを作りました - KAYAC engineers' blog
    kamipo
    kamipo 2014/09/16
  • #17 煩悩と苦しみについて - KAYAC engineers' blog

    どうも。退職者です。@kenjiskywalkerです。 teck.kayac.com Advent Calender 2013 17日目のエントリです。 前日は、@handlename先輩のプライベート情報を得るべく@SOMTDさんと必死になって質問していたら 何故か@handlename先輩が@damele0n氏のプライベート情報をペラペラとしゃべりだすという流れ玉を受けた @damele0n氏の#16 Leap Motionでおっぱいを揉む でした。 相変わらず揺らしてますね。最高です。 さて、去年は「「おちこんだりもしたけれど、私はげんきです」というエントリで tech.kayac.com Advent Calendar 2012の1日目を担当したのですが、誰の琴線にも触れませんでした。 そもそも退職者という身分でありかつ、ファッションの最先端、 南青山のサマリーで勤務しているとい

    #17 煩悩と苦しみについて - KAYAC engineers' blog
    kamipo
    kamipo 2013/12/18
    本当に学びがあった
  • #16 Leap Motionでおっぱいを揉む - KAYAC engineers' blog

    どうも。退職者です。@damele0nです。 teck.kayac.com Advent Calender 2013 15日目のエントリです。 前日は、まったく恨んではいないのですが僕のプライベートな情報を社内でリークした @handlename 先輩の #15 SublimeTextでも使い捨てファイルを開きたい でした。まったく恨んではいないのですが。 さて、去年は「JavaScriptでおっぱいを動かす」というエントリでtech.kayac.com Advent Calendar 2012の2日目から世間様に苦言を呈されたという事態を踏まえつつ そもそも退職者という身分でありかつ、渋谷のディストピアこと闇リエで勤務しているということをわきまえながら Leap Motionでおっぱいを揉みたいと思います。 Leap Motionって? もはや説明不要でしょうか。 [公式サイト] 今年(

    #16 Leap Motionでおっぱいを揉む - KAYAC engineers' blog
    kamipo
    kamipo 2013/12/17
  • #11 MySQL Master HA を AWS で動作させる場合のフェイルオーバー支援ツール MHA::AWS のご紹介 - KAYAC engineers' blog

    こんにちは、@fujiwara です。 2013年を振り返ると、春の新卒研修での社内ISUCON、秋のISUCON予選と選でずっとISUCONをやっていたような気がしていまして、さてそれ以外になにか……そういえばインフラ回りの仕事もしていましたね。 カヤックのサーバインフラ全体としては、Amazon Web Service(AWS) への移行が進んだ1年でした。いままで自社サーバでやっていたソーシャルゲームや、比較的アクセスが多いとある自社サービス(これは後ほど事例公開されるかも知れません) を、AWS上で構築したり移行したり、という仕事が多かったです。 AWSでサービスを構築する場合、MySQL については RDS を利用する EC2 インスタンス上に MySQL サーバを稼働させる というどちらかの手段を取ることになります。 RDSはフェイルオーバーやバックアップを自動でやってくれま

    #11 MySQL Master HA を AWS で動作させる場合のフェイルオーバー支援ツール MHA::AWS のご紹介 - KAYAC engineers' blog
    kamipo
    kamipo 2013/12/12
  • 2013年の新卒研修と社内ISUCONやりました - (2) ISUCON死闘編 - KAYAC engineers' blog

    技術部新卒研修担当の fujiwara です。 前回の記事「2013年の新卒研修と社内ISUCONやりました - (1) 研修編」に引き続き、新卒研修の最後を飾るイベント、社内ISUCONについて詳しく振り返ります。 社内ISUCONとは レギュレーションはこちらです。 各チーム1台ずつ使用できる仮想マシン上で、お題のアプリケーションを動作させる 外部からベンチマークを行って処理できたリクエスト数をスコアとする アプリケーション、OS、ミドルウェアなど、どのようなチューニングを行ってもよい ベンチマークスクリプトはデータの整合性をチェックするロジックが組み込まれており、アプリケーションとして不整合を起こしていることを検出するとFAIL(スコアなし) 10:00〜17:00 までの作業中には適宜ベンチマークを実行できる 作業終了後の最終計測でのスコアが高いものが優勝 (FAILしたら失格。1

    2013年の新卒研修と社内ISUCONやりました - (2) ISUCON死闘編 - KAYAC engineers' blog
    kamipo
    kamipo 2013/04/22
  • 2013年の新卒研修と社内ISUCONやりました - (1) 研修編 - KAYAC engineers' blog

    4月になり、新人が入ってくる季節になりました。技術部新卒研修担当の fujiwara です。 これまで弊社技術部では特に技術部としての研修というものを行っていなかったのですが、今年は何かやりたいねということで人事部に7日間確保してもらい、主に acidlemon と2人で新卒8人に研修をすることになりました。 研修の資料などは GitHub でプライベートリポジトリを作って作業しており、それをまとめたものを GitHub上で kayac/newbie-training として公開しています。 どのような内容にするかは事前に昨年度の新卒を含めたエンジニア陣で(社内勉強会でビールを飲みながら)話し合い、 現場で実務に追われてしまうと身につきにくい基礎的な内容 コードを書ける人は多いけどLinuxサーバの操作は不慣れな人が多いので、そのあたりを底上げする内容 をメインに構成してみました。また、7

    2013年の新卒研修と社内ISUCONやりました - (1) 研修編 - KAYAC engineers' blog
    kamipo
    kamipo 2013/04/22
    なにげに4日目がすごく良いと思う
  • #22 カジュアルに乱数を使う方法とその注意点 - KAYAC engineers' blog

    この記事はtech.kayac.com Advent Calendar 2012の22日目です。 @songmuです。ゲーム作ったりしてると、乱数が必要になってきますがそれについて書きます。 多くの人にとっては当たり前の話も多く出てくるかと思いますがご容赦ください。間違ってる記述があった場合は突っ込みください。 擬似乱数とは何か 計算機は単体では厳密な意味での乱数を生成することができません。実際には一様に分布する乱数の集合を算術的に求めている場合がほとんどです。 その乱数の集合は以下を満たす必要がありますが、そういう小難しいことは偉い人に任せて、巨人の肩に乗って解決してしまえば良いでしょう。 偏りがなく一様に分布している 途中の出力から未来が予測しづらい 高速に算出できるか つまり? 色々な疑似乱数生成法がありますが、多くの場合、 馬鹿でかい乱数の循環リストがある と考えるとわかりやすいで

    #22 カジュアルに乱数を使う方法とその注意点 - KAYAC engineers' blog
    kamipo
    kamipo 2012/12/25
  • #14 「2012年 私の中のマイイノベーション」tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blog

    @kenjiskywalker 氏に「2012年 私の中のマイイノベーション」について記事を書けと脅されながらこのエントリを書いております。 振り返ってみると今年もいろいろイノベーティブな出来事があったので思い出せる範囲でまとめてみようかとおもいます。 GNU screen から tmux に移行した screenとくらべるとtmuxはなかなかベンリでイノベってますね。 tmux + irssi + canything で Anything 風チャンネル切り替えする tmux で pbcopy みたい記事を書いてたみたいです。意外ととあんまり書いてなかったですね! mosh を使い始めた ssh のかわりにいくつかの環境で mosh を利用し始めました。 僕は MacBook Air 一つでいろいろなところで作業をするのですが、ssh だと移動するたびに接続し直しになって面倒だし、 とくに

    #14 「2012年 私の中のマイイノベーション」tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blog
    kamipo
    kamipo 2012/12/14
    MacBook Air 一つでまじイノベーティブや
  • #10 2012年に作ったものを振り返りつつProcletマジ便利 - KAYAC engineers' blog

    2012年も残すところあと20日ほどとなりましたが皆様いかがお過ごしでしょうか。@fujiwara です。 このエントリは tech.kayac.com Advent Calendar 2012 10日目の記事です。 テーマが「私の中のマイイノベーション 2012」ということで、まずこの1年に作ったものを自分の blog エントリから振り返ってみますと… Perl から Fluentd にログ出力 - Fluent::Logger リリース 今年一番話題になったミドルウェアといえば fluentd でしょうか。その fluentd に Perl からログを出力するためのモジュールです Parallel::Benchmark というモジュールを書きました 並列にプロセスを起動して負荷を掛けるベンチマークを簡単に作るためのフレームワークです。弊社の主にソーシャルゲーム案件で、リリース前の負荷テ

    #10 2012年に作ったものを振り返りつつProcletマジ便利 - KAYAC engineers' blog
    kamipo
    kamipo 2012/12/12
  • #6「Shardingマジ怖い」tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blog

    最近子供が産まれたaraga(@ken39arg)です。 このエントリはtech.kayac.com Advent Calendar 2012 6日目の記事です。 テーマは「私の中のマイイノベーション 2012」 2日目の記事を見て、条件反射的に僕もおっぱいについての記事を書こうと思いましたが、 産まれた子供が「お父さんはいつもおっぱいのことばっかり考えていて気持ち悪い」と思ってしまったらと思うと、こんな危険な橋を渡るわけには行かず、 実際いつもおっぱいのことばかり考えているんですけど、おっぱいのことなんて全然興味ないです。 息子よ、父さんはいつだってまじめに働いているよ! というわけで今年作った"まじめな"ツールのMySQL::Sharding::Clientを自画自賛したいと思います。 MySQL::Sharding::Client MySQL::Sharding::Clientは一言

    #6「Shardingマジ怖い」tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blog
    kamipo
    kamipo 2012/12/06
  • #2「JavaScriptでおっぱいを動かす」 tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blog

    カップル爆発しろ どうも。「何かよく知らないけど訳分かんない人だと思ってた」と社内で最近言われたHTMLファイ部のdamele0nです。 このエントリはtech.kayac.com Advent Calendar 2012 2日目の記事です。 テーマは「私の中のマイイノベーション 2012」 季節のせいか周囲ではカップルが続々と誕生して次々とイノベーションを起こすなか、僕はといえば相変わらず人生にしかれた非モテのレールを光のスピードで突き進んでいます。 僕だって、2人でイノベーションを起こしたい…。 僕だって、冬のせいにしたい…。 僕だって、クリスマスに七面鳥抱えながら海岸沿いを2人でキャッキャウフフしたい…。 僕だって、ちちくりたい…。 僕だって、僕だって、僕だって…。 安心してください。 僕は、なんですか? あなたは、なんですか? そう、エンジニアです。 無いものは作ればいい。世界なん

    #2「JavaScriptでおっぱいを動かす」 tech.kayac.com Advent Calendar 2012 - KAYAC engineers' blog
    kamipo
    kamipo 2012/12/05
  • #3 「あまりApplication cache(cache manifest)のことを甘く見ない方がいい」 Advent Calendar 2012 - KAYAC engineers' blog

    最近色々あってAndroidと心を通わせられるようになってきたago(@kyo_ago)です。 このエントリは tech.kayac.com Advent Calendar 2012 3日目の記事です。 Application cache(cache manifest)とは WHATWGやW3で議論されているHTML5 Offline Web Applicationの仕様の一部です。 細かい仕様等に関しては最後に参考URLをつけたのでそちらをご覧ください。 ここでは色々誤解の多いApplication cacheの使い方をご紹介したいと思います。 使い方 .appcacheの拡張子に対してtext/cache-manifestのMIMEタイプを設定してください。 .appcacheファイルは以下の形式で作成してください。 CACHE MANIFEST: #更新用ID(日付+連番等) キャッ

    #3 「あまりApplication cache(cache manifest)のことを甘く見ない方がいい」 Advent Calendar 2012 - KAYAC engineers' blog
    kamipo
    kamipo 2012/12/05