ローグウェーブソフトウェアのブログ

開発をシンプルに 安全で高品質のコードを 素早くお客様のもとへ

AWS S3障害にも耐えたAkanaのAPI管理プラットフォーム - CodeBuzzから

先週、2月末に米国の一部の地域でAmazonAWS S3がダウンし、このクラウドストレージを利用していた多くの著名なサービスが一時利用不可になり、日本でも大きな話題になりました。

www.publickey1.jp

www.itmedia.co.jp

ローグウェーブソフトウェアでもこの地域でAPI管理サービスを展開していますが、影響はなかったようです。一体何故でしょうか?

blog.roguewave.jp

API管理プラットフォーム AkanaAPIセキュリティやマイクロサービス関連のプロダクトマネージャを担当している Ian Goldsmithがこの問題についてブログでコメントしているのでご紹介します。

We stayed up when AWS went down

blog.klocwork.com

Amazon Web Services (AWS) S3サービスの今週発生した米国東部地域におけるダウンはすでに広く報じられています。 S3停止の波及効果により、Amazonの他の多くのサービスも巻き込まれ、Quora、Trello、GitLabといった多くの有名なサービスに深刻で長期間にわたる停止を引き起こしました。全体としてアマゾンは優れたサービスを提供しています。誰もが知っているようにこうしたことは起こるものなのです。大切なのはこの種の障害に耐えられるようにソリューションを設計することです。

私たちのAkana API管理のSaaSプラットフォームはAWSホスティングされており、米国東部地域でも本格的に事業を展開しています。それなのに、一体どのようにして顧客にシームレスなサービスを提供できたのでしょうか?

多くのAPI管理ソリューションが提供している「SaaS」ソリューションは、真のマルチテナントプラットフォームではありません。多くの場合は結局のところ、特定のリージョン内で定義された可用性ゾーン内で稼働する専用サーバーに頼ることになります。このリージョンや可用性ゾーン、サーバーに問題が生じるとサービスはダウンしてしまいます。私たちローグウェーブが行なっていることは全く異なります。我々は、高度に復元力のあるアーキテクチャを備えた、大規模でスケーラブルで分散性の高いマルチテナントのSaaSプラットフォームを運用しています。

私たちは、シャーディングとレプリケーションを行なったNoSQLストアと、マスター/スレーブにレプリケートされたリレーショナルストアを組み合わせて使用​​し、データ・ストレージに障害に対する優れた復元力を提供します。高度なルーティングと負荷分散を備えた複数の可用性ゾーンやリージョンに分散した多数の小さなサーバーを使用して、どんなことが起こっても適切にAPIトラフィックを処理し続けるようにします。マスターリージョンで完全に障害が発生した場合でも、他のリージョンのサーバが数分でマスターの役割を引き継ぎます。つまり、顧客は1〜2分構成を更新できない可能性がありますが、その他の機能はすべて中断されません。私たちはお客様の中核サービスを中断することなく、個々のサーバー、可用性ゾーン全体、およびリージョン全体の障害から生き残ることができました。

APIをビジネスに活用しているみなさまは、インターネット上で何が起きていても、可能な限り最高のサービスを提供できるように、AkanaのAPI管理についてご覧ください。

編集後記

いかがだったでしょうか。情報の分散化、冗長化について考慮する良い機会である、とする意見が多く聞かれました。

www.geekwire.com

定評のあるクラウドサービスでもこのような問題が発生し、甚大な影響を与えることを改めて実感した方も多いのではないでしょうか?

ローグウェーブ セールスエンジニア 柄澤 (からさわ)

PV-WAVE の新しい Photo 関数 (Part 1) - CodeBuzzから

Rogue Wave Softwareのセールスエンジニアである Ed Stewart がCodeBuzz に 2016年12月にリリースされたPV-WAVE 2016.1 の新しい関数PHOTOについての記事を投稿しました。Ed は現在セールスエンジニアとして活躍していますが、以前はPV-WAVEの製品マネージャとして製品の開発を統括していたことがあります。 このPHOTO関数は、一般的なイメージ形式であるBMP,GIF.JPEG,PNG,TIFFなどのイメージデータを読み込み、表示し、PV-WAVEの機能を使って解析、作成したデータを同様に保存することができます。また、PV-WAVEバージョン2016.1リリースでご紹介しました様に、医療画像形式であるDICOMも他のイメージ形式同様にとり扱う事ができます。 今回 Ed は、自身のモバイルフォンで撮影した写真を例に、新しいPHOTO関数の使い方や機能拡張の例等をご紹介しています。PV-WAVEの関数は極めて簡単に機能の拡張ができ、それを新しい関数として登録・利用することができます。本投稿記事中にある表現で “ラップする” とはこの拡張作業を意味し、"ラッパー関数" とはPHOTO関数をベースにした新しい関数を意味します。 今回記事内で Ed が作成した新しい関数はすべてGitHub から入手することができます。

