タグ別アーカイブ: Developers.IO

【AWS】AWSでFTPサーバー立てる時に気をつけるべき2つのこと+α | Developers.IO

EIPによるグローバルIPアドレスは、直接EC2に割り当てられているわけでなく単なるNATなわけで、EC2自身はグローバルIPアドレスを認識していないわけですね。これを失念しており、サーバー設定後の動作確認時にパッシブモードで繋がらない理由が分からず、少々ハマッてしまいました。

FTP自体は歴史も古く広く運用されているプロトコルなのですが、AWSとは少々相性が悪いと個人的には思っています。特にランダムにポートを使用するため、セキュリティグループでどうしてもポートを広く開けなければいけないのは正直いただけません。

引用元: 【AWS】AWSでFTPサーバー立てる時に気をつけるべき2つのこと+α | Developers.IO.

参加レポート: LINE Developer Conference (Infra Day) | Developers.IO

グローバルに展開しているサービスであるため海外でも同様に高い品質を保つ必要がありますが、海外ではインターネット回線の品質が高くない場合も多く、海外利用者の品質確保が課題とのことでした。そこで品質が低下するポイントを調査したところ、一つは通信キャリア同士の相互接続ポイント、そしてもう一つは日本と海外という物理的な距離に起因するものであることが分かったそうです。

そこで解決策として、各通信キャリアとLINEの直接的なパスを作り、キャリア同士の相互接続ポイントでの品質低下を極力回避すること、加えて海外にもサーバを配置し、出来るだけ利用者に近い位置にあるサーバに接続してもらうようなアプリケーションの仕組みにしたとのことでした。

このために世界中にLINE拠点を作り、拠点間は孤立が発生しないように専用線で接続してリングトポロジを構成しているそうです。またその上でMPLS+Pseudo Wireを構築し、物理トポロジに捕われないネットワークを構成しているとのこと。アプリケーションの接続サーバの選択は接続キャリアや電話番号、GeoIPなどを使って静的に割り当てているそうですが、将来的にはグローバルロードバランサの導入も検討中だそうです。この辺はグローバルサービスだからこその取り組み事例ですね。

引用元: 参加レポート: LINE Developer Conference (Infra Day) | Developers.IO.

参加レポート: LINE Developer Conference (Infra Day) | Developers.IO

困っていたこととして、ネットワーク構成上ブロードキャストドメイン(L2ドメイン)が広くなっており、サーバのNICがdown/upしてMacアドレステーブルがフラッシュされてしまったタイミングで1Gbps超のデータが発生する(unknown unicast flooding)問題が発生していたそうです。対策としてはL2ドメインを狭めることとして、元々は集線スイッチ単位でL2ドメインを構成していたものを、エッヂスイッチ単位でL2ドメインが分かれるように構成を変更したそうです。またシステム構成上インターネット向けの通信だけでなくサーバ間通信も大量に発生するため、各集線スイッチからインターネットに出る線とは別に集線スイッチ同士を繋ぐ線を用意し、通信を分離する施策も行ったとのこと。またL2ドメインを細分化したことに合わせて、これまでL2DSR方式で行っていたロードバランサをL3DSR(DSCP)に変更したそうです。

引用元: 参加レポート: LINE Developer Conference (Infra Day) | Developers.IO.

参加レポート: LINE Developer Conference (Infra Day) | Developers.IO

LINEはスマートフォンに特化したメッセンジャーアプリなのですが、特にリアルタイム性を重視しているとのことで、アプリケーションとしてはほぼTCPセッションを張りっぱなし(!)になっているとのこと。このためロードバランサでのセッション数制限がボトルネックになってしまい、セッションテーブルのエージング時間調整など施策を行ったそうですが、結果的にロードバランサではセッション管理をさせない方針とし、Stateless SLBに切替を行ったそうです。Stateless SLBはセッションテーブルでは無くハッシュテーブルを使って負荷分散をする仕組みになっており、セッション数が制限にならなくなるとのこと。Stateless SLBの振り分け方式としては、サーバの台数の増減に従って全体のハッシュ値を再計算するものや増減した対象のみを再計算する方式があり、LINEではユーザ数が多い事から全体の再計算が入るとサーバ増減に関連しないユーザにまで影響があるため、後者の増減分のみを再計算する方式を取っているそうです。今後はOpenFlowなど他の仕組みも検討したいとのことでした。

引用元: 参加レポート: LINE Developer Conference (Infra Day) | Developers.IO.

参加レポート: LINE Developer Conference (Infra Day) | Developers.IO

1つはIDC内部でのConnection Timeoutの発生について。LINEのシステムではインターネットを介した通信だけでなくサーバ間通信も多く発生する仕組みとなっているそうですが、そのサーバ間通信が行われるIDC内部のL2スイッチでパケット廃棄が多発する自体が発生したとのこと。トラフィック量としてはL2のスループット性能以下であり問題無くスイッチング出来るはずだったのですが、原因としては瞬間的にトラフィックがバーストした際にL2スイッチのバッファがオーバーフローしパケットが廃棄されてしまっていたそうです。なおこの現象は連続してトラフィックが発生している場合では問題が無く、バースト時のみに発生するとのこと。なかなか切り分けが難しいトラブルですね。LINEのようなメッセージサービスは性質上バーストが起こりやすく(例えばイベントで何かが起きた場合、サッカー日本代表がゴールを決めたとき等。またオフィシャルアカウントはフォロワーに一度に数十万人に対してメッセージを送るため瞬間メッセージ流量が跳ね上がるそうです)、対策としてバッファサイズの大きなL2スイッチに変えたり、バーストが発生しやすいようなサーバは独立したネットワークに分離するなどを行われたそうです。

