Tag Archives: AdventCalendar

Prometheusをサービスとして提供する

こんにちは。LINE Fukuoka開発チームのPaul Traylorです。LINEファミリーアプリを支えるたくさんのサーバーのモニタリングを担当しています。この記事はLINE Advent Calendar 2017の25日目の記事です。

ほとんどの開発者にとって興味深いことといえば、コード作成や新機能の追加ではないかと思います。しかし機能が正常に動作しないときは、原因がわかれば役に立ちますよね。とはいえ、開発者が自分自身でモニタリングの設定を行うのは、そう簡単ではないときもあります。そこで私は、最高のパフォーマンスのためあらゆるサービスをモニタリングできるように、モニタリングの設定管理を簡単にすることに取り組んでいます。その一環として開発されたのが、Prometheusの設定を管理するためのツールであるPromgenです。これを利用すれば、モニタリングターゲットを簡単に登録したり、担当サービスのアラートを購読したりできます。

モニタリングの設定

ほとんどのサービスは導入時にはシンプルで小規模なものですが、時間が経つにつれ、数百台のサーバーにまたがる数十ものコンポーネントで構成されるようになります。そうした中でモニタリングを設定するのは容易なことではありません。そこでPromgenは、あらゆる設定を1箇所でまとめて行い、一目で確認できるように開発されました。

targets

VoIPのオープンソースライブラリPJSIPにおけるバッファオーバーフロー

こんにちは。セキュリティ室(アプリケーションセキュリティチーム)で主にLINEサービスのセキュリティ診断を担当しているYoungsung Kim(Facebookアカウント/Twitterアカウント)です。

これはLINE Advent Calendar 2017の24日目の記事です。

今日はVoIPのオープンソースライブラリであるPJSIPの脆弱性(CVE-2017-16872およびAST-2017-009)について書かせていただきます。PJSIPは、標準プロトコル(SIP、SDP、RTP、STUN、TURN、ICE)を実装したオープンソースのマルチメディア通信ライブラリです。たとえばIP PBXやVoIPゲートウェイなどで広く使用されているAsteriskフレームワークは、PJSIPを使用してSIPスタックを実装しています。

はじめに

今回発見した脆弱性は、64ビット環境においてクライアントから受け取ったデータを処理する際にsigned intからunsigned longへの暗黙的な型変換(型キャスト)が行われており、そこで整数型の符号拡張を考慮していないことが原因でバッファオーバーフローが発生するというものでした。この脆弱性についての詳細は、「(Security) Function in PJSIP 2.7 miscalculates the length of an unsigned long variable in 64bit machines」を参照してください。

AIに「Clova、今日の天気は?」を理解させることの面白さ

LINEのData Labsに所属している佐藤敏紀(@overlast)です。この記事はLINE Advent Calendar 2017の23日目の記事です。

この記事では、スマートスピーカーで対処を求められる自然文クエリの言い換えがどれほど多様であるかを示し、「スマートスピーカーを実現するための自然言語処理の楽しさ」をお伝えしたいと思います。

はじめに

みなさんはスマートスピーカーを家に置いていますか?

私は自宅のリビングに弊社が販売しているClova FriendsClova WAVEを置いていますし、それ以外に、Google HomeAmazon Echo Dotも設置しています。