RogueWave CodeBuzz

PV-WAVE の新しい Photo 関数 (Part 1) Ed Stewart

私は現在 PV-WAVE チームと近い所で仕事をしているわけではありませんが、いまでも製品をインストールしておいて定期的に利用し、手軽にデータ分析等の処理を行っています。過去にはImage関数もいくつか使用しましたが、頻度はそんなに多くありませんでした。しかし、最新のリリース2016.1にPhoto関数が追加されたのを見て、私は興奮しそれらを試してみることにました。私はプライベートな生活の中で写真の編集をよく行う為、そのツールを試してみたくなりました。

まず最近のお気に入りの写真をモバイルフォンから選び、ファイル共有アプリを使ってファイルをコピーし、ラップトップマシンにダウンロードしました。PV-WAVEの新しい PHOTO_READ 関数を使って、きわめて簡単に素早く、何の問題もなく読み込むことができました:

 WAVE> t = PHOTO_READ(‘c:\dev\data\trees.jpg’)

それをスクリーン上で確認したければ、 PHOTO_DISPLAY を使いこのように使います。

 WAVE> PHOTO_DISPLAY, t

ところが、私が期待した表示ではありませんでした。下記をご覧ください。

f:id:RWSJapan:20170224155857j:plain

とりあえず、写真は表示されましたが横向きに回転していました。しかしそれはPV-WAVEのせいではなくモバイルのメタデータに責任があります。このファイルのプロパティは、ポートレートモードであるにも関わらず 4032 x 3024 ピクセルとなっています、つまり正常に表示するにはこの写真を回転させる必要があります。さらに、この写真のサイズでは私のスクリーンにはいりきりません。4K革命に乗り遅れている為、私のモニターの解像度は最高でも1920 x 1080 にすぎないのです。解析のツールであるPV-WAVE は簡便の為に勝手にデータを省略・変更することはありません; むしろ、可能な限り正確に表示しようとする為、私のスクリーンでははみ出してしまうのです。そう、つまりリサイズが必要です。

PV-WAVE には、写真のデータだけでなく、任意のn次元配列データに対してこのような操作を行うための関数がいくつもあります。私(望むらくはあなたも)のプライベートを充実させるために、これらの関数を新しいphoto用連想配列データ(associative array)の作成に利用したいとおもっていました。まず、 ROTATE と RESAMP 関数から始め、新しいヘルパー関数 PHOTO_ROTATE と PHOTO_RESAMP を作ってみました。 ROTATE関数はデータ配列と回転方向のパラメータを受け取ります、そこで私はphoto関数のassociative array が第一引数となるようにAPIをラップして新しい関数を作ってみました。その関数内部では、ピクセル配列が取り出されROTATE関数に方向を示すパラメータが渡されます。同様にphotoに必要な幅(width)と高さ(height)には、SIZE 関数によって取得したピクセル配列の値が設定されます。この新しい関数(PHOTO_ROTATE)により、写真は正しい方向に表示できます:

  WAVE> tr = PHOTO_ROTATE(t, 3)

次に、イメージのサイズを変更するために、RESAMP関数をラップしてもう一つの新しい関数をつくりました。RESAMPには変更するイメージの幅(width)と高さ(height)を入力します、また最近傍近似(nearest-neighbor)補間の代わりに双一次(bilinear)補間を行うためのオプションキーワードInterpも使えるようにします。一般的に、特にイメージデータの場合、NN(最近傍近似) 補間はあまりよくないと思いますので、/Interpオプションを必ず使うようにします。しかしながら、NNは極めて高速に処理ができるため需要があるかもしれません、またオリジナル関数のインターフェイスと一貫性を持たせるためにこの補間方法もPHOTO_RESAMP関数に渡せるように実装しました。幅と高さも調整されますが、解像度(resolution)がどのように修正されるかよくわからない(私はデジタル写真の専門家ではないので)ところがあり、未変更の部分が下部に少し残ってしまいます。ともかく、スクリーン上に写真全体を表示することができるようになりました:

  WAVE> ts = PHOTO_RESAMP(tr, 750, 1000, /Interp)

  WAVE> PHOTO_DISPLAY, ts

ついに、私の写真がPV-WAVEの表示ウインドウに現れました、素晴らしい景色です。

f:id:RWSJapan:20170224155905j:plain