引用元: 参加レポート: LINE Developer Conference (Infra Day) | Developers.IO.

参加レポート: LINE Developer Conference (Infra Day) | Developers.IO

2つ目はIDC空間の不足。これは後述のネットワークレイヤのセッションでもあったのですが、LINEさんでは基本的に物理サーバで構成していて、サーバ台数だけで5桁(万単位)の台数があり、そうするとIDCの物理的スペースを食いつぶしてしまいサーバを設置する場所が無いという事態が発生しているそうです。LINEサーバのクラスタの仕組みで最も多く使っているのはApache HBaseだそうですが、経験則として1000台以上のクラスタ構成にすると性能が出ず、またサーバ台数を増やしていくとその分故障の可能性が増えるため運用コストが増加してしまいます。そのためサーバ台数を減らす施策として、サーバのスケールアップによる集約と、そして段階的に仮想化を行っているところとのこと。スケールアップとしてはCPUやメモリなど様々な方策がありますが一番ボトルネックとなったのはDisk I/Oで、ここは検証した結果最もIOPSが高かったPCIE-SSDを導入することで高いパフォーマンスが発揮出来たとのこと。また仮想化についてはVMware vSphereを使われており、1物理サーバに対し10VMくらいを割り当て、現在は数千台くらいのGuestOSが動作しているそうです。

引用元: 参加レポート: LINE Developer Conference (Infra Day) | Developers.IO.

RDS for Oracleでのsysdateに要注意 | Developers.IO

RDSに限らず、EC2もデフォルトのタイムゾーンはUTCになっています。EC2の場合はOSにログインできるため、Linuxの場合なら下記コマンドでUTCからJSTにタイムゾーンを変更することが可能です。

1

ですが、RDSではOSのタイムゾーンを変更することは不可能です。OracleのsysdateはOSの時刻を返すため、sysdateを利用して取得する値はUTCでの値が帰ってくることになります。

sysdateはOracleを利用してアプリ開発する上では呼吸をするように自然に使う関数だと思います。しかも、既存アプリの場合はJSTでデータが取得できることが前提の作りになっていることが多いと思いますので、その前提が崩れるとなると単純移行では済まなくなってしまいます。

新規開発の場合は、「DBのタイムゾーンはUTCになるから、アプリで変換してねー」で済む話のですが、 *1既存アプリを移行する場合はどういった対策を打てばいいのでしょうか。以下に3点を示してみました。

引用元: RDS for Oracleでのsysdateに要注意 | Developers.IO.

ELBの挙動とCloudWatchメトリクスの読み方を徹底的に理解する | Developers.IO

CloudWatchのメトリクスは、各生データの平均(average)、合計(sum)、最大値(max)、最小値(min)等を指定して集計値を見ますが、この集計方法はデータの性質に応じて、各自が設定する必要があります。例えば、CPU使用率というメトリクスは合計(sum)値を見ても意味がわかりません。一般的には平均(average)を見るべきです。ただし、各自の設定次第では「CPU使用率の合計」を表示してしまいます。このように、CloudWatch自身は「このデータはどのように見るべきか」について関知しません。

引用元: ELBの挙動とCloudWatchメトリクスの読み方を徹底的に理解する | Developers.IO.

VYATTA USERS MEETING Autumn 2013(の前半)に参加しました | Developers.IO

"ネットワークガチ勢"にどう挑むのか

"ネットワークガチ勢"とは、いわゆるNE(Netowork Engineer)と呼ばれる旧来のネットワーク機器を扱う技術者を指します。通信事業社が扱うキャリアネットワークの分野は、インターネットをはじめとする超大規模ネットワークを扱ってきたこともあり、機器やネットワークシステムのパフォーマンスおよび信頼性に異常な執着を持っている(かもしれません) *3。Vyattaをはじめとするネットワークのソフトウェア処理化 *4はサーバー仮想化に次ぐITインフラ進化の次の過程であり、対応は不可避なんですが、ネットワークガチ勢から見ると「x86サーバーでネットワーク機能を動かすのはパフォーマンスと信頼性が不足しているため、本番では使えない」と烙印を押されてしまう傾向にあると。そこをなんとか認めさせるプロセスをどうするか、という話がセッションの合間にちらほら見受けられました。

しっくり来たのは、ヴイエムウェア金子さんのセッション時の質疑応答で出た、「サーバー仮想化と同じ流れでいくのでは」という見解でした。ヴイエムウェア社が開拓してきたサーバー仮想化の時は、旧来のサーバーエンジニアが「(初期VMware製品を見て)こんな開発環境で使うような仮想化ソフトウェアが本番で使えるのか」と言われた時期があったが現在はサーバー仮想化の環境が当たり前になっている。サーバーエンジニアを納得させることができたのは、実際に大規模なシステムが仮想化環境で動いているという実績だったと。

引用元: VYATTA USERS MEETING Autumn 2013(の前半)に参加しました | Developers.IO.

AWSに適切なSSL証明書の購入を考える | Developers.IO

昔はクラウドという概念がありませんでしたから、FQDNとは別に、 SSL証明書をインストールするサーバの台数分ライセンスを購入する必要がありました。 しかし、最近はクラウド対応ということで、SSL証明書をインストールするサーバ台数を 考慮せずに使えるタイプが増えてきています。これにより、SSLターミネーション(中間で復号化して処理を軽減する)する ロードバランサーにも気軽に設置できるようになったのです。ELBはこの恩恵を受けています。 柔軟にサーバ台数を変化させることで、コストやビジネスを最適化するクラウド環境の場合、ライセンス費用がサーバ台数毎では選択しづらいですよね。要チェックポイントです。

引用元: AWSに適切なSSL証明書の購入を考える | Developers.IO.