ちょっと多すぎでしょうか (;^_^A

これらのスマートスピーカーは、主に人間の言葉を聞いてその内容に基づいた動作をします。たとえばClova Friendsに「Clova!小町さんに電話して(クローバ コマチサンニデンワシテ)」と、電話をかける気持ちで声をかけると、Clova FriendsはLINEのIP電話機能を使って小町さんに電話をかけてくれます。

スマートスピーカーは、主に音声を使ってユーザーの言葉に応答します。画面が付いているなら音声以外に画像や動画を使った応答もできますし、さらに手足が付いているなら簡単なジェスチャーも同時にできるでしょう。

スマホやパソコンから得られる情報の形式は主にテキストや画像ですが、スマートスピーカーからは、音声、映像、アクションなどが融合した「誰かと会話したときのような」情報が得られます。

他の人間が発信する情報というだけであれば、テレビやラジオなどのマスメディアからも多くの情報を得られます。しかし、個人用として提供されているスマートスピーカーなら「より自分の今の状況に合う情報」を得ることができます。

スマートスピーカーによる応答が面白いのは、音声認識によりクエリを取得して、音声合成でクエリを処理した結果を発話することで、「誰かと会話したときに近い形で」「よりユーザーの状況に合う情報」を返せるところだと思っています。

コード分割(Code Splitting)を簡単に実装できるgrow-loaderを作った話

はじめに

こんにちは、LINEマンガJavaScript担当の@sunderlsです。

これはLINE Advent Calendar 2017の22日目の記事です。今日は、webpackローダーのgrow-loaderを紹介します。

LINE Engineering Blogの記事「LINEマンガ:Page Stackを使ってサクサクなページ遷移を実現できました」でご紹介しましたが、LINEマンガはWeb技術で実装されています。

Webでネイティブアプリに近いユーザー体験を提供するため、いろいろ工夫しています。今回は、数ある工夫の中からコード分割の実装を紹介したいと思います。

なぜコードを分割するのか

LINEマンガでは、JavaScriptのソースコードをもともと1つのファイルにバンドルしていました。しかしサービスが成長するにつれて、ページ数が増え仕様も複雑になり、バンドル後のファイルサイズがどんどん大きくなってきました。将来を考えると1つにバンドルするのはやはり望ましくないと考え、コード分割の実装を始めました。

Qiitaで人気のLINE関連投稿紹介(保存版)

Developer Relations Teamマネージャーの砂金(いさご) @shin135 です。この記事はLINE Advent Calendar 2017の21日目の記事です。

LINEでは12月よりDeveloper Relation Teamを新設し、より一層エンジニアのみなさまとの関係構築に注力して参ります。

LINEとしてエンジニアが積極的に情報発信してゆく雰囲気を応援しようという意図で、Qiitaのアドベントカレンダーに協賛させていただいている流れもあり、今回はQiita上でLINE、特にチャットボット開発に関連した記事をピックアップして、みなさまが後に参照するときに困らないためのまとめ記事として紹介してゆきます。LINE Bot関連情報はWeb上に多くあるものの、まとまった記事を見つけにくいというご意見もいただいており、こちらの投稿を「はてぶ」などで保存版としてご活用いただけると幸いです。ここに掲載させていただいた方々のみならず、LINEが公開しているMessaging APIやLINE Loginを実際に試していただいたすべてのエンジニアのみなさまに、改めて御礼申し上げます。

Qiita上の投稿は1.事例系、2.作り方解説系、3.Tipsの3つに分類することができそうなので、順にご説明してゆきます。

レイテンシーを計算する技術の話

こんにちは、LINEメッセンジャーのサーバーサイドとモニタリングプラットフォームの開発を担当しているフィ(@dxhuy)です。この記事はLINE Advent Calendar 2017の20日目の記事です。

今日は、モニタリングシステムでよく使うレイテンシーやその計算方法などについて紹介したいと思います。LINEでは、日々ユーザが楽しくメッセージを送れるように、システムの安定性を第一に考えています。安定したシステムを保つためにたくさんの指標を見守る必要がありますが、その指標の1つが「レイテンシー」です。

ウィキペディアでは、レイテンシーは以下のように定義されています。

デバイスに対してデータ転送などを要求してから、その結果が返送されるまでの不顕性の高い遅延時間のこと

インターネットサービスにおいては、レイテンシーは基本的に「レスポンスタイム」のことです。つまり、リクエストを受けてからレスポンスを返すまでにかかる時間がレイテンシーです。

V8のHidden Classの話

この記事はLINE Advent Calendar 2017の19日目の記事です。

JavaScriptの気持ちを知りたい

こんにちは、LINE FukuokaのフロントエンドエンジニアのYoneharaです。

そろそろクリスマスですね。フロントエンドエンジニアのみなさん、苦しんでいますか?私は苦しんでいます。2017年も暮れようというのに、いまだにブラウザやJavaScriptの気持ちが分からず、ユーザーに思うような快適なUXが提供できないことがあるからです。

JavaScriptの気持ち。ただ幸いなことに、我々はかなりの程度、それを分析的に知ることができます。GoogleやMozillaが自身のJavaScriptエンジンのコードを公開し、随所でそのアーキテクチャを解説してくれており、また豊富なトレーシング・プロファイリングの手段が用意されているからです。

今回の記事では、みなさんおなじみのChromeに採用されているV8というJavaScriptエンジンの、Hidden Classという最適化のための1つの仕組みをのぞいてみたいと思います。

Redis Lua scriptingをatomicな処理とcache stampede対策に使った話

こんにちは。LINEでゲームプラットフォーム開発をしているKagayaです。この記事はLINE Advent Calendar 2017の18日目の記事になります。昨年新卒入社1年目で執筆した「マイクロサービスのためのプロジェクト生成ツールLazybonesを使ってみた」に引き続き、今年もAdvent Calendarの記事を書くことになりました。よろしくお願いします。

はじめに—RedisとLINE GAMEプラットフォーム

LINE GAMEプラットフォームでは、インメモリNoSQLデータベースであるRedisをメインデータベースの1つとして利用しています。キャッシュとしての利用が多く、例えば、LINEやFacebookなどのアカウントで認証を行っているユーザのソーシャルデータ(プロフィールや友だちリストなど)のキャッシュに利用しています。基本的にはRedis Clusterとして利用しており、開発環境では共通のクラスタを、本番環境ではゲームごとに独立のクラスタを組んで運用しています。

Akka HTTPの仕組みを理解する

初めまして、Ads Platform開発チームの岡田(@ocadaruma)です。

この記事はLINE Advent Calendar 2017の17日目の記事です。

今回、個人的に以前から気になっていたAkka HTTPの内部構造について、この機会に調べましたので紹介いたします。

Akka HTTPとは

Akka HTTPは、Lightbend社によって開発されている、Scala/Java用のHTTP toolkitです。

現在はメンテナンスが終了したsprayの後継と位置付けられており、特徴的なRouting DSLをsprayから受け継いでいます。

また、Play Frameworkは2.6系より、Akka HTTPをデフォルトのバックエンドとして採用しています。

大規模サービスLINE LIVEのためのエンコーダレイヤ構造と悩んだこと

はじめに

こんにちは。LINE ITSC所属のエンジニア、Kim Suhyukです。これはLINE Advent Calendar 2017の16日目の記事です。

先日12月10日に、LINE LIVEサービスがリリースされてからちょうど2年が経ちました。リリース以来障害なく運営できて、とてもよかったと思っています。私はライブメディアサービスの構築や運営の経験がなかったため、今回の記事では、設計や構築を始めるときに悩んだ点についてまとめてみました。

背景および課題

LINE LIVEは、いつでも誰でもライブ配信できるサービスとして、予測を超える数のユーザーが利用したとしても円滑にライブを配信・視聴できる必要があります。そのため、以下の条件を満たす構造が必要と考えました。