ブックマーク / labs.gree.jp (74)

  • オブジェクト指向のはなしとGREE Tech Conferenceのおしらせ | GREE Engineering

    みなさまこんにちは、グリー株式会社でCTOをやっておりますふじもと (@masaki_fujimoto) と申します。 今回は1週間後に控えたGREE Tech Conference 2022の宣伝も兼ねて、1年ぶりくらいにソフトウェアについてつらつらと書いてみます。というか、なにはなくとも10/25 (tue)、来週開催のGREE Tech Conference 2022にぜひぜひご参加ください。ひさびさにオフラインでも開催しますので! あとついでに、1年くらい前からデジタル庁というところのCTOも兼ねさせていただいてまして、なんかやっぱりあれこれ質問いただくことも多いので、そのあたりどうよ、みたいなところもついでに少しだけ触れてみたいと思います (なんかGREE Engineers' Blog、というところで書くにはちょっとコンテキスト違うかなとも思うのであくまでおまけ、ってことで..

    オブジェクト指向のはなしとGREE Tech Conferenceのおしらせ | GREE Engineering
  • EC2からFargateへの移行 ~shadow proxyとカナリアリリース~ | GREE Engineering

    こんにちは、メディア事業でエンジニアをしている木村洋太です。 昨年のGREE Tech Conferenceでは「LIMIA」のフレームワーク移行プロジェクトにおけるコードの自動修正について話させていただきましたが、今回は同時に行ったインフラ移行について紹介いたします。 EC2からFargateへの移行例は多く存在しているとは思いますが、今回の移行では安全な移行のために、shadow-proxy環境での移行前のテストやEC2とFargateの同時稼働によるカナリアリリースなどさまざまな工夫を行いました。これらの中で得られた知見や失敗をまとめられたらと思っています。 インフラ移行の概要 フレームワーク移行プロジェクト フレームワーク移行プロジェクトでは、グリーが運営するメディアの一つである「LIMIA」のフレームワークをFuelPHPからLaravelへ移行することを目的としていました。 移

    EC2からFargateへの移行 ~shadow proxyとカナリアリリース~ | GREE Engineering
  • 10年もののメトリクス収集機構をリプレースした話 | GREE Engineering

    インフラのいわほり(@egmc)です。 久々のエントリとなりますが、今回はインフラのMonitoring Unitとして長期的に取り組んでいた監視システムのリプレースについてのお話になります。 背景含めて長いエントリとなりますが、監視システムの長期的な運用の考え方、リプレースにあたって考慮した点などなにがしか参考になる点があれば幸いです。 何を移行したか? グリーのインフラ環境では冒頭で述べたMonitoring Unitというインフラ横断で監視システムを提供するチームが商用環境向けの共通システムの提供/運用を行っています。 監視システムにおけるリソースモニタリングシステムの構成として、オンプレ環境ではGanglia、AWS環境ではPrometheus/Grafanaスタックを採用、運用してきました。 規模感としてはざっくりと監視対象ノードがオンプレサーバが約1500台、AWS側は台数変動

    10年もののメトリクス収集機構をリプレースした話 | GREE Engineering
  • QUICやHTTP/3で利用を避けるべき送信元ポートの利用状況 | GREE Engineering

    どうも、インフラの後藤です。夏休みの自由研究として、HTTP/3について遊んでみたのでよろしくおねがいします。 はじめに HTTP/3はRFC目前となっており、すでに多くのブラウザがサポートし、ミドルウェアも実装が進められています。また、GCPではCloud CDN やHTTPS Load Balancingですでに利用することが出来ます。 HTTP/3は、トランスポートプロトコルにUDPで動作するQUICを利用しています。このQUICは様々な効率化の仕組みが盛り込まれていて、結果としてHTTPプロトコルの高速化が実現されています。 一方で、少ない環境ではあるものの、QUICが利用できないネットワークがあることも知られています。実際に使用する場合に問題になることはなく、多くの場合はHTTP/2にフォールバックされアクセスが行われます。ですが、国内での実情は調査の余地があると思われます。 今

    QUICやHTTP/3で利用を避けるべき送信元ポートの利用状況 | GREE Engineering
  • innodb_thread_concurrencyに関する話 | GREE Engineering

    こんにちわ。せじまです。今回の話は軽く書こうと思っていたのですが、長くなりました。まぁInnoDBの話なのでしょうがないですね。 はじめ 今回はinnodb_thread_concurrencyについてお話しようと思います。できれば、事前にInnoDB の mutex の話(入門編)を読んでいただいた方が、より深く理解していただけるのではないかと思います。 長いので、最初に五行でまとめます 現代において、ほとんどのケースでは、innodb_thread_concurrencyはデフォルトの0のままで問題ないと思います。なぜなら、最近のInnoDBはかなり良くなってきたからです。 それでもinnodb_thread_concurrencyをチューニングするとしたら、「高負荷状態になったときでもスレッド間の公平性をなるべく担保し、安定稼働させるため」と割り切って使うのが良いでしょう。 inno

    innodb_thread_concurrencyに関する話 | GREE Engineering
  • Jenkinsfile、書いてますか? | GREE Engineering

    インフラの駒崎です。Jenkins の Pipeline スクリプトについてのお話です。 早速ですが Jenkins の Pipeline スクリプト、使われていますでしょうか。 もしかしたら以前ちょっと書いていたけどやめてしまったとか、従来の GUI 設定のほうが楽だ、となんとなく敬遠してしまっている方もいるのではないでしょうか。 私が実際そうだったのですが、最近になってやっと Jenkinsfile - Pipeline スクリプトが身近に感じられてきましたので、現状の簡単なまとめを書いてみたいと思います。少しでも似た状況の方へのヒントやきっかけになれば幸いです。 Pipeline スクリプトは難しい? 私は正直、2016年に Jenkins 2 の目玉機能として Pipeline が出た当初は、とっつきにくい…わからん…と思っておりました。Jenkins を上っ面でなんとなく使ってい

    Jenkinsfile、書いてますか? | GREE Engineering
  • MySQLのmetricに関する話 | GREE Engineering

    こんにちわ。せじまです。さいきん、ジム用に左右独立型スポーツモデルのBluetoothイヤホン買ったのですが、あまりの快適さに、ジムに通うモチベーションが5割増しになりました。 はじめに innodb_thread_concurrency について書こうかと思ったんですが、まずはその前に MySQL の metric の話から入ったほうが良いかなぁと思ったので、今回は metric の話を書こうと思います。はじめにお断りしておきますが長くなります。 弊社では7年以上前から、 MySQLのサーバ一台あたり(OS側のも含めると)200-300 以上の metric を だいたい15秒間隔で記録しています。最近はSSDなども使ってますが、むかしはHDDにmetricを保存していました。例えばMySQLのサーバ一台分のmetric表示した画面をキャプチャすると、次のような感じになります。 ※画像は

    MySQLのmetricに関する話 | GREE Engineering
  • さいきんのMySQLのJSONまわり | GREE Engineers' Blog

    こんにちわ。せじまです。 さいきん、しばしば庭園や日帰り登山に行って風景写真を撮っているのですが、カメラで写真を撮るという行為は(中略)実行計画を考えながらSQLを書く行為に近しいことだと思いますので、エンジニアの方にはけっこうオススメです。 今日は軽めの話をさっくりさせていただこうかと思います。 はじめに 皆さんは最近のMySQLがJSON型をサポートしているのをご存知でしょうか。「なぜ正規化されていないJSONをRDBMSに格納するのですか!正規化しましょう正規化」という至極ごもっともなご意見もあるでしょうが、 MySQLは5.7からJSON型のサポートをはじめ、8.0でかなり開発が加速している印象を受けます。JSON型がネイティブでサポートされるようになったのは、MySQL5.7のRelease Candidate以降です。5.7 RCがリリースされた2015年あたりから、MySQL

    さいきんのMySQLのJSONまわり | GREE Engineers' Blog
  • AWS FargateとDocker Composeで簡単分散RSpec | GREE Engineering

    AWS Fargate早く東京に来てくれという願いをこめて、東京で1つでも事例を増やそうと記事を書いていたら公開する前にAWS Fargateが東京に来ることが先日発表されました!めでたいです。アリネ事業部の平田です。 今日はARINEで使っていく(かもしれない) AWS Fargate を使ったRSpecの実行環境の話と、Docker Compose使っているならFargateいいかもしれませんよ、という話をします。 背景 アリネ事業部では、なりたい自分がきっと見つかる美容メディア ARINE を運用しています。 ARINEのサーバサイドはRubyで書かれており、ウェブアプリケーションフレームワークはRuby on Railsを採用し、テストにはRSpecを使っています。 テストは徐々に増えており現在テストが1000件ほどで、テストにかかる時間も徐々に長くなり、完走するのに10分以上かか

    AWS FargateとDocker Composeで簡単分散RSpec | GREE Engineering
  • TLS1.3だとハンドシェイクがどれくらい早くなるか測定した | GREE Engineers' Blog

    こんにちはインフラの後藤です。 今回はTLS1.3を実環境で試してみました。 TLS1.3はTLSのメジャーバージョンアップとも言われるように、様々な改善が含まれています。 例えば、以前「TLS1.3のハンドシェイクがもう来てる」で書いたように、TLS1.3ではハンドシェイク時のパケットの往復回数が減っており、より早くコネクションを確立できます。 すでに、ブラウザや暗号ライブラリはTLS1.3に対応してきておりますので、実環境で具体的にどれくらいコネクションの確立が早くなるのか確認してみました。 TLS1.3 バージョンネゴシエーションとネゴシエーション 測定の前に今回利用したTLS1.3 draftバージョンについて補足します。 TLS1.3は draft-28 版が最新のバージョンです。こちらが文章上の修正を経て将来的にRFCとなります。 TLS1.3はファイアウォール等の中間装置の不

    TLS1.3だとハンドシェイクがどれくらい早くなるか測定した | GREE Engineers' Blog
  • ソーシャルゲーム サーバーアーキテクチャ選定 | GREE Engineering

    ※Read / Write のレスポンスタイムは大まかに計測した値のため適切な設定ができていない場合もあることをご了承ください MySQL 信頼と実績のあるRDBMS。新規タイトルの場合AWSではAuroraGCPではCloud SQLを利用することで運用の手間をある程度減らすことができる。分散システムではないため1クラスタでの書込性能には限界があり、ソーシャルゲームのように大規模なwrite処理がある用途では水平/垂直分割が必要になり、そのための設計とコーディングが煩雑になりがちである。またインスタンスのスケールアップ・ダウンで対応しきれない場合のクラスタの分割・統合のオペレーションは複雑なものになる。 スケールアップ・ダウンやnodeのメンテナンスなどでMaster nodeを切替える際には不通時間が発生してしまうため、安全のためゲーム自体をメンテナンス状態にする必要が発生する。 ※

    ソーシャルゲーム サーバーアーキテクチャ選定 | GREE Engineering
  • 社内AIプログラミングコンテストで優勝したゲームプレイAIの紹介 | GREE Engineering

    こんにちは、応用人工知能チームの辻です。 最近は計算リソース、データ量、アルゴリズムの改善によって簡単に精度の高いAIが利用できるようになりつつあります。しかし、現状では全てのタスクにおいてAIを利用すればいいわけでもありませんし、リソースの制限もあるため、特性を理解して上手に応用することが重要です。そこで、社内ではAI応用のための知見や環境を積み上げていく機会を増やす取り組みを行っています。 先日、取り組みの一環でゲームプレイAIのプログラミングコンテストが開催され、約20チームが参加して盛り上がりました。このコンテストで優勝したゲームプレイAIについて紹介します。 AIによるゲームプレイ動画です。 コンテスト概要 AIにアクションゲームなどのデバッグの一部を任せられるかどうか検証したいという考えもあったので、ゲームプレイAIが対象として選ばれました。ゲームAI用に変更せずに画面情報

    社内AIプログラミングコンテストで優勝したゲームプレイAIの紹介 | GREE Engineering
  • 美容サイトARINEで稼働中の機械学習を用いた髪型ネイル識別システム | GREE Engineering

    応用人工知能チームの尾崎です。今年新卒エンジニアとして入社し、機械学習モデルの実装評価からAPIサーバの実装、コンテナを利用したプロダクトへの導入まで開発全般を担当しています。 今回はARINEで稼働中の畳み込みニューラルネットワーク (CNN) を用いた髪型・ネイル識別システムについてご紹介します。 背景 ARINEでは、おすすめのヘアスタイルやトレンドのコーディネートなど沢山の記事が公開されています。記事には数多くの写真素材が用いられていますが、これらの素材の多くは提携サイトから検索APIを提供してもらったり、提携サイト内の検索機能を用いて写真素材を探し選んでいました。しかし、一部の写真素材は自社で撮影していたり、最近ではヘアサロンやネイルサロンからも提供してもらっているため、それらの画像を検索する手段がありませんでした。 そこで今回、ライターさんが執筆に必要な写真素材を手軽に検索でき

    美容サイトARINEで稼働中の機械学習を用いた髪型ネイル識別システム | GREE Engineering
  • Prometheusによる数百台規模のモニタリングで直面した問題について | GREE Engineering

    インフラの反田 (@mtanda) です。 GREEでは、多くのサービスをAWS環境で運用しており、それらサービスのモニタリングシステムとしてPrometheusを利用しています。 Prometheusを導入してから約2年がたち、1台のPrometheusで数百台規模のインスタンスをモニタリングするなかで、さまざまな問題に直面しました。 それら問題の原因を分析し、設定や利用の仕方を改善することで、ある程度安定して運用できるようになりました。 これらの知見が少しでもお役に立てばと思い、ここで共有いたします。 なお、対象とするPrometheusのバージョンは1.xです。Prometheus 2.0では、これら問題のほぼ全てに対して改善されています。そのため、2.0でどういった点が改善されているかを知るためにも有用だと思います。 Prometheusのストレージ実装の基礎知識 Promethe

    Prometheusによる数百台規模のモニタリングで直面した問題について | GREE Engineering
  • TIME_WAITに関する話 | GREE Engineering

    こんにちわ。せじまです。 先日ポチった C302CA が届いたんですが、(話が長くなるのですごい雑にいうと)Chromebook の、いろいろ削ぎ落として最適化するという方向性には、とても学ぶところがありました。 昨年末、 MySQLのサーバ集約に取り組んでいるという話をさせていただきましたが、「DB集約できてきたので、Webアプリケーションサーバも集約するかー」ということで、最近はWebサーバの集約にも取り組んでいます。 ただ、PHPゴリゴリ書いてるのではなく、集約していく上で Linux や TCP 的な観点からチューニングしたほうが良いところを見てまして、そのへんについてあるていどまとまったので、次のスライドを書かせていただきました。

    TIME_WAITに関する話 | GREE Engineering
  • Deep Learning を用いた画像識別モデルの導入 | GREE Engineering

    背景 僕の開発担当しているチームでは、プロダクト( SNS、Web ゲーム等 )におけるユーザの任意投稿をオペレータによって目視で監査し、サービス運営上、不適切な投稿の検知と削除を行っています。 しかし、ユーザ投稿すべてを目視で監査するのはオペレータの負荷が高いため、不適切と思われる投稿をシステムで選別した上で、オペレータの目視監査に回しています。 ここで、具体的に不適切な投稿とは 異性との出会いを希望・誘導する投稿(青少年の健全な育成) 個人情報を掲載する行為(個人情報保護) わいせつ、およびグロテスクな内容(サービスクオリティ維持) 等 グリーが禁止している行為を指します。 上記、システムの精度向上が僕らチームの目標となっています。中でも画像付きの投稿はシステムによる選別が難しく、大量に目視監査に回すことでサービスのクオリティを維持しているという課題がありました。 そこで今回、ユーザの

    Deep Learning を用いた画像識別モデルの導入 | GREE Engineering
  • 寿司とビールについて話し合いをしてきました | GREE Engineering

    こんにちわ。せじまです。 さいきんの kernel について調べてたら、俄に Chromebook への興味が湧いてきたので、遅まきながら C302CA ポチってみました。わたしにとって人生初 Core M ということもあって、早く届かないかなと心待ちにしている今日このごろです。 はじめに MySQL5.7以前でおそらく最も有名な問題の一つに、Sushi-Beer issue of MySQL with utf8mb4 というものがあります。 忙しい人のために三行でまとめますと MySQL は character-set に utf8mb4 を指定すると、寿司やビールなどの絵文字を扱える。 ただ、Collation(照合順序) が utf8mb4_general_ci や utf8mb4_unicode_ci だと、絵文字を区別できない(寿司とビールの絵文字を区別できない)。 utf8mb

    寿司とビールについて話し合いをしてきました | GREE Engineering
  • MySQLやSSDとかの話 その後 | GREE Engineering

    こんにちわ。せじまです。 すべての基は monitoring だと考えてるので、イマドキのウェアラブルデバイスいろいろ買っていろいろ計測してるんですが、最近のデジタルガジェット面白いなぁ21世紀感パないと感心しまくってる今日このごろです。 ちょうど一年くらい前、 MySQL User Conference Tokyo 2015 で MySQLSSDとかの話 前編を、 GREE Tech Talk #9 で MySQLSSDとかの話 後編を、お話させていただきました。 その後どうなったの?ということで、後日談をまとめさせていただきました。(今回はMySQL成分それほどありません) 忙しい人のために三行でまとめると 以前の試みはわりとうまくいきました。 SSDの大容量化がさらに進んでますし、前回の経験を活かして、HDD積んだサーバの構成変更しました。 次のステージとしては、1ラックあたり

    MySQLやSSDとかの話 その後 | GREE Engineering
  • Electronでゲームの設定ツール作ってみた | GREE Engineering

    みなさんご無沙汰しております。ちょびえです。 最近はやりのElectronでゲームの設定ツールを作ってたので事例共有ということで記事を書いてみたいと思います。 事例共有なのであまり技術的な内容ではありませんが、少しでも皆様の参考になれば。 (免責としては、自分のチームの話なので全体としてこう、というわけではありませんのでご了承下さい) モチベーション 元々UnityEditorの機能を使って色んなツールを作っていたのですが、特定のGUI APIに依存した少し複雑なGUIツールとなるとメンテを他の人に託しづらくなってしまう問題があります。 会社として普段からWindowsMac向けのアプリケーションを作っている、とかであれば特に問題にならないと思うのですが。どうしても弊社のようにWebサービスが主力な会社だとHTML,JavaScriptを始めとした技術が得意な人が多く、Nativeアプリ

    Electronでゲームの設定ツール作ってみた | GREE Engineering
  • Docker と ECS と WebSocket で最強のリアルタイム・マルチプレイ環境を運用 | GREE Engineering

    概要 AWS ECS でマルチプレイゲーム用インスタンスの管理すると限りなく最強。 はじめに リアルタイム・マルチプレイゲームを作る時、まず考えられることは、あるプレイヤーの行動や状態が他のプレイヤーに伝わることではないかと思われます。しかし、スマートフォンアプリは不安定であったり、複数端末同士で(基地局やバックボーンを介さずに)物理的に直接接続することは出来ませんし、理論的にできたとしても、だいたい開発が進んでいくうちに排他制御の問題などで炎上、もしくはとん挫してしまいます。軽い気持ちでマルチスレッド処理をおこない事故る現象と全くおなじです。 もっとも簡単な解決方法としてはマルチスレッド処理のときようにクリティカルセクションを設けることです。ようはサーバを用意してそこで処理すれば、比較的容易に一意な結果が得られますし、接続に関する問題も起こりにくくなります。 長くなるので → http:

    Docker と ECS と WebSocket で最強のリアルタイム・マルチプレイ環境を運用 | GREE Engineering