タグ

ブックマーク / ameblo.jp/principia-ca (44)

  • 『MySQL初心者に贈るインデックスチューニングのポイントまとめ2014』

    サイバーエージェント公式ブログをご覧の皆さんこんばんは、インフラ&コアテク部の須藤(@strsk)です。普段はAmebaのソーシャルゲーム全般のインフラを見つつ、日語ラップの啓蒙をしながら弊社社員を素材にコラ画像をつくったりしています。好きなAAは麻呂です。 はい、というわけで今回はMySQLインデックスチューニングの基的な流れについてまとめてみました。 ソーシャルゲームは更新も参照もめちゃくちゃ多いです。数秒のレプリケーション遅延も致命的なので適切なテーブル、クエリとインデックス設計が重要です。(何でもそうですけど)インデックスが多くなると更新コストなどが懸念されますが、インデックスが正しく使われていないクエリを放置している方が悪です。そんなこんなで、割と例も偏ったりしてるかもしれませんがあしからず。 前提としてはInnoDBを想定しています。MyISAMはほとんど使っていません。

    『MySQL初心者に贈るインデックスチューニングのポイントまとめ2014』
  • おすすめオブジェクト指向練習方法 | サイバーエージェント 公式エンジニアブログ

    はじめに みなさんはじめまして。 アメーバ事業ゲーム部門でJavaエンジニアをやってる朝倉です。

    おすすめオブジェクト指向練習方法 | サイバーエージェント 公式エンジニアブログ
  • 『コードのバグはコードで見つけよう!』

    こんにちは。 アメーバピグでNode.jsを使って開発をしている中村と申します。 平日はエンジニア、土日は主夫として働いています。 さて、早速ですが、この記事ではESLintを使って、JavaScriptのソースコードのバグを発見する手順をご紹介したいと思います。 ESLintとは ESLintはNicholas C. Zakas氏が中心となって開発しているJavaScriptLintツールです。 JavaScriptLintツールといえば、最近ではJSHintが定番だと思います。 ESLintはJSHint同等の機能を持つ他、解析ルールが完全にプラガブルになっており、独自ルールを自由に追加できるという特徴があります。 例えば、JSHintでいうところの、strict(strict modeで実行されるかをチェック)というオプションは下記のURLのように個別のルールとして実装されていま

    『コードのバグはコードで見つけよう!』
  • 『2-0の魔力なんて無かった』

    皆様こんにちは、アメーバのデータ分析に携わっている和田(@wdkz) です。あと少しでサッカーワールドカップ2014が開幕しそうな今日このごろ(*執筆時点)、サッカー好きな自分としては楽しみで仕方ありません。ちなみに好きな(だった)選手はアルベルティーニ、グアルディオラ、ピルロです。今回のワールドカップも2006年の大会同様に大活躍するピルロを見たいですねー。また、大久保のサプライズ選考で話題となった日本代表にも期待しています。大久保といえば自身の名を冠した「オオクボ」というフェイントがあることは皆さんご存知でしょうか?スペインマジョルカ時代にも試合で使っていたので、ヨーロッパでは「クライフターン」に匹敵するくらいの知名度があるはずです(きっと)。 というわけで、記事ではサッカーワールドカップのデータをRを使って分析してみたいと思います。 今回分析する項目 1.  ゴールの生じやすい時間

    『2-0の魔力なんて無かった』
    manabou
    manabou 2014/06/26
  • 『アメーバピグにおけるDB構成&対応記』

    2ヶ月前にインフルエンザとウィルス性胃腸炎でひどくダメージを受けた増田(@masudaK)です。アメーバピグは2009年2月に始まったサービスで、FLASH・Javaで作られています。そして、データストアにMySQLを用いてます。記事では、わたくしが2年ほど見続けているアメーバピグのDB環境について構成や、日々どのようにして問題と向き合っているかを紹介したいと思います。インフラ寄りの内容が多いため、アプリ寄りの話は弊社生沼の資料を御覧ください。 1. 構成と規模 1.1. 構成 まず構成ですが、読み書きはすべてマスターへ行うようにしています。そのため、スレーブには参照を向けず、ホットスタンバイとして使っています。バージョンに関しては2012年中旬までは5.0を使ってましたが、DC移転にあわせて5.5にあげました。ロック機能を用いたシャード構成をしてまして、2014年3月現在6シャードにな

    『アメーバピグにおけるDB構成&対応記』
  • 『Javaプロジェクトでテストをたのしく書くための試み』

    こんにちは、Ameba事業ゲームプラットフォーム室の山田(@stormcat24)です。 自分のミッションは主にゲーム部門の開発の改善で、最近はScalaでモナ・・・しながらツールを書いてたりClojureに手を出したりしています。 はじめに ところでみなさんJava書いてますか?サイバーエージェントでは最近node熱が高いのですが、Javaプロジェクトもまだまだ根強く存在します。僕も隙あらばScalaをぶっこもうとしてますが、大人の事情でまだまだJavaを書くシーンも多いのです。 で、そんなテンションが上がりにくいJavaプロジェクトをやっていく上で、せめてテストくらいはなるべくたのしく書きたい!ということで、今のプロジェクトで取り入れた施策を簡単にですが紹介します。 めちゃくちゃ尖った技術を使ってるわけではないですが、これらをやっておけばそれなりに楽しく書けるかなと思ってますので、

    『Javaプロジェクトでテストをたのしく書くための試み』
  • 『ぼくがかんがえたさいきょうの LDAP テスト法』

    こんにちは。 全社システムの吉田です。 私の所属する全社システムでは、主に社内向けシステムの構築や運用を行っています。先日、社内の認証に用いている LDAP サーバーのバッチを作成しました。 全社システムでは、コーディングをする際には主に Ruby を用いています。 Ruby から LDAP とお話するには、ActiveLdap というモジュールを使用しました。ActiveLdap の利用法についてはるびまに記事が載っています。Rails を使用した事のある人ならば、きっと直感的に使用出来ると思います。 ところで、このバッチ処理のテストはどうすれば良いでしょう?? 出来れば LDAP のモックを使った Unit Test を書きたい所です。でも、適当なモックを探して見たのですが、なかなか見つかりませんでした。Schema 登録無しで OpenLDAP と ActiveDirectory の

    『ぼくがかんがえたさいきょうの LDAP テスト法』
  • 『Redisとハサミは使いよう』

    ロック機能のポイントはSETNXです。 指定したキーがなかった場合は値をセットして1を返し、 既に存在する場合は何もせず0が返ってきます。 つまり、1はロック成功、0は他からロック済みと判断することができます。 それでは実装に進みましょう。 まずロックのインタフェースを用意します。 public interface Lock { public void lock() throws TimeoutException; public void unlock(); } 最低限のロックとアンロックを用意しました。 続いて中身を実装します。 public class RedisLock implements Lock { private static final String LOCK_KEY_PREFIX = "lock:"; private static final int LOCK_EXPIR

    『Redisとハサミは使いよう』
  • 『Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム』

    Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム | サイバーエージェント 公式エンジニアブログ

    『Node.js Cluster+Socket.IO+Redisによるリアルタイム通知システム』
  • 『Amebaのログ解析基盤にCloudera ImpalaとPrestoを導入しました』

    (この記事は、Hadoop Advent Calender 2013 の12日目の記事です) こんにちは、Amebaのログ解析基盤Patriotの運用をしている、鈴木(@brfrn169)と柿島大貴です。 Patriotについては以下をご覧ください。 http://ameblo.jp/principia-ca/entry-10635727790.html http://www.slideshare.net/cyberagent/cloudera-world-tokyo-2013 今回、Amebaのログ解析基盤PatriotにCloudera ImpalaとPrestoを導入しました。 Cloudera ImpalaとPrestoのインストール方法や詳細ついては、下記URLをご覧ください。 Cloudera Impala http://www.cloudera.com/content/clo

    『Amebaのログ解析基盤にCloudera ImpalaとPrestoを導入しました』
  • 『redisをsentinelとAliasIPを利用して冗長化』

    どうも初めまして2012年度入社の社内ニート予備軍editnukiです。 普段は引きこもって WebSocketで監視もリアルタイムに を書いた社内ニートさんの下でコミュニティサービスのインフラをやっております。 運用面以外ではrpmパッケージ作ったりしています。 さて、題ですがコミュニティサービスでもredisを利用したいという声が最近多くなりいくつかのサービスではredisを導入しているのですがマスターとなるredisが死ぬと更新系が一切できなくなるため、マスターが死んだ時はアプリの向き先をスレーブに変更しなければなりません。 今までのredisの構成としては下図の様な構成でした。 redisの2.6系がリリースされた時に「sentinel」というフェイルオーバーの機能が追加されました。 詳細は公式ドキュメントをご参照ください。 フェイルオーバーしたとしてもアプリ側にマスターが切り替

    『redisをsentinelとAliasIPを利用して冗長化』
  • 『弊社の最近のDevOpsへの取り組み』

    はじめまして。Amebaでインフラを担当しています山口と申します。 某所ではリア充イメージ(?)の強い弊社ですが、所属するインフラ部門は男性100%で構成されている上、私は女性っぽい名前ながらも中年のおっさん(趣味料理)でございます。すんません。 それはさておき、ご存じの方もいらっしゃるかもしれませんが、弊社ではオーケストレーションツールとしてChefを使っております。私は参加しませんでしたが、最近、ChefConf 2013も開催されたことですし、最近の弊社でのDevOps、特にその中でも一風変わったChefの使い方についてお伝えしようと思います。 EC2インスタンスをつくる 最近ではOpsWorksなんかもありますが、稿執筆時点(2013年6月)ではまだまだ発展途上で、弊社がサービスを作る上で必要な機能が網羅されていませんでしたので、自前のChef Serverを利用しています。

    『弊社の最近のDevOpsへの取り組み』
    manabou
    manabou 2013/08/08
  • 『lombokで快適Java生活』

    どうもこんにちは、社内ではJava嫌いで有名になってしまった oinume です。最近Javaに慣れすぎてむしろスクリプト言語が苦手になってきています。今回は「これがあればJavaでの開発もそんなにストレスないかもなぁ」と思える個人的な3種の神器のひとつである lombok を紹介します。 lombokってなに?一言でいうとJavaの野暮ったいgetter/setterメソッドなどを自動的に生成してくれるソフトウェアです。例えば @Data アノテーションをつけて以下のようにメンバー変数を定義するだけで、lombokがgetter/setter/equals/hashCode/toStringのメソッドをコンパイル時に生成してくれます。 package sample; import lombok.Data; @Data public class User { private int id;

    『lombokで快適Java生活』
  • 『Velocity 2013 レポート』

    ちょりーっす!コミュニティ部門でWebデベロッパーをしています石(@t32k)です。今回は6/18-6/20、米国のサンタクララで開催されたVelocity 2013のレポートを書いてみるよ。 Velocityは『ハイパフォーマンスWebサイト』の著者でも有名なSteve Souders氏が2008年から開催している、Web Performance(フロント、バックエンド問わず), Web Operationsなどを幅広く取り扱ってるカンファレンスです。また同名のカンファレンスが、ニューヨーク、ロンドン、北京でも開催されており、まさしく世界的なカンファレンスと言ってもいいでしょう。 『ハイパフォーマンスWebサイト』を読んだ時から、私にとっていつかは行きたいと思ってた憧れのカンファレンスだったので、3日間興奮しまくりでした。その中でも特に印象的だったTwitter社のMarcel Dur

    『Velocity 2013 レポート』
  • 『WebSocketで監視もリアルタイムに』

    こんばんは。社内ニートの佐野と申します。所属はいちおAmebaのインフラチームです。Twitterもやっていますがフォローする価値はないです。つぶやいているのはメシと酒の話と下ネタだけです。 最近、組織改編とかもろもろありましてこのたびは雑用からニートになりました:(;゙゚'ω゚'): あまり目立たないように生きてたんですが、何気にこのブログへの登場は3回目になります...。前回は2012年12月に「QCon San Francisco 2012の参加レポ」を書かせていただきました。その前は2012年5月に「Virident FlashMAXの検証」として名前だけ登場しました。なんか、ニートだけど会社に貢献してる気がしてきた(^ρ^) そんなわけで以前WebSocketを使った監視ツールもどきを作ったので、それについての簡単な説明と、各種技術要素(Python, Jolokia)のTips

    『WebSocketで監視もリアルタイムに』
  • 『redis、それは危険なほどのスピード』

    どうも、プラットフォームDivでエンジニアをやっている Wataru です。 最近3人目の子供が産まれて、産後自宅勤務をさせてくれた弊社はとてもいい会社だと思います。出産予定のあるエンジニアのかたは是非弊社に転職を。 さて、今回はRedisの紹介をさせて頂きたいと思います。 Redisってすごくマイナーなわけではないのですが、めちゃくちゃ便利なのにあまり注目されていないなーという印象があるので、これを機会に是非使ってみてもらえると嬉しいです。 Redisって何?Redisとは「remote dictionary server」から名前が付けられたオープンソースのkey-valueデータストアです。 MemcacheDB等のKVSとの最大の違いは、格納するバリューがデータ構造というところです。 つまり、リスト・セット・ハッシュなどのデータ構造で格納できるのでバリューに対してアトミックな操作が

    『redis、それは危険なほどのスピード』
  • 『burp suiteによる初歩のWeb監査』

    アメーバ事業部のセキュリティチームの伊藤と申します。 アメーバでは日々、新しいサービスを開発しています。セキュリティチームのお仕事には、それらのサービスにセキュリティ上の問題が存在していないかどうかを調査する(以下、監査)という事も含まれます。※監査専門のベンダに調査を依頼することもあります。 今回は、私たちセキュリティチームが、どのようにWebアプリケーションの監査をしているのか、その一部を簡単に紹介しようと思います。 ※エントリで紹介している手法は自分の管理しているサイト以外に適用しないでください ■Webアプリケーションの監査とは何を見ているのか 簡単にいうと、ブラウザ等から、Webアプリケーションサーバに対して送られるリクエストを変更して、サーバからの応答がどのように変わるのかを見ています。※ほかにもいろいろやっています。 ■具体的にはどうしているのか Webアプリケーションを

    『burp suiteによる初歩のWeb監査』
  • 『Spring3系におけるJSR-303 Bean Validationについて』

    みなさん、はじめまして。 Amebaの基盤改善チームでアプリケーションエンジニアをしている森です。 仕事ではAmebaの会員登録システムを担当しています。 唐突ですが、今回このブログではJSR-303 Bean Validationについて導入方法を解説します。 このテーマを選んだ理由はSeasar(SAStruts)のようなアノテーションで行うバリデーションがSpring MVCで出来ないかなぁと思った事です。幸いSpring3.0からJSR-303 Bean Validationが標準サポートされた事でアノテーションの利用が簡単になりました。以下に詳しく見ていきます。 (JSR-303 Bean Validationの概要) ●JSR-303 Bean Validationの目的 Java仕様を策定しているJCP(Java Community Process)が、JavaBeanオブジ

    『Spring3系におけるJSR-303 Bean Validationについて』
  • 『OSキャッシュの便利な利用方法』

    アメーバ事業部スマートフォンゲームDiv兼ソーシャルゲームDivの岩と申します。 アメーバのソーシャルゲーム開発を担当しているエンジニアです。 今回は、アメーバのソーシャルゲームを開発する際によく使われる、WEBサーバ上でのOSキャッシュを、Java、Springを利用して実装する便利な方法をご紹介いたします。 またここでのOSキャッシュとは、JavaのJVM上でのヒープメモリにsingletonで情報を格納することとします。 ■まず何をキャッシュしたいのか? 下記のデータを対象にします。 ・DB上のマスター情報で参照のみのデータ よくあるマスタデータです。毎回DB上にSQLを投げてもいいのですが、結果は同じになります。 システム側での情報の更新も行いません。キャッシュしたいですよね!! よく使うキャッシュは、下記の3点です。 ・MySQLのクエリーキャッシュ ・Memcached ・

    『OSキャッシュの便利な利用方法』
  • 『ビルド・リリース自動化への足掛かりとしてのGroovy・Gradle・Spock』

    はじめまして!Ameba事業部プラットフォームDivでアプリケーションエンジニアをしている池田(@yukung)です。 私は2011年5月に大手SIerから転職し、サイバーエージェントへ入社しました。前職では主に金融業界をターゲットにしたBtoB向けのシステム開発に多く携わってきましたが、開発作業の中でこんな経験を割とたくさんしてきました。 ・ソースコードやドキュメントの管理にバージョン管理ツールを使わずに、Hoge_yyyyMMdd.javaとかDB設計_yyyyMMdd.xlsみたいなファイル管理をしてどれが正しいドキュメントかわからなくなりカオスになる ・ソースコードの静的チェックツール(CheckStyleやFindbugsなど)を使わずに、目視と気合でひたすらソースコードレビューする ・Excel表で書かれたテストケースを睨みながら、手でケースに沿ったオペレーションをしてデバッ

    『ビルド・リリース自動化への足掛かりとしてのGroovy・Gradle・Spock』