ここまでの作業を終えて、私は更に2つの作業を追加する事にしました。 まずは、ROTATE関数より便利で、実際私も良く利用する ROT 関数を使う事、二つ目は画像サイズを適切に変更しつつアスペクト比を変えないPHOTO_RESIZE関数をつくる事、画像サイズを適切に変更するにはイメージを適切にリサイズする方法について更に知る必要があります。この為、更に以下の2つの短いラッパーユーティリティーを追加しました。 はじめに, PHOTO_ROT にはROT関数が持つすべてのインターフェイス、任意回転角、倍率、回転中心x,y、及びInterpやMissingキーワードを含むすべてのパラメータをラップします。ROT関数を使うと、出力される配列のサイズは入力と同じになる為、dimensionキーは変更されません。このラッパーの複雑な操作により様々な結果を楽しむことができます。 アスペクト比に関するジレンマを解決する為、PHOTO_RESAMPを更にラップしてPHOTO_RESIZE を新たに作成しました。この関数は既存のPV-WAVE関数にはマップされません。代わりに、ユーザが一つのキーワード:倍率(Magnification)と幅(Width)又は高さ(Height)を指定するだけでイメージをリサイズします。アスペクト比 (AR = W/H) を保ちながら、他の2つの値は自動的に計算されます。 Magnification キーワードを設定するには元の画像サイズを知っておく必要がありますが、WidthとHeightはそのどちらかを指定するだけです。

この時点でついに、モバイルフォンからロードした写真を回転させ、サイズを変え私の小さなモニターに表示できるようになりました。コマンドの手順は以下の通りです:

  WAVE> t = PHOTO_READ(‘c:\dev\data\trees.jpg’)

  WAVE> r = PHOTO_ROTATE(t, 3)

  WAVE> s = PHOTO_RESIZE(r, Height=1000)

  WAVE> PHOTO_DISPLAY, s

ここで紹介したヘルパー関数はすべて GitHubから入手できます。できれば他のユーザもPV-WAVE2016.1に含まれる新しいPHOTO関数、これらの役に立つ機能を使ってみたいと思って頂ければと思います。尚、Part2では新しい機能をもっと探求し、追加されたツールやユーティリティについて紹介したいと思います。

f:id:RWSJapan:20170224160520j:plainEd Stewart はソフトウェア業界で15年の経験をもつセールスエンジニアです。Edは実験流体力学を専攻し、研究論文を発表し、米国デラウエア大学の博士課程(Ph.D)を取得しています。現在彼は、開発者の仕事を簡単にするための役割を担っています。

編集後記

いかがでしたか? これまでPV-WAVEにあったImage関数(Image_Read,Image_Display)を使ったことのある方であれば、なるほどと思われたのではないでしょうか? 近々投稿されるEdによるPart2も楽しみに! 

PV-WAVEに関する過去の投稿もご覧ください。

PV-WAVEの新機能についてはこちらをご覧ください。

By M.S

TotalView 2017.0 リリース - ReplayEngine高速化、新UIにウォッチポイント、NVIDIA Tesla P100

ローグウェーブが開発しているデバッガTotalViewとCodeDynamicsは、アプリケーションを実行時に分析し、バグの原因やメモリ問題、クラッシュなどを見つけるための便利なツールです。

TotalViewとCodeDynamicsの新バージョン2017.0はPascal GPUアーキテクチャを利用した新しいNVIDIA Tesla P100 GPU上でのデバッグをサポートします。今回の機能向上により、GPUを止めることなく個別のスレッドをオフにできます。

リリースに前後してTotalViewのプロダクトマネージャーであるMartin BakalがTesla P100のサポートについて 記事を書いています。このチップの特徴の一つに命令レベルのプリエンプションをサポートしていることが挙げられます。一つのGPUがグラフィック描画とアプリケーションの計算両方に同時に使用されると画面の更新はしばしば遅延することになります。さらにデバッガがブレークポイントGPUを止めるとデバッガ自体の動作も止まってしまいます。しかし今回の新しいチップではもうそのような心配はありません。TotalViewもCodeDynamicsも、単一のGPUを持つシステムでも複数のGPUを持つシステムでもシームレスで快適なデバッグ体験を提供します。

その他の追加機能として、

  • リバースデバッグ機能RelayEngineGoBack操作が高速化
  • TotalView新UIとCodeDynamicsへの追加点
    • 新UIでウォッチポイントを作成可能に
    • プロセスとスレッドの状態を見やすくするための色分け表示
    • 「Create Breakpoint At Location」ダイアログによる新しいブレークポイント作成方法

f:id:RWSJapan:20170209095009p:plain

機能の強化と追加に関する詳細はTotalView 2017.0 CodeDynamics 2017.0にある更新情報をご覧ください。

既存のお客様はフォームから新しいバージョンをリクエストすることができます。また、購入をご検討の方は、トライアルも利用可能です。

新UIでのFortranデバッグとリバースデバッグの動画が先日公開されましたので、まだご覧になっていない方はぜひご覧ください。 blog.roguewave.jp

ローグウェーブ セールスエンジニア 柄澤(からさわ)