Quantcast
Viewing all 686 articles
Browse latest View live

Universal Links 実装のニッチな落とし穴

こんにちは。モバイル開発チームに所属している小島です。

現在kintoneというクラウドサービスのUS向けiOSアプリを開発しています。 kintoneは、お客様ごとにサブドメインで区切られています。 そういった特徴のあるkintoneのクライアントアプリでUniversal Linksを実現しようとした時に、ハマったこと、またその解決方法を紹介します。

Universal Links とは

iOS 9から導入された機能で、URLを開いた時にwebページではなくアプリを立ち上げることができるようなります。

実装方法

公式のドキュメントは以下です。

https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

細かい実装方法については、検索すればたくさんの日本語の解説があるのでそちらをご参照ください。 かいつまんで書くと

  • (サーバー側) 紐付けたいURLのドメインのルートに apple-app-site-association ファイルを置く
  • (サーバー側) apple-app-site-association に、紐付けるアプリの情報と、パスを記載する
  • (アプリ側) プロジェクトの Capabilities > Associated Domains のところに紐付けるドメインを設定する

これでOKのはずです。公式のドキュメントには、ワイルドカードとして*が使用できるとのことだったので、アプリの Associated Domains には以下の設定をし、各ドメインのルートに apple-app-site-association を配置しました。

applinks:*.cybozu.com

これではダメでした😢

結果的には、これではうまくできませんでした。
何回URLを入力してもアプリは立ち上がってきません。

解決に向けて🤔

さてどうしたもんかと、まずは Stack Overflow を検索したりもしましたが、有効な情報は得られませんでした。
そもそも接続先のドメインがユーザーによって異なるようなサービスが少ないためでしょうか。

とりあえず、どのタイミングで apple-app-site-association を端末が見に行っているのか気になって、通信内容を確認したところ光明が見えてきました。

apple-app-site-association ファイルは、インストール時(またはアップデート時)にアクセスしていました。
以下のキャプチャはその時のものです。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180302170616p:plain

このキャプチャからわかるように、
https://cybozu.com/apple-app-site-association
へアクセスしています。

※ この記事のためにキャプチャを取り直しているので、今は 200 OK が返ってきていますが、調べた当時はエラーでした。

よくよく考えてみれば、各ドメインごとに apple-app-site-association を見に行くよりは、この方が合理的ですね😎

結論

*.cybozu.com に対して Universal Links を設定する場合は、cybozu.com に apple-app-site-association を配置する。

(hoge.cybozu.com, huga.cybozu.com に配置してもうまく行きません)

ニッチな情報ではありますが、どなたかの参考になれば幸いです。


QAもスクラム導入、アジャイルQAとしての取り組み──Cybozu Meetup #11 開催レポート

品質保証部の匠です。

2/21(水)に、Cybozu Meetup #11「アジャイルQA」を開催しました!
QAプロセスに特化したMeetupで、参加者が集まるか少し不安でしたが、 当日は50名を超える方々にご参加いただき、大盛況の開催となりました!

cybozu.connpass.com

本エントリでは、当日の様子を紹介しつつ、私のトークセッションについての補足をしてみようと思います。

トークセッション

サイボウズでは多くの開発チームがスクラムによるアジャイル開発に移行しつつあります。
今回は、各チームのQAがどのようにアジャイルプロセスを導入しているのか、について事例紹介として3つのトークを実施しました。

アジャイルネイティブなQA by 三牧 麻美

www.slideshare.net

新卒入社2年目の三牧 麻美が、開発中の新しいkintoneモバイルアプリの品質保証責任者として、 新規開発チームのQAプロセスをスクラムで構築する際に実践したことをご紹介しました。 アジャイル開発しか経験したことのないネイティブ世代として、 プランニング時から積極的に開発チームに関わり、試験バックログなどを駆使してQAプロセスを管理しています。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305175633j:plain

「開発チーム」とQA by 小山 晃久

speakerdeck.com

こちらも新卒2年目の小山 晃久による、大規模グループウェアGaroonの開発チームについてのご紹介です。 QAとして各スクラムイベントにどのように参加しているか、試験設計に関する今後の課題などが挙げられました。 また、スクラムガイドにおける「開発チーム」の定義では各メンバーの役割による肩書はない、ということについて、 職能による部門構成のサイボウズでは、「開発チーム」"と"QAはどのように付き合うのがよいか、 といった疑問点の投げかけもありました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305141527j:plain

QAにおけるスクラム導入 Before/After by 匠 史朗

www.slideshare.net

前の二人とは打って変わって、フレッシュ感の薄い中途入社10年目の匠 史朗が、 ウォーターフォールどっぷりの開発プロセスから抜け出す際の苦労話をさせていただきました。
お伝えしたいことがたくさんあり、、端折り気味だった内容の補足も少しさせていただきます。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305141625j:plain

スクラム導入の前後で、開発プロセス全般やQAプロセスの変化により、 リリースサイクルを大幅に短縮したり、慣例となっていた同時リリースをやめて 柔軟なスケジューリングに変更したりといった改善点がありました。 一方で、主にQAプロセスにおいては、従来の方式を引きずっている部分が多くある状態で、 リグレッションテストの回数が増えることによる疲弊感や、 試験設計の粒度を変更すべきかどうかといった悩みなどの問題点も見えてきています。 また、実装プロセスはバックログでの見積もりやカンバンでの進行管理などによるアジャイル化が進んでいますが、 QAプロセス自体はスプリント内で作業を進めるようなところまでは未だ到達できておらず、 単に実装が完了したタスクから順に試験設計を開始するというだけのミニ・ウォーターフォール状態に陥っている現状についても、 課題として挙げさせていただきました。
アジャイルネイティブな世代と違い、まずさまざまな変化を受け入れる必要があり、 当たり前に積み重ねてきた概念を一度ぶっ壊して思考を変えていかないと対応できない部分もありました。 今までの経験は大事にしつつも、変化できないイタイおじさんにならないように 今後も日々精進していきたいと思います!

懇親会&パネルディスカッション

トークセッションの後は、懇親会と並行してご来場の皆さんからいただいた質問に回答する形式でパネルディスカッションを実施しました。

パネルディスカッションには、アジャイルな品質保証について多数の発信をしておられる 株式会社日新システムズの永田 敦 さんをスペシャルゲストにお迎えしました。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305141727j:plain

永田さんは、昨年の2月に社内で開催した「アジャイルとQA(DevQA)」に関する勉強会にもお越しいただき、 様々なアドバイス等をいただきました。 それが、サイボウズにおけるアジャイルQA化を推し進める大きなきかっけとなっています。

会場から40件以上の質問を頂戴し、登壇者や永田さん、場外からも何人かのメンバーを引っ張り出して 質問に回答することができました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305144544j:plain
Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305141707j:plain
Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305141659j:plain
Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305141654j:plain

いくつかの質問と回答の概要を載せておきます。

・QAよりアジャイルQAの方がお給料増えますか?
 →それだけでは増えません。
  アジャイルにすることはひとつの手段であって目的ではない。
  ただ長い目で見れば、チームへの貢献度が上がれば必然的に上がるかも?

・QAの採用ってどんなポイントを見ているんですか?
 →行動面でサーバント特性(献身性、癒し属性)があるとよい。

・QAとPGの人数の比率はどのくらいが良さそうと思いますか?
 →組織の構成やチームの状況次第なので一概には言えないが、
  最低でもそのドメイン専任のQAを1人は置く方がよい。

・専任でQAがいない会社にどうQA的なポジションを作ってくか?
 →全員が必ずしも専任である必要はない。
  QAマインドを持ったエンジニアが理想かもしれない。

・リモートでコミュニケーションする時のコツは何ですか?
 →チームメンバーが、一度はリアルでコミュニケーションした方がよい
  リアルでコミュニケーションしているかしていないかで障壁の下がり具合が格段に違う

・アジャイルQAを目指す人が読んだほうがよい書籍はありますか?
 →スクラムガイド、ソフトウェアテストの教科書、アジャイルレトロスペクティブ、エッセンシャルスクラムなど。
  輪講などをしてチームで同じ本を読むと、認識の齟齬がなくなって浸透しやすい

・アジャイルな開発になるとテストの粒度とかも変わってくるのでしょうか?実施するテストケース自体は変わらない?
 →単純に減らしていいということではなく、原則的には変わらない。
  PBIのサイズが限定されるので、試験項目が多くなりすぎず、逆に細かくなったところもある。

ご来場いただいた皆様、ありがとうございました。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180305142224j:plain

ご来場の皆様や中の人たちによる当日のTweetを以下にまとめましたので、是非ご覧ください。 togetter.com

今後もQA関連のMeetupを開催予定!

今回ご好評をいただきましたので、QA関連のMeetupを今後も計画する予定です! ご興味ある方は、connpassグループ「Cybozu Inside Out」をフォローして、情報をチェック頂ければと思います。

We are Hiring!

サイボウズでは、今回のテーマであるアジャイルQAに興味をお持ちの方を含め、 QAエンジニアの新卒/キャリア採用募集を行っております。
東京に限らず、松山や大阪(応相談)でも同様の募集を行っておりますので、 地方での転職やU/Iターンをお考えの方も、是非ご応募お待ちしております!

EPYCマシンの検証 (1)- SEGV問題の発生有無

はじめに

技術顧問のsatです。サイボウズはAMDの最新サーバ用プロセッサEPYCを搭載したマシンを最近購入しました。EPYCは各種技術サイトのベンチマークにおいて優れた性能を示しているにもかかわらず、同プロセッサを搭載する製品が少ないこともあり、現物についての情報をあまり見かけないのが現状です。そんなEPYCマシンに対するサイボウズによる様々な検証について、数回に分けて連載形式でお伝えしたいと思います。

SEGV問題

EPYCと同じマイクロアーキテクチャを採用したPC用プロセッサRyzenには、いわゆる「SEGV問題」という問題が存在しました。第一回では、この問題が手元のEPYCにおいても発生するかどうかを確認した結果についてお伝えします。筆者は幸か不幸か私用PC(Ryzen1800x)においてSEGV問題に遭遇して複数個体を検証しましたので、今回はその経験に基づいて検証をしました。

事象

Ryzen1000系のCPU(Ryzen ProやThread Ripperについては未確認)において、特定の負荷(はっきりしているのはgccやclangによるビルド負荷)をかけるとプログラムがSIGSEGVを受信する。通常はそのまま異常終了する

これまでに明らかになっていること

  • AMDはRyzenの一部の個体においてSEGV問題があることを認めつつも、ハイエンドPC用のRyzen Thread Ripper、およびサーバ用のEPYCでは起きないとPhoronixにコメントしている
  • 最近製造された個体では問題は解消されているらしい。少なくとも筆者が持っていた個体については交換によって問題が解消した
  • 本来のものよりも64バイト(キャッシュラインサイズに等しい)前にある命令を誤って実行したことがきっかけと考えれば説明がつく場合がある。それ以外の場合があるかは不明。
  • 個体や各種HW/SWの構成によって発生確率が変動すること、および、起きない個体ではまったく起きないことから、恐らくは設計の問題ではなく製造の問題

ここに記載したことについての詳細が気になるかたは、記事の末尾に記載したリンクを参照ください。

検証結果

検証したEPYCマシンにおいてはSEGV問題は発生しませんでした。

検証環境

  • サーバ: Super Micro AS-1023US-TR4
  • CPU: EPYC 7451 x 2 (48コア、96スレッド)
  • メモリ: MEM-DR432L-HL01-ER26 (32GB * 16, 合計 512GB)
  • OS: Ubuntu 16.04.4
  • カーネル: v4.4.0-116-generic

検証方法

1) linuxカーネルをダウンロードしてビルド用の設定をする

$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.15.7.tar.xz
$ tar xf linux-4.15.7.tar.xz
$ cd linux-4.15.7
$ make defconfig
...
$ 

ここではlinuxのバージョン4.15.7を使っていますが、バージョンは何でもいいです。他のプログラムのビルドにおいても問題が発生した事例もありますが、ここでは筆者が再現確認に使っていたlinuxカーネルを用います。

2) 次のような再現スクリプトの実行によって、linuxカーネルビルドを2日間繰り返す

#!/bin/bash

NCPU=96

for ((i=0;1;i++)) ; do
  if make -j$(NCPU) >/dev/null 2>>log.txt ; then
    echo "$i: $(date): OK" >>log.txt
  else
    echo "$i: $(date): NG" >>log.txt
  fi
  make clean >/dev/null 2>>log.txt
done

これまで筆者が5つのRyzen1800xを検証した結果、問題のある個体(5つ中3つ)は最長でも2時間に一回は問題が発生していたため、検証結果を2日もとればよいだろうと判断しました。

3) log.txtにNGを含む行がひとつもなければ成功。そうでなければ失敗

検証結果

再現スクリプトを約26時間動かしても問題は発生しませんでした。AMDがSEGV問題についての詳細を明らかにしていないことより、AMDの関係者ではない私にはこの検証結果をもって「すべてのEPYCではSEGV問題は発生しない」とは言えませんが、少なくとも検証対象となったマシンにおいては恐らく問題ないだろうということがわかりました。

余談ですが、上記私用PCでは平均78秒かかっていたlinuxカーネルビルドがEPYCマシンでは約1/3の平均25秒で済むようになりました。凄まじい計算能力ですね。

参考サイト

サイボウズQAスクラム奮闘記 ―JaSST’18 Tokyo 発表レポート

こんにちは。サイボウズのQAエンジニアの矢引です。

先日、JaSST'18 Tokyoの「Agile Japan x JaSST」セッションにて講演しました。セッションの実現に向けてご尽力いただいたAgile Japan 実行委員の皆様、そしてならびにJaSST実行委員の皆様にこの場を借りて御礼を申し上げます。

JaSST'18 Tokyoでは、サイボウズがどのようにQAプロセスをスクラムに適応させたのかというテーマで、2つの事例を交えてご紹介しました。また、スクラムへの移行の過程で発生する問題や疑問を取り上げ、Agile Japan 実行委員会と一緒にグループワーク形式で考えるワークショップを行いました。

本エントリでは、発表内容の概要と当日の会場の様子(頂いた質問など)をご紹介します。

発表資料

www.slideshare.net

当日の会場の様子

多くの人に参加いただき、アジャイルへの関心の高さがうかがえました。 講演前にはAgile Japan実行委員の皆様による小話(?)もあったお陰で、良い雰囲気の中で発表することができました。 グループワークでは、7分という短い時間の中で初めて会ったメンバー同士でうまく話し合ってもらえるか不安でしたが、そんな不安をよそにどのグループも白熱した議論が展開されていたのが印象的でした。 また、グループワークで出た内容を発表してもらったグループには、当日のお昼に届いたばかりのAgile Japan 2018のステッカーがプレゼントされるなど、コラボレーション企画らしい一幕も見られ、大盛況の中終わりました。

【事例1】2 万社のユーザーを⽀える共通基盤チームでスクラムをやってみて

アプリ基盤チームの矢引が、cybozu.comの共通管理機能の品質保証責任者として、QAプロセスをスクラムに移行する際に行った準備作業やスクラム導入によるメリットを紹介しました。 また、「スクラムは問題発見しやすいフレームワークである」ということについて、スクラム移行時に実際に直面した問題とその解決策をご紹介しました。

発表後、マインドマップの試験仕様書に関する質問があがりました。Excelの固定3レイヤー法(テスト観点を大項目・中項目・小項目で記載する方法)と異なり、マインドマップはテスト観点の階層を自由に設定できるというメリットがありますが、自由度が高いため人によって書き方がバラバラになってしまう可能性あります。それを防ぐために、雛形を作り、マインドマップの第一階層を共通化して対応したという工夫を紹介しました。

当日もお話ししましたが、今回ご紹介した私たちのチームのプロセスもまだまだ課題が残っているため、今後も引き続き改善してより良いプロセスにしていきたいと考えています!

【事例2】複数拠点での大規模スクラムへの挑戦

Garoon開発チームの岡崎が、スクラムマスターとして、どのように大規模スクラムへ移行していったのか、 またQAプロセスをどのようにスクラムへ適応させていったのかを発表しました。

発表後の質問では、私達が取り入れた大規模スクラムのフレームワークである「Nexus」についての質問や、スプリント期間に関する質問などが挙がりました。 大規模スクラムのフレームワークはNexus以外にも「LeSS」や「SAFe」といったものもあり、それぞれ特徴が異なるため、チームをスケールさせる際には自分たちの組織/チームの状態に合ったフレームワークを選んでいただければと思います。

今回は時間の都合上、話をすることができなかった部分もあるので、またこのような機会があれば、是非お話させていただきたいと思っています!

最後に

サイボウズもまだまだスクラムを導入したばかりです。 今後も、同じようにアジャイルQAに取り組んでいる皆様と積極的に情報交換をしてQAプロセスをより良くしていきたいと思っています。

We are Hiring!

サイボウズでは、QAエンジニアの新卒/キャリア採用募集を行っています。 もしサイボウズに興味を持っていただけた方は、こちらの採用ページをご確認ください。

サイボウズのログ基盤 2018年版

こんにちは。アプリケーション基盤チームの @ueokandeです。 今日は、サイボウズの新しくなったログ基盤についてお話しします。

サイボウズのログ基盤の進化

リプレイス前のログ基盤

サイボウズのログ基盤はサービスの成長に合わせて、常に進化し続けてます。 そんななか2017年の夏に大きなリプレイス作業がありました。

以前のログ基盤は、ログを収集するホストがあり、各ホストからログを収集してました。 しかしログの転送システムが単一障害点であったり、スケーラビリティに欠けるのでサービスの成長に追いつかず、性能的にも限界に達してました。 また以前のログ基盤では、ログの解析がしにくく、ログはあるけどビジネスに役立てにくい状況でした。

そのため今後のサービスの成長や、より安定したログ基盤を運用できるように、ゼロから刷新することにしました。 またログ基盤刷新と同時に、サイボウズの社員がより簡単にログを検索・解析できるような仕組みの導入も目指しました。

サイボウズのログ基盤で求められてること

ログは、Webアプリケーションの健康状態・利用状況を表すのに欠かせないもので、障害対応や製品開発などに役立てることができます。 サイボウズのクラウドサービスは、独自のデータセンターで稼働しているため、Webアプリケーションの状態だけでなく、物理機材のログも日々監視しています。

VMと物理機材を合わせると1000を超えるホストがサービスを提供しており、ログの量は1日800GBにも上ります。 これらのログを活用するために、全てのホストからログを収集、保存、そして解析できるログ基盤が必要になります。 サイボウズのログ基盤の要件は、次のようなものがあります。

  • 到達保証: ログを取りこぼすことなく、途中の経路でもデータロスしないこと
  • 長期保存: 最低10年間ログを保存できること
  • 高スループット: サービス成長に追従して、ログ基盤もスケールできること
  • ユーザビリティの向上: grepで検索するのではなく、検索・解析できるプラットフォームがあること

ログ基盤の全貌

2018年現在のログ基盤の全体図は以下のようになります。

Image may be NSFW.
Clik here to view.
Log Architecture

ログ基盤ではログを一時的に保存する場所として、分散メッセージングシステムであるApache Kafkaを採用しました。 ログを永続化する保存先には、Apache Hadoopをバックエンドに持つApache HBaseを採用しています。

アクセスログはHadoopクラスタに保存され、PrestoとRedashを使ってHive上のデータを解析できるようにしました。 全てのログのうち直近のログは、Elasticsearchをバックエンドに持つGraylogで、検索・解析ができます。 それ以外の古いログは、HBaseに問い合わせることで、CLIからログを閲覧できます。

それではそれぞれのコンポーネントについて、より深く見ていきたいと思います。

各ホストからKafkaへの転送

各ホストからKafkaへ転送するログは、ファイルのログとjournaldのログです。 転送デーモンは、ファイル・journaldを監視して、新たな書き込みがあったデータをKafkaに転送します。 そして転送が完了した古いログは、ディスクを圧迫しないよう削除します。 転送デーモンがログの送信から古いログの削除を行うので、ログを欠損することなく確実にKafkaに送信できます。

また、出力されるログをほぼそのままの形式でKafkaに記録し、ログの加工処理は後段のサービスに任せます。 ログは行ごとに分割してKafkaに送信しますが、ログの1行あたりの長さはアプリケーション依存なので予測できません。 開発環境でしたが、1行数百MBものログに遭遇することもありました。 なので転送デーモンは、ログを一定の長さ毎に分割してKafkaに記録します。 このとき分割されたログだという状態を付与して、Kafkaに保存します。 ほかにもホスト名やタイムスタンプなどの情報を付与します。

Kafkaクラスタ

クラスタの中心に、分散メッセージングシステムのApache Kafkaを採用しました。 Apache Kafkaは高い信頼性とスループット、そしてat-least-onceを容易に実現できるため、我々の要件と非常に相性が良かったです。 そしてApache Kafkaクラスタの存在で、メンテナンスや仕様の変更に強いシステムも実現できました。

Kafkaでは耐障害性と可用性を考え、レプリカ数3、mininum in-sync replicaを2にしています。 そして確実にKafkaにデータが書き込まれることを保証するため、書き込み側は全てのin-sync replicaの書き込みを待つよう設定します。

HBaseによる長期ログの保存

Kafkaに一時的に貯められたログは、最終的にHadoopクラスタに永続化されます。 Hadoopは高信頼で高いスケーラビリティのある分散ファイルシステムを構築できます。

小さなログファイルを直接HDFSに保存すると、パフォーマンスの問題があります。 またテキストファイルは検索の利便性に欠けるため、ログはHDFSをバックエンドに持つApache HBaseに記録します。 HBaseはGoogleのBigtableを元に作られており、大量データを高速に処理できます。

HBaseには「トピック名」「ホスト名」「タイムスタンプ」をキーとしてログを記録しています。 この設計で、ユーザーが見たいログに高速にアクセスできます。 直接HBase Shellを叩くのは辛いので、ユーザーにはCLIのクライアントツールを提供しました。

Hive、Presto、Redashによるアクセスログ解析基盤

アクセスログは、ログの中でも需要が高いログです。 アクセスログを検索・解析することで、製品改善に役立てたり、販売促進につなげることができます。

Kafkaに保存されたアクセスログは、Hiveから読めるようにHDFS上に保存します。 そしてパワフルにログの検索や解析をできるよう、Prestoを採用しました。 また開発の人以外の社内の人向けに、Redashを採用してWeb UIからクエリを叩けるようにしました。

ユーザーフレンドリーなWeb UIを提供することで、開発側の人間だけでなく、 営業やマーケティングの人たちもアクセスログをビジネスとして活用できるようになりました。 例えばダッシュボードでA/Bテストの結果を可視化したり、アラートを設定してパフォーマンスの劣化を検知できるようになりました。 以下のグラフは、ある日のサイボウズLiveの1日のアクセス数の例です。

Image may be NSFW.
Clik here to view.
Cybozu Live Access Count

Elasticsearch、Graylog によるログの検索・解析基盤

HBase上から全てのログを閲覧できますが、HBaseは全文検索に不向きです。 またデータセンターにログインする必要があるため、気軽にログを見ることができません。 そこでWeb UIから容易にログを検索するために、Elasticsearchをバックエンドに持つGraylogを採用しました。 全文検索はとても高速なので、ユーザーは複数のホストや時刻をまたがった検索なども容易にできます。

Elasticsearchクラスタは高速に検索・解析がしたいので、NVMe機材上に構築しました。 毎日800GBものログが生成されるので、全てのログを格納できるElasticsearchクラスタを構築するのはコスト的に見合いません。 なので直近のログをElasticsearchに保存するようにしてます。

またGraylogを採用したもうひとつの理由は、詳細な権限設定ができるためです。 社内では、お客さんのデータをマスクしたログと、お客さんのデータを含む生のログを出力してます。 Graylogではロールベースで権限を設定できるため、たとえばお客さんのデータを見る権限が無い人には、マスクされたログしか見れないという運用が可能になりました。

最後に

以上で、2018年現在のログ基盤の全貌となっています。 現在は本番環境で元気に安定稼働しており、日々の業務に役立っています。 とはいえ全てが順調に行くはずもなく、開発初期は分散システムの謎の挙動に悩まされたりしました。 しかし本番環境に導入する前に、長期間ステージング環境で動作させ、問題の早期発見につながりました。

サイボウズではログ基盤の構築や運用に興味のあるエンジニアを募集しています。 この取り組みに興味がある、協力したいという方はご連絡ください!

www.wantedly.com

サイボウズスプリングインターン2018 報告〜Webサービス開発コース

こんにちは、kintone開発チームの外松(@10shi10ma)です。

サイボウズでは先月、スプリングインターンシップを開催しました!
これまでは8月や9月にサマーインターンを中心に開催してきましたが、就職活動の前に会社を知りたいという声が多かったので、スプリングインターンを初めて開催しました。
今回はWebアプリケーション開発コースの様子を紹介します。

Image may be NSFW.
Clik here to view.
スプリングインターンメンバーの集合写真

インターンの概要

2/19(月)〜2/23(金)の5日間でスプリングインターンを開催しました。Webアプリケーション開発コースには、2名の学生が参加してくれました!
Webアプリケーション開発コースでは、サイボウズが提供しているクラウドサービス「kintone」に対して、実際にお客様から寄せられた要望を参考に、新機能のプロトタイプを作ってもらいました。
ただ機能を実装するだけではなく、 サイボウズの開発チームが普段から行っている開発プロセスに沿って進めます。利用シナリオを想定した仕様検討やメンターによるレビューや実装など、一連の流れを体験してもらいました。

プロトタイプ

インターン生2名に作ってもらったプロトタイプを紹介します。

全文検索結果からファイルをダウンロードできる機能

Image may be NSFW.
Clik here to view.
全文検索結果からファイルをダウンロードできる機能のスクリーンショット

kintoneはデータを横断的にキーワード検索できる「全文検索機能」があります。添付ファイルが検索にヒットした場合、検索結果にファイル名とファイルアイコンが表示されますが、ファイルをダウンロードする為には、ファイルがあるページに遷移しなければいけません。
そこで全文検索結果で、ファイルの名前やアイコンをクリックするとファイルをダウンロードできるようにしました。

関連するアプリを確認できる機能

Image may be NSFW.
Clik here to view.
関連するアプリを確認できる機能のスクリーンショット

kintoneはルックアップ機能を使って別のアプリからデータを取得することで、複数アプリを関連させることができます。しかし関連するアプリをひと目で把握する方法がなく、管理が大変です。
この問題を解決するために、ワンクリックで関連するアプリの名前を表示できるようにしました。

インターン中のスケジュール

1日目

1日目は、インターンについてのオリエンテーションを行ったあと、自己紹介を兼ねて人事やメンターとのランチ会を開きました! その後は、kintoneを実際に使ってみたり、機能を開発する上で必要となる知識を身につける練習問題に取り組みました。

2日目

2日目は、まずお客様からの声を参考に選んだ要望リストから、各自が取り組む課題を選びます。その後、実装する機能の仕様書を作成しました。
ユーザーストーリーや利用シナリオを検討して、仕様をまとめます。メンターからのレビューだけではなく、インターン生同士でも仕様の考慮漏れや改善点を指摘し合いました。

3日目〜4日目

3日目と4日目は、作成した仕様書をもとに機能の実装を行います。普段のkintone開発チームが使っているものと同様のツールで実装を行えます。 インターン期間中は、メンターが常にインターン生からの相談を受けたり、ペアプログラミングをして課題を進めました。 また、社長の青野とのランチ会や社員面談を設けることで、サイボウズという会社について知ってもらう機会をいくつか設けました。

Image may be NSFW.
Clik here to view.
社長とのランチ会の写真

5日目

最終日である5日目は、成果発表会を開催します。実装したプロトタイプの紹介やデモ、5日間のインターンで経験したことや感じたことを発表してもらいました。 成果発表会には、たくさんの社員が参加して質疑応答や活発な意見交換が行われました。
その後は、「5日間お疲れ様でした」の気持ちを込めて、懇親会を開きました。インターン生は、サイボウズの社員や過去のサマーインターンに参加してくれた学生(4月から入社予定の内定者)とも交流してくれていました。

Image may be NSFW.
Clik here to view.
成果発表会の写真

インターン生の感想

今回Webアプリケーション開発コースに参加した方の感想を紹介します。

普段のソフトウェア開発と一番違う点はやはり、大規模なコードを触って動かせるところだとおもいます。 その中でどうコードを紐解いて読んでいけばいいのかを懇切丁寧に教えていただき、とても参考になりました。 わからないものがほとんどのコードを読んでもいいんだという気分になりオープンソースやライブラリのコードもこれからは怖気づかずに読みにいきたいと思うようになりました。 技術以外の面でも青野さんをはじめ、想像していたよりもたくさんの人にお話しを伺う機会があり進路の参考にもなり大変満足しました。


インターンで一番に学んだことは、チームで開発を行う体制について学べたということです。 この経験を研究室のプロジェクトからでも実践しようと思います。 メンターの方も丁寧に接して頂き、初めは緊張していましたが、すぐに打ち解けられました。社内でも、強い上下関係はなく、個人として尊重し合う文化を感じました。これは部活 ?や、勉強会などわいわいできる場を設けているからなのかもしれません。 短い間でしたが、技術的のみならず、チーム,会社としてあり方について色々考えさせて頂く貴重な体験ができました。

まとめ

5日間という短い期間で、仕様検討からプロトタイプの実装まで取り組んでもらいました。
サイボウズのエンジニアが日々取り組んでいる開発プロセスに合わせて課題を進めることで、実際の仕事のイメージを感じてくれたようです。 また、サイボウズの文化や雰囲気をたくさんの社員に触れて、感じてくれたと思います。
就職活動も近い時期なので、将来を考える良いきっかけになれば嬉しいです。そして今回学んだことを活かして、今後も活躍してほしいです!

新卒採用 エントリー受付中!

サイボウズでは、新卒(19卒)採用のエントリーを募集しています。 もしサイボウズに興味を持っていただけた方は、こちらの採用ページを見てみてください。

「世の中に価値を届けよう!」サイボウズのプロダクトマネジメントについて

こんにちは!プロダクトマネージャーのサイトウ(@ssk_cyvn)です。 Nintendo Laboのコンセプトメイキングについて非常に関心があります!

サイボウズでは、開発チームに、開発をするプログラマー、品質保証を担当するQA、デザイナーだけでなく、「プロダクトマネージャー」という職種があります。
本記事では、サイボウズの「プロダクトマネージャー」について紹介します!

プロダクトマネージャーとは

プロダクトマネージャーとは経営学用語の一つ。企業においてマーケティング活動全般の権限と責任を持つ管理者を担当する職種を言う。ここで言われている権限というのは製品の開発から、その製品の宣伝、販売、流通などの広範囲にわたっている。プロダクトマネージャーとは職種の名称であり職位を示す言葉でなく、必ずしもマネージャー職が担当すると言う意味ではない。現実にはその製品に詳しい一般社員が担当する場合が多い。 Wikipedia

Wikiによると、製品の開発から、宣伝、販売などいわゆるマーケティングの分野まで、広範囲を担当する管理者と記載されています。

サイボウズでも、プロダクトマネージャーを「PM」と呼んでいるのですが、プロジェクトの管理者である「プロジェクトマネージャー」と混同しがちな職種ですね。 プロダクトマネージャーも、プロダクトマネジメントの役割の一つとして、スケジュールやマイルストーンを管理したり、プロジェクトマネジメント的なことも担当しますが、同じ職種ではありません。 プロダクトマネージャーは、製品そのものに対して責任があり、プロジェクトマネージャーは、プロジェクト、例えば開発プロジェクトの計画や実行に対して責任があります。  

サイボウズのプロダクトマネージャー職の成り立ち

サイボウズは3人の創業者によって始められた会社です。

当初は創業者たちがプロダクトマネジメントを牽引していましたが、会社や事業が拡大するに連れ、事業部制になりました。この頃は各製品の事業部長が事業責任やプロダクトマネジメントを負っていました。
2006年頃に事業部制から職能制とプロジェクト制になり、プロダクトマネージャー職を導入しました。その後、開発部門と連携を強めることと、販売部門の活動を統合するために、開発側、ビジネス側双方にプロダクトマネージャー職を置く体制になりました。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180323152905p:plain

▼参考 サイボウズPM(開発PM)について

2つのプロダクトマネージャー職

サイボウズでは、開発業務を担当する「開発PM」と販売、マーケティング業務を担当する「ビジネスプロダクトマネージャー」(以降BPM)と2つのPM職があります。
もともと独立した組織としてプロダクトマネージャー職が生まれましたが、開発部門と連携を強化するために、開発部門内に統合されていました。
その後、顧客の要求を吸い上げる、販売戦略を立案することに特化した職能として、また担当製品のビジネス面での責任者として、「BPM」が設置されました。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180323153424p:plain

こうしたビジネス側のPM職は、サイボウズだけでなく、他の企業でも見られます。
販売パートナーやサードパーティなど、社外にもステークホルダーが多い、B2B、ビジネス向けの製品やサービスに多いかもしれません。

▼参考 ヴイエムウェア社のPM体制について

サイボウズの開発PM

一方、「開発PM」は、製品開発の方向性やロードマップなどの製品戦略の立案と、実際の開発にかかる要件定義を担当しています。
技術トレンドや競合サービスを見据えながらも、顧客の要求と向き合い、課題を発見して要件化していきます。
販売やサポート部門と連携して実際のお客様の問い合わせを調査したり、顧客ヒアリングやユーザービリティテストを行って課題を探求します。
製品企画だけでなく、製品をリリース、実現するためのマネジメントも行い、プロジェクトマネジメントや各部門との調整業務も担当します。

ビジネスチームと課題を探求する

次のスライドでは、アメリカ拠点のビジネスチームと協同してペインストーミングやカスタマージャーニーマップという手法を使って課題を探求し、どんな問題に取り掛かるかを定義した体験が書かれています。
こうした手法による顧客や市場の課題の仮説設定もプロダクトマネージャーの重要な役割です。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180323154528p:plain

▼参考 ペインストーミングで言葉の壁を超える

利用者の行動を観察する

課題の探求は仮説設定だけではありません。利用者がどのような行動をするのか、どんなところで製品の操作に躓くのか、実際に使う様子を観察する調査も行います。
デザインチームと協力してユーザービリティテストを実施したり、利用者の行動や発言から、製品の課題を探求します。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180323154744j:plain

▼参考 【ユーザビリティテスト@サンフランシスコ】

利用者の行動を分析する

対面による行動観察やヒアリングだけでなく、実際の利用者の状況を分析する手法もあります。当社の製品はクラウドサービスとして提供しているものが多くなってきました。クラウドサービスの場合、アクセスログにより利用者の行動を具体的に分析できます。障害調査だけでなく、(顧客との利用規約の範囲内において)利用状況の多寡や遷移状況などを分析しています。
また、このためのログ基盤も整備して、製品機能の課題を発見したり、機能改善に活用しています。

▼参考 サイボウズのログ基盤 2018年版

開発メンバーと開発をすすめる

こうして発見した課題を機能に落とし込み、確実にリリースする責任があるのがプロダクトマネージャーの責任です。
開発チームのメンバーに、しっかり納得、理解してもらった上で開発を進める必要があります。チームによっては、ベトナム、上海拠点と協力して開発を進めています。
意見交換やノウハウ共有、親睦を深めるために年に数回実際に海外拠点に出張することがあります。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180323155005j:plain

ということで、製品企画、製品開発に特化したプロダクトマネージャーについて紹介させていただきました。
企業向けサービスであること、エンタープライズ分野にも関わることができる職種です。
当社では、プロダクトマネージャーを募集しています。ぜひご応募ください!

Kubernetesで利用可能な分散ストレージのOpenEBSを探求してみた

こんにちは、アプリケーション基盤チームの池添(@zoetro)です。

サイボウズでは、cybozu.comのアーキテクチャ刷新プロジェクト(Necoプロジェクト)を実施しています。

Necoプロジェクトでは、現在以下のようなテーマに取り組んでいます。

  • ハードウェアプロビジョニングの容易化・自動化
  • 障害に強く、スケールするネットワークアーキテクチャの検討
  • Kubernetesクラスタの構築
  • 高耐久性・高可用性ストレージアーキテクチャの調査

今回は、Kubernetesで利用可能な分散ストレージのOpenEBSを調査したので、その結果を報告したいと思います。

TL; DR

  • OpenEBSのアーキテクチャを解説
  • 設計がシンプルで使い勝手はよさそうだが、耐久性を担保するための機能がやや不足
  • 性能評価の結果は芳しくなかった。高IOPS/高スループットでの利用は難しいか
  • 今回は採用を見送るが、今後の成長に期待

背景

cybozu.comでは数百テラバイトの顧客データを扱っています。
現在はRAID6による冗長化をおこなってハードディスクの故障に備えたり、 RAID1によりレプリケーション用ストレージサーバとミラーリングして、サーバや電源装置の故障に備えています。
さらに1日1回、東日本のデータセンターから西日本のデータセンターへのバックアップをおこない、 大規模なハードウェアの故障や、災害などによるデータセンターの障害に備えた構成を実現しています。

現状の構成でも高い耐久性と可用性を実現できているわけですが、 下記のような要求を満たしたいことから、ストレージアーキテクチャの見直しを考えています。

  • 今後の顧客数やサービスの拡大が見込まれるため、よりスケールするアーキテクチャにしたい
  • Kubernetesの導入に伴い、アプリケーション開発者が容易にストレージを利用できるようにしたい

簡単に言うと、AWSのEBSやGCPのPersistentDiskに相当するようなものを自社データセンターに構築したいということです。

OpenEBS

OpenEBSはKubernetesなどの環境上において、コンテナ化されたストレージを提供するための分散ストレージ技術です。

Kubernetesで利用可能な分散ストレージ技術には、Ceph(+Rook)やCinderなどの選択肢もあるのですが、 今回はシンプルで扱いやすそうな印象のOpenEBSを調査対象としました。

なお、本記事での調査結果は下記のバージョンに基づいています。
今後のバージョンアップで、本記事に記載されている内容と実態が異なる可能性もあるのでご注意ください。

  • OpenEBS 0.5.1
  • Kubernetes 1.9.3

ソースコード

OpenEBSの調査にあたり、下記のリポジトリのコードリーディングをおこないました。

設計も理にかなっているし、シンプルな実装なのでとても読みやすいコードでした。
しかし、ほとんどコメントが書かれておらず、ドキュメントやテストも少ないことが少々気になります。

アーキテクチャ

まずはOpenEBSのアーキテクチャを解説していきます。 Image may be NSFW.
Clik here to view.
architecture.png

OpenEBSを利用するためには、事前にProvisionerとmaya-apiserverをKubernetesクラスタにデプロイしておきます。

最初に、アプリケーション開発者がアプリケーションをKubernetesクラスタにデプロイします。
このアプリケーションはPersistentVolumeClaim(PVC)を使って、 OpenEBSのストレージの利用を要求します。

ProvisionerはPVCが作成されたことを検出(①)すると、maya-apiserverに対して新しいボリュームの作成を依頼します(②)。

maya-apiserverは、ControllerとReplicaをKubernetesクラスタ上にデプロイします(③)。
ControllerはiSCSIターゲットのインタフェースを持ったPodで、Replicaは実際のデータの読み書きをおこなうためのPodです。
このとき、それぞれのReplicaは必ず異なるノード上にデプロイされます。

最後に、ProvisionerがPersistentVolume(PV)を作成(④)し、アプリケーションのPodからControllerにiSCSI接続されます。

この状態で、アプリケーション内からボリュームの読み書きをおこなうと、そのリクエストがControllerに送られます。
Controllerが読み込みのリクエストを受けると、いずれかのReplicaにデータの読み込みをリクエストし、その結果をアプリケーションに返します。
書き込みのリクエストの場合は、全Replicaに対してデータの書き込みをリクエストし、すべてが完了したらアプリケーションに返します。

データの読み書き/スナップショットの仕組み

続いて、Replicaにおけるデータの読み書きの仕組みについて解説します。
読み書きの仕組みには、スナップショット機能が大きく関わってくるので併せて解説していきます。

スナップショット機能を利用すると、特定の時点のデータを保持しておき、いつでもその時点の状態に戻すことが可能になります。
さらに、取得したスナップショットをS3などにアップロードし、長期的なバックアップを実現することも可能です。

Replicaはデータの読み書きとスナップショットをおこなうためのイメージファイルを、 ファイルシステム上のファイルとして扱うので、その構成を見ていきましょう。 Image may be NSFW.
Clik here to view.
snapshot.png

上図に示すように、現在の書き込み対象のイメージファイル(head.img)が先頭にあります。
そこからスナップショットを取得した時点のイメージファイル(snap001.img, snap002.img...)に対して、新しい順に参照が張られています。

これらのイメージファイルはSparse Fileであるため、 見た目的には1つの大きなファイルですが、実際にはデータの書き込まれた領域の分だけしかディスク容量を消費しないようになっています。
(各ファイルの赤い部分が実際にデータが書き込まれている領域、灰色の部分が書き込まれていない領域を示しています)

データを書き込む際には、Headが指しているファイルに対して書き込みをおこないます。

データを読み込む際には、Headが指しているファイルからデータを読み込みます。
ただし指定したブロックにデータが書き込まれていなかった場合、データが見つかるまでParentを辿って古いスナップショットのファイルからデータを読み込みます。

スナップショットを作成するときは、新しいSparse Fileを作成しHeadをそのファイルに向け、Parentとして以前のファイルを指定します。

スナップショットのRevertをおこなうときは、Headの指し先を対象のスナップショットファイルに向けます。

評価

OpenEBSが採用可能かどうかについて、下記の観点から評価をおこないました。

  • 可用性
  • 耐久性
  • セキュリティ
  • 性能

可用性

データセンターの規模が大きくなってくると、ハードウェアは日常的に故障します。
そのため、ハードウェアが1台故障しただけで分散ストレージの機能が提供できないようでは困ります。

OpenEBSでは、ControllerとReplicaはKubernetesのDeploymentによりデプロイされています。
ControllerおよびReplica Podが異常終了したり、Podをホストしているノードに障害が発生した場合、 DeploymentによってPodは自動的に再スケジューリングされます。
再スケジューリングされると、ReplicaからControllerに対して再接続をおこない、Replica間でのデータ同期をおこなって復旧します。

ただし、Controllerは1つしか存在しないため、Controllerが落ちた場合はPodが再スケジューリングされるまでの間ストレージが利用できなくなります。

ReplicaのPodは、KubernetesのAffinity and anti-affinityにより、必ず異なるノードに配置されます。 これにより、1つのノードが故障しても同時に複数のReplicaが落ちることはなく、ストレージの機能を提供し続けることが可能です。
また、Replicaが1つになったときは、書き込みができないリードオンリーモードになります。

なお、OpenEBSでのReplica数はデフォルトで2になっていますが、実運用の際にはこれを増やしていくことになります。
ただし、Controllerから全Replicaに対して同期的に書き込むという実装になっているため、書き込みのコストとのトレードオフが発生します。
ちなみに、ソースコード上にはQuorumReplicaというものも存在するのですが、現状ではまだ利用できないようです。

また、データセンターをまたいだ非同期でレプリケーションをおこなうような機能は、特に提供されていないようです。

耐久性

サイボウズではデータの耐久性をもっとも重視しています。
ハードウェアの故障に備えてレプリケーションしたり、バックアップを取得しておくことはもちろんですが、 下記のような分散システム特有の問題にも対策が必要となってきます。

  • Split Brain: ネットワークの分断によりクラスタ内で複数のサービスが動き、データの競合が発生する。
  • データ不整合: Replica間でデータの書き込み順序が変わるなどして、データの不整合が発生する。
  • Bit Rot: ディスク上の一部のビットが反転し、データの破損が発生する。

Split Brain対策としては、Kubernetesの Taint based Evictionsが利用されています(Kubernetes 1.9時点ではアルファ版の機能です)。 この機能を利用すると、ネットワークが分断された場合、Kubernetesのマスターノードに到達できないノード上のController Podは削除されます。 これにより1つのPersistentVolumeに対して複数のControllerが立ち上がる事態を防ごうとしています。
しかし、前述したようにOpenEBSのController PodはStatefulSetではなく、 Deploymentによりデプロイされています。
このため、リソースの不足やノードの入れ替え、PodのバージョンアップのためにPodを再スケジューリングするときに、 複数のControllerが起動してしまう可能性があります。
Controllerが複数立ち上がったからと言ってデータの不整合が発生するとは限りませんが、 Split Brain発生の可能性は否定しきれません。

書き込みの順序が入れ替わってデータの不整合が発生することはなさそうです。
Controllerから全Replicaにシーケンシャルかつ同期的にデータを書き込む動きとなっているため、 書き込みの順序が入れ替わったり、Replicaごとに異なるデータを持つことがありません。
ただし、後述するようにこれがパフォーマンスに大きな影響を与えています。

Bit Rot対策としては、一般的にはData Scrubbingと呼ばれる手法が用いられます。
OpenEBSでは、現在のところこのような機能は実装されていないようです。
(Replica復旧時にチェックサムの確認はおこなっていますが、定期的には実行されないようでした)

セキュリティ

顧客のデータを扱う上では、セキュリティの確保も非常に重要です。
セキュリティに関しては、OpenEBSの機能を利用するのではなく、以下の対策を組み合わせて実施していくことになります。 OpenEBSのリポジトリ上にはRBACの設定例が公開されているので、それを参考にするのがよさそうです。

  • Replicaの書き込み先のディスクを暗号化する
  • KubernetesのRBACPod Security Policyによるアクセス制限をおこなう
  • CNI(CalicoやRomana)のネットワークポリシーによるPod間の通信制限をおこなう

性能

下記の機材とソフトウェアを利用して、OpenEBSの性能評価をおこないました。

  • 利用機材

    • DELL PowerEdge R630
    • Intel NVMe SSD DC P3600
    • Ethernet: 10Gbps
  • 利用ソフトウェア

    • OS: Ubuntu 16.04 (Kernel: 4.4.0-93-generic)
    • Kubernetes: 1.9.3
    • CNI Plugin: Romana 2.0.2
    • OpenEBS: 0.5.1
    • fio: 3.5.0

OpenEBSを利用することでどれほどのオーバーヘッドが発生するのかを計測するために、下記の条件での計測結果を比較します。

  • ローカルのNVMe SSDへのアクセス
    • ファイルシステムは置かず、ブロックデバイスへの読み書き性能を計測する。
    • dm-cryptによる暗号化をおこなう。
    • ネットワークは介さず、ローカルにあるNVMeデバイスへの読み書き性能を計測する。
  • iSCSI経由でのNVMe SSDへのアクセス
    • 上記の暗号化をおこなったNVMeデバイスをiSCSIターゲットとして読み書きをおこなう。
    • iSCSIターゲットとイニシエータ間でネットワーク通信が発生する。
    • fioとiSCSIイニシエータは同一マシン上に配置する。
  • OpenEBS
    • 上記の暗号化をおこなったNVMe上にext4のファイルシステムを配置し、そこをReplicaの書き込み先とする。
    • fioとControllerを同一マシン上に配置する。
    • Replica数は2とする。1つはControllerと同一マシン、もう1つは異なるマシンに配置する。Controllerと後者のReplica間でのみネットワーク通信が発生する。
    • コンテナ間のネットワーク通信のオーバーヘッドが発生しないよう、Romanaを利用したPure L3ネットワークを構築。

性能計測にはfioを利用します。 実行時のオプションは下記の通りです。

$ fio --kb_base=1024 --direct=1 --numjobs=$NUM_JOBS --time_based=1 \
    --runtime=3 --filename=/dev/sdb --rw=$RW_MODE --bs=$BLOCK_SIZE --size=1G -group_reporting

ランダムリードとライト、ブロックサイズ、並列実行数を下記の組み合わせで実行します。

  • RW_MODE: randread, randwrite
  • BLOCK_SIZE: 4KB, 16KB, 64KB, 1MB
  • NUM_JOBS: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512

まずはIOPSの計測結果をみてみましょう。
グラフの縦軸がIOPS、横軸が並列実行数になっています。
上段の4つがランダムリードの結果、下段がランダムライトの結果となっています。
そして、読み書き時のブロックサイズを4KB, 16KB, 64KB, 1MBと変化させたときの結果を左から順に4つ並べています。

ローカルのNVMeへの読み込みで50万、書き込みで35万、iSCSI経由では読み書きともに6万程度のIOPSが出ていますが、OpenEBSの場合はかなり小さな値になっています。 Image may be NSFW.
Clik here to view.
nvme_iops.png

スケールが違いすぎてOpenEBSの計測値が分からないので、OpenEBSのデータだけを抜き出してみます。
ピークでも2000弱しかIOPSが出ていないことがわかります。 Image may be NSFW.
Clik here to view.
iops.png

同様にスループットも見てみます。縦軸がスループット[MiB/s]になったほかはIOPSのグラフと同じ構成になっています。

こちらもNVMeおよびiSCSIとOpenEBSの差は非常に大きくなっています。 Image may be NSFW.
Clik here to view.
nvme_throughput.png
Image may be NSFW.
Clik here to view.
throughput.png

ネットワークを介しているためローカルNVMeとの差が大きくなってしまうことは理解できますが、
iSCSI経由の場合と比べてもこれほどの性能差が生じてしまうのはなぜでしょうか?

各種プロファイラやツールを活用して調べてみたところ、下記の原因が判明しました。

  • ボトルネックはControllerでのIO待ち。
  • IOコマンドの並列化やマージなどがおこなわれておらず、単純に1つずつシーケンシャルに処理されている。
  • ControllerとReplica間の通信のオーバーヘッドが大きく、1回のデータの読み書きに500μsec程度を要している。

このため、最大でも2000程度のIOPSしかでないことになります。

データの読み書きに時間がかかっている理由を探るために、Replicaのプロファイリング結果からFlame Graphを表示してみました。 実際のデータ書き込みよりも、通信のオーバーヘッドなどが大きいことがわかります。 Image may be NSFW.
Clik here to view.
flamegraph.png

ただし、通信のオーバーヘッドを減らしたとしても改善できるのは多くても数十%程度です。
根本的に解決するにはControllerのスケジューラの改善と、それに対応したReplicaの修正が必要となってくるでしょう。

以上のことから、単体のVolumeによるアクセスではIOPSが頭打ちとなり、 高IOPS・高スループットが必要となるアプリケーションでの利用は難しいと言えます。
一方で性能を必要としない多数のアプリケーションがVolumeを利用するケースであれば、 Controllerが並列化されるため、クラスタ全体としてはNVMeの性能を活かすことができそうです。

まとめ

今回の調査により、性能やデータの耐久性の面から我々の用途での利用は難しいと判断しました。
しかし、OpenEBSはまだアルファ版であり、今後に期待したいソフトウェアであると言えるでしょう。

今後は、Ceph等の他の分散ストレージ技術についても調査を進めていきたいと考えています。

Necoプロジェクトでは、じっくりと腰を据えてアーキテクチャの刷新を推し進めています。
まだまだ人員募集中ですので、この取り組みに興味がある方はぜひご連絡ください。

www.wantedly.com


EPYCマシンの検証(2) - NUMAノードをまたぐメモリアクセス速度

はじめに

技術顧問のsatです。前回に引き続き、EPYCマシンの検証についての話をします。手元のEPYCマシン(Super Micro AS-1023US-TR4)はNUMAアーキテクチャ(後述)を採用してます。今回はこのマシンにおけるNUMAノードをまたいだメモリアクセスに関するデータを採取しましたので、その結果をお伝えします。

NUMAについて知っているかた向けの結論

  • 2CPUパッケージから成るEPYCマシンにおいては、CPUパッケージごとに4つのノード、合計8つのノードがある
  • 同じCPUパッケージ上のリモートノード上のメモリへのアクセス速度はローカルノード上のメモリへのアクセス速度に比べて1.7倍程度遅い
  • 別のCPUパッケージ上のリモートノード上のメモリへのアクセス速度はローカルノード上のメモリへのアクセス速度に比べて3.3倍程度遅い
  • (記事では省略したが)"numactl --interleave all"した場合はローカルノード上のメモリへのアクセス速度に比べて2.2倍程度遅い

このデータだけで何ができるというわけではないですが、メモリアクセス速度がボトルネックになるようなシステムにおいては、この値が性能評価における一つの基準になるでしょう。

NUMAとは

本節ではNUMAという言葉についてなじみのないかたがたに向けて簡単にNUMAの説明をします。知っているかたは本節は読み飛ばしてください。NUMAとは複数のCPUコア(以下コアと記載)から成るシステムにおける次のようなアーキテクチャです。

  • システム内の1つないし複数のCPUコア(以下コアと記載)とメモリをひとまとめにしたものをノードと呼ぶ
  • システムは2つ以上のノードから構成される
  • ノード同士はインターコネクトと呼ばれる伝送路によって接続される
  • あるコアから見ると、自身が属するノードをローカルノード、そうでないノードをリモートノードと呼ぶ
  • ローカルノードに属するメモリをローカルメモリ、そうでないメモリをリモートメモリと呼ぶ
  • ローカルメモリへのアクセスはリモートメモリへのアクセスよりも早い

これだけでは難しいので、もっとも単純な次のようなNUMAシステムを考えます。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180327112014p:plain

このとき、メモリアクセスの速度は下図のようにどのノード上のコアからどのノード上のメモリにアクセスするかによって異なります。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180327112018p:plain

ハードウェアが提供する情報によって、この速度差がどれくらいのものかがわかります。具体的にはnumactlパッケージに含まれるnumactlコマンドを-Hオプション付きで実行します。とある2ノードシステムにおける結果は次のようになりました。

$ numactl -H
...
node distances:
node   0   1  
  0:  10  21
  1:  21  10
$ 

これは次のような意味です。

  • ノード0上のコアからローカルメモリへのアクセス速度は10(この数値の意味は後述)
  • ノード0上のコアからノード1上のリモートメモリへのアクセス速度は21
  • ノード1上のコアからノード0上のリモートメモリへのアクセス速度は21
  • ノード1上のコアからノード1上のローカルメモリへのアクセス速度は10

速度欄の10や21という値は「ナノ秒」などの具体的な単位付きのものではなく相対的なもので、「ノード0からノード1上のリモートメモリへのアクセスはローカルメモリへのアクセスよりも2.1倍遅い」という意味です。

ハードウェアが提供するNUMAノード間のメモリアクセス速度差

手元のEPYCマシンのNUMA構成は前節において記載したものよりもはるかに複雑です。

  • 2つの物理的なCPUパッケージを搭載
  • 1CPUの中にダイと呼ばれる4つの部品を搭載
  • 1ダイの中に6個のコア(12スレッド)を搭載
  • 1つのダイが1つのノードに対応

これを図示すると次のようになります。インターコネクトをすべて書くと図が非常に見づらくなるので、図でいうと一番左上のノードから他のノードにたどり着くためのものだけを記載しています。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180327112022p:plain

ではこのマシンのnumactl -Hの値を見てみましょう。

$ numactl -H
...
node distances:
node   0   1   2   3   4   5   6   7
  0:  10  16  16  16  32  32  32  32
  1:  16  10  16  16  32  32  32  32
  2:  16  16  10  16  32  32  32  32
  3:  16  16  16  10  32  32  32  32
  4:  32  32  32  32  10  16  16  16
  5:  32  32  32  32  16  10  16  16
  6:  32  32  32  32  16  16  10  16
  7:  32  32  32  32  16  16  16  10
$ 

ややこしいのでここではノード0からノード0-7へのアクセス速度のみに注目します。

...
node   0   1   2   3   4   5   6   7
  0:  10  16  16  16  32  32  32  32
...

詳細は省略しますが*1、node0-3はCPUパッケージ0上にあり、node4-7がCPUパッケージ1上にあります。これから次のことが言えます。

  • CPUパッケージ0上のリモートノード(ノード1-3)上からのリモートメモリへのアクセスはローカルメモリへのアクセスより1.6倍遅い
  • CPUパッケージ1上のリモートノード(ノード4-7)上のリモートメモリへのアクセスはローカルメモリへのアクセスより3.2倍遅い

ただし、ハードウェアが提供する情報と実際のメモリアクセス速度が異なることは珍しくないので、次節においてメモリアクセス速度を実測します。

実測

プログラム

実測には次のようなことをするプログラムを使います。

  • 適当なサイズのメモリバッファを獲得する
  • 上記バッファに所定の回数アクセスして、所要時間を計測する
  • 所要時間を出力する

これを実装したのが以下のmacccess.cプログラムです。

#include <unistd.h>
#include <sys/mman.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>

#define CACHE_LINE_SIZE 64
#define BUFFER_SIZE     (256*1024*1024)
#define NLOOP           256

#define NSECS_PER_SEC   1000000000UL

static inline long diff_nsec(struct timespec before, struct timespec after)
{
        return ((after.tv_sec * NSECS_PER_SEC + after.tv_nsec)
                - (before.tv_sec * NSECS_PER_SEC + before.tv_nsec));
}

int main(int argc, char *argv[])
{
        int size = BUFFER_SIZE;

        char *buffer;
        buffer = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
        if (buffer == (void *) -1)
                err(EXIT_FAILURE, "mmap() failed");

        struct timespec before, after_wo_access, after_w_access;
        int i;
        volatile int j;
        clock_gettime(CLOCK_MONOTONIC, &before);
        for (i = 0; i < NLOOP; i++)
                for (j = size - CACHE_LINE_SIZE; j >= 0; j -= CACHE_LINE_SIZE)
                        ;
        clock_gettime(CLOCK_MONOTONIC, &after_wo_access);
        double t_wo_access = (double)diff_nsec(before, after_wo_access);

        clock_gettime(CLOCK_MONOTONIC, &before);
        for (i = 0; i < NLOOP; i++)
                for (j = size - CACHE_LINE_SIZE; j >= 0; j -= CACHE_LINE_SIZE)
                        buffer[j] = 0;
        clock_gettime(CLOCK_MONOTONIC, &after_w_access);
        double t_w_access = (double)diff_nsec(after_wo_access, after_w_access);
        printf("%f\n", (t_w_access - t_wo_access)/NSECS_PER_SEC);

        if (munmap(buffer, size) == -1)
                err(EXIT_FAILURE, "munmap() failed");
        exit(EXIT_SUCCESS);
}

ビルド方法は次の通り。

$ cc -O3 -o meccess maccess.c
$ 

測定においてはnumactlコマンドを利用して以下2つの条件を満たすようにします。

  • ノード0に属するコア0上で処理を実行する(--physcpubind 0オプションを指定)
  • ノード0-7上でメモリバッファを獲得する(--membind <ノード番号>オプションを指定)

測定は次のように実行しました。

$ for ((i=0;i<8;i++)) ; do numactl --physcpubind=0 --membind $i ./maccess ; done

結果

$  for ((i=0;i<8;i++)) ; do numactl --physcpubind=0 --membind $i ./maccess ; done
2.492153
4.294302
4.232083
4.20949
8.459225
8.568392
7.946654
8.367991
$ 

所要時間をノード0からのアクセスにおける所要時間からの相対値にすると次のようになります

ノード番号相対速度
01
11.72
21.69
31.68
43.39
53.43
63.18
73.35

グラフ化すると次のようになります。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180327112032p:plain

これから次のことが言えます。

  • 同じCPUパッケージ上のノード上のメモリに対するアクセスはローカルノード上のメモリへのアクセスよりも1.68-1.72倍程度遅い
  • 別のCPUパッケージ上のノード上のメモリに対するアクセスはローカルノード上のメモリへのアクセスよりも3.18-3.43倍程度遅い

ハードウェアが報告する値とまったく同じとはいえないものの、おおよそ似たような値になりました。

細かい考察(参考)

前節において示したデータを見ると、ノード0と異なるCPUパッケージに属するノード4-7のうち、ノード6上のメモリへのアクセス速度はノード4,5,7上のメモリへのアクセス速度に比べて5-8%程度速いことがわかりました。グラフで見ても同じとは言いにくい差が出ていますし、何度測定しても結果は同じでした。これより、2ソケットのEPYCマシンが次の図のような構造になっているのではないかと推測しました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180327112028p:plain

この推測が正しければ、ノード0からノード6はインターコネクトを1つ通してメモリアクセスできるのに対して、ノード0からノード4,5,7はノード6を経由してインターコネクトを2つ通してメモリアクセスしなければいけないため、アクセス速度に違いが出ていると考えられます。ハードウェアはノード0からノード4-7上のメモリへのアクセス速度は同じと報告したものの、実際には少し違っていた、というわけです。

NUMAについてもっと知りたいかたに

NUMAについてさらに気になるかたは以下のキーワードで調べてみてください。

  • numactlの--interleaveオプション
  • set_mempolicy()システムコール
  • mbind()システムコール
  • LinuxカーネルのNUMA balancing機能

*1:numactl -Hの実行結果と/proc/cpuinfoの内容("processor"で始まる行とそれに対応する"physical id"で始まる行)を照らし合わせます

サイバーセキュリティ小説コンテストに協賛しました。

セキュリティ室の明尾です。

3/31(土) 12:00 ~ カクヨム様で、サイバーセキュリティ小説コンテストが開催されます。

 カクヨムからのお知らせ  kakuyomu.jp

サイボウズは、サイバーセキュリティ小説コンテストのプラチナスポンサーとして協賛をさせていただきました。 本エントリで、コンテストの趣旨とスポンサーとしての思いをお伝えし、素晴らしい作品が数多く投稿されるよう期待をしたいと思います。

サイバーセキュリティ小説コンテストとは?

JNSA(特定非営利活動法人 日本ネットワークセキュリティ協会)様が主催されたコンテストです。 JNSAとは、情報セキュリティに関する普及啓発活動、教育、調査研究などの活動を通じて、ネットワークセキュリティの安全を守る社会貢献をしている団体です。

サイバーセキュリティに関する小説を通じて、サイバーセキュリティに関心を持っていただき、安全安心を高めていきたいと考えられ、このような企画を検討されました。

あっさりOK

JNSA様より、協賛の依頼が来てこのコンテストの説明を受けました。 プラチナスポンサーになるには、相当のコストが掛かり本当に費用対効果があるのか、など悩みましたが、コンテストの趣旨に共感したこと、他に例がない楽しそうな事案 であること、コンテストにより大ヒット小説が生まれた場合に悔しい思いをしたくなかったことから、協賛を社長に提案することにしました。

説明すると、面白そうだね、やろう!ということでプラチナスポンサーとして協賛をすることに決まりました。 迅速に意思決定することで機会損失せずにスポンサーに申し込みをさせていただけることになりました。

アナログハックを目撃せよ!2018 に登壇

プラチナスポンサーの特典として、3/4(日) に開催された「アナログハックを目撃せよ!2018」において、「サイバーセキュリティ小説コンテスト」開催記念トークイベントに セキュリティ室の伊藤が登壇させていただきました。

 イベントの様子はこちらです。(ASCII デジタルの記事となっております  ascii.jp

思った以上に大規模な会場でした。

スポンサーとしての思い

サイボウズはチームワークを大切にする会社で、社会にチームワークが広がることを目指している企業です。そのためのツールやメソッドの販売提供を事業の中核に据えています。

サイバーセキュリティ分野においては、チームワークが不可欠です。(すべてを理解し、すべて的確に判断できるひとはいないので) 攻撃者がサイバー犯罪を起こしにくい環境を作っていくためには、まずはセキュリティに関心を持ってもらう必要があります。 サイバーセキュリティは全員参加!というキャッチフレーズが、サイバーセキュリティ月間でも使われました。 ひとりひとりがサイバーセキュリティに対する正しい知識を身に着け、関心を持っていただける材料として素晴らしい小説ができることを期待しています。

また、企業でサイバーセキュリティと戦っているエンジニアも多数おられるのですが、世間的には決して高い評価が得られているとは思えないのです。(実は攻撃しているのではとか、セキュリティにうるさい人という評価があると思います。) セキュリティエンジニアの日常業務を知っていただき、実はセキュリティを守る正義感の強いカッコいい人たちであることも知ってほしいと思います。 知り合いの作家の方や、小説を書くことが好きな方にコンテストの存在をお伝えいただき、いい作品をどんどん投稿されることにご協力ください。 もちろん、ブログを見た方ご自身のご投稿もお待ちいたしております。

「第7期サイボウズ・ラボユース成果発表会」開催

こんにちは、サイボウズ・ラボの光成です。

今回は3/30にあった第7期サイボウズ・ラボユース成果発表会の模様を紹介します。

サイボウズ・ラボユース

毎度おなじみの紹介になりますが、サイボウズ・ラボユースとは日本の若手エンジニアを発掘し、育成する場を提供する制度です。

ラボユース生が作りたいものをサイボウズ・ラボの社員がメンターとしてサポートします。 開発物をオープンソースとして公開するという条件の下で著作権は開発者本人に帰属します。

今期はラボユース生6名、研究生2名が卒業されました。

前半の発表

高品佑也さん

高品さんの発表は「確率変数間のグラフ構造推定手法の提案と実装」でメンターは中谷さんでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155441j:plain

多次元のデータが与えられたときに、そのデータのどこに関係があるかを推定するグラフィカルモデルの構造推定の話です。 今回の成果は論文にまとめて投稿中で、結果が出たら詳細な解説や紹介記事を書きたいとのことです。 ラボユースはやりたいことに集中でき、夏の合宿も楽しく、中谷さんの愛あるツッコミがためになったそうです(depynd)。

川田恵さん(研究生)

川田さんの発表は「Exploitの旅2018」でメンターは星野さんでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155411j:plain

CTFの問題の作り方の紹介で、脆弱性を持つプログラムを作るにはコンパイラやコンパイルオプションに気を付けてテストをしっかりしなければなりません。 できれば他のチームに依頼できるとよいとのことです。 自分の意図した通りに挑戦者が問題を解いてくれるとうれしいそうです。

黒岩将平さん

黒岩さんの発表は「Return Oriented Programmingの自動化」でメンターは私でした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155416j:plain

ROPはCTFでよく使われるテクニックの一つで夏のラボユース合宿のときはPythonで作っていたのをC++17を使って作り直しました。 CTFの問題の中には機械じゃないと解けないのもあるので、そういうのには有用だろうとのことです(ropchain)。

渡部恭久さん

渡部さんの発表は「拡張可能インタプリタのための構文解析フレームワーク」でメンターは川合さんでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155419j:plain

目標はきれいなプログラミング言語処理の開発です。 構文解析器とプリンタ(構文木を文字列にする変換器)を同時に定義するInvertible Syntaxというアイデアを元にしました。 構文を拡張したときに、追加した構文にマッチするよう最長一致の構文解析を導入しました。 左再帰への問題は将来対応したいとのことです(finale)。

後半の発表

増田健太さん

増田さんの発表は「制約と手続きを用いた作図用プログラミング言語Pitaの開発」でメンターは星野さんでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155423j:plain

図形を表現する文法と、図形の演算、図形同士の制約処理を記述して図形を出力する処理系です。 ローカル変数や再帰表現などをサポートし、円と長方形が接したままサイズを変更するといった記述ができます。 内部的には記号計算ではなく制約を満たす最適化問題に変換して解きます(Pita)。

類似のツールがないのでこのツールの特長が分かりにくかったのですが、デモを見るとみなさん驚きの声があがりました。

西田耀さん

西田さんの発表は「人間にも読み書きしやすいx86アセンブラをつくってみた」でメンターは川合さんでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155428j:plain

x86のIntel形式とAT&T形式のmovはどちらからどちらに代入するかすぐ分からなくなるので自分で作ることにしたそうです。 他にも自作OSのために自由度の高いアセンブラが欲しくなるという理由もあります(asmium)。

坂本優太さん(研究生)

坂本さんの発表は「続 自作エミュレータで学ぶx86アーキテクチャ」でメンターは私でした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155430j:plain

はりぼてOSという小さいOSを動かすために『自作エミュレータで学ぶx86アーキテクチャ』を参考にしながらx86エミュレータを作りました。 まだまだ機能不足ですがブートして画面に文字が出るところまではできるようになりました。 セグメンテーションまわりの実装はこれからとのことです(emu)。

make_now_justさん

make_now_justさんの発表は「先読み・後読みをもつ正規表現の有限状態オートマトンへの変換」でメンターは西尾さんでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155433j:plain

正規表現の後読みは速度が遅かったり機能に制約があるものが多いので理論からきちんと攻めてみました。 ScalaやGoで実装し、あるパターンでGoogleのV8エンジンで53秒かかっていたものが1秒(以内?)に高速化されたようです。 ドメイン付きクリーネ代数を勉強し、理論的な意味づけをしていきたいとのことです。

LT&懇親会

@KageShironさんが「Headless Chromeを活用したCTF Web問題の作問」のLTをされました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402163830j:plain

CTFでXSSなどの問題を提供しようとするとアプリの難読化や環境の違いでうまくいかないことが多いのでGUIがないheadlessブラウザを使う方法を紹介しました。 APIを使ってブラウザを制御できるのでいろいろ便利です。

懇親会では発表に関する活発なやりとりがあり面白かったです。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180402155435j:plain

まもなく今年度の応募が始まりますので興味ある方はしばらくお待ちください。

EPYCマシンの検証(3) - ビルドマシンとしての実力を見る

はじめに

技術顧問のsatです。EPYCマシンの検証についての3回目の記事です。前回の記事はこちらです。

今回はこのマシンのビルドマシンとしての実力を見てみます。これまでの記事と異なり、手元にあったXeonのマシンとの性能比較をしています。

検証環境

  • サーバ(EPYCマシンと記載): Super Micro AS-1023US-TR4

    • CPU: EPYC 7451 x 2 (48コア、96スレッド)
    • メモリ: MEM-DR432L-HL01-ER26(32GB * 16, 合計 512GB)
    • OS: Ubuntu 16.04.4
    • カーネル: 4.13.0-37-generic
  • サーバ(Xeonマシンと記載): DELL PowerEdge R640

    • CPU: Xeon Gold 5120 x 2 (28コア、56スレッド)
    • メモリ: M393A4K40BB2-CTD(32GB * 16, 合計 512GB)
    • OS: Container Linux by CoreOS stable (1632.3.0)
    • カーネル: 4.14.19-coreos

どちらもおおよそ中位モデルのサーバ(およびCPU)です。

検証方法

ビルド負荷の一例として、Linuxカーネルのビルド速度を比較しました。このときビルドの並列度に伴ってビルド速度がどのように変わるかを確認しました。いずれのマシンもSMT*1は有効にしています。

検証結果のサマリ

検証の結果をまとめると、おおよそ次のようなことが言えます。

  • 並列度が低いうちはXeonマシンのほうがビルド速度が高い
  • 並列度が高くなるにつれてEPYCマシンのビルド速度がXeonマシンを追い越して、最終的にEPYCマシンのほうが1.4倍高速になる
  • EPYCマシンは並列度が低い場合に性能がばらつく

検証方法

linux v4.15.7をデフォルト設定(defconfig)でビルドした場合の所要時間*2を測定しました。この際、-jオプションによって並列度を1からEPYCマシンのスレッド数である96まで変化させてデータを採取しました。

検証手順は次の通りです。

1) ソースのダウンロードと設定

$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.15.7.tar.xz
$ tar xf linux-4.15.7.tar.xz
$ cd linux-4.15.7
$ make defconfig
...
$ 

2) ビルド(ビルドに必要なパッケージはインストール済みとします)

$ cat build.sh
#!/bin/bash

NCPU=$(grep -c processor /proc/cpuinfo)

make clean >/dev/null 2>>err.txt
for ((i=0; i<$NCPU; i++)) ; do
        time make -j$((i+1)) >/dev/null 2>>err.txt
        make clean >/dev/null 2>>err.txt
done >/dev/null 2>>res.txt
$ ./build.sh

検証結果

横軸に並列度を、縦軸にビルド所要時間をプロットした図を以下に示します。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180405152458p:plain

一見して並列度が低い場合はXeonマシンのほうが、並列度が高い場合はEPYCマシンのほうが所要時間が短いことがわかります。では、縦軸を速度(所要時間の逆数)にしてみるとどうなるでしょうか。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180405152510p:plain

並列度20あたりまでのデータを見るとスレッドあたりの速度はXeonマシンのほうが高いものの、その後は次第にEPYCのビルド速度が上がってきて、最終的にすべてのEPYCマシンのスレッド数である96並列ビルドになった際はEPYCマシンのほうが1.4倍高速であるということがわかります。

Xeonマシンのビルド速度の伸びは並列度28を超えた段階で鈍化しています。これは、並列度28以前は並列化された各処理*3がコアのリソースを占有できていたのに対して、並列度28以降はコアのリソースを2つのスレッド間で共有しなくてはいけない場合が出てくるからです。さらにその後並列度が56を超えた後はビルド速度が頭打ちになることがわかります。これは並列度56の時点でCPU資源を使い切っているため、それ以上並列度を上げてもスループットが上がらないことによります*4

このデータにはもう一点気になることがあります。それはEPYCマシンの低並列度におけるビルド速度がXeonマシンに比べてばらつくこと、もっというと悪い方向にのみばらつくことです。この傾向はデータを何度測定しても変わりませんでした。これについては次節以降において考察しました。

EPYCマシンにおけるビルド速度ばらつき問題の調査

最新カーネルへのアップデート

本記事の検証に使ったカーネルはUbuntu16.04において使える最新カーネルであるv4.13(正確には4.13.0-37-generic)ですが、カーネルv4.15にはプロセススケジューラにEPYC対応のパッチが入っています。このパッチによって問題が解消するのではないかと推測して、より新しいUbuntuからカーネル4.15.0-13-genericを借りてきて、このカーネルにおけるデータも採取しました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180405152522p:plain

しかし推測は外れていました。カーネルをv4.15系にしても性能がばらつく問題は解消しないことがわかりました。

SMTの無効化

EPYCマシンの性能がばらつくのは並列度が低いとき、とくにEPYCマシンのコア数48を下回るときだったため、SMTが有効なとき、かつ、同時に実行中のプロセス数が少ない場合に何か問題があるのではないかと疑って、SMTを無効化した状態でデータを採取してみました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180405152535p:plain

この結果、SMTを無効化した場合はEPYCマシンにおける性能のばらつきが無くなることがわかりました。

最後に、EPYCマシンはSMTを無効化するとXeonマシンのSMT有効/無効時いずれの場合よりもビルド速度が高くなったことも見逃せません。LinuxにおけるEPYCマシンの性能にはさらなる伸びしろがあると言えるでしょう。

おわりに

EPYCマシンをビルドマシンとして見ると、スレッドあたりの性能はXeonマシンに遅れをとるものの、スレッド数が相対的に多いことを武器にして、全CPU資源を使い切ったときの性能は上回ることがわかりました。並列化された個々の処理がほとんど独立しているカーネルビルド処理ではこのような結果になりましたが、個々の処理の間で排他制御が必要な処理においても同じことが言えるのかについては別途検証が必要です。

もう一点、EPYCサーバはハイパースレッド有効時、かつ、並列度が低い場合に性能がばらつく問題があることがわかりました。このようなことになる原因にはLinuxのプロセススケジューラやプロセッサそのものなど色々なものが考えられますが、現時点では不明です。こちらについても今後の原因究明、および問題の改善についてはさらなる検証が必要でしょう。

*1:Xeonの場合はハイパースレッディングテクノロジーと呼びます

*2:timeコマンドのrealフィールドの値

*3:ほとんどはCコンパイラによる個々のファイルのコンパイル処理

*4:ここでは詳細については触れませんが、このビルド処理においては、入力であるソースファイルも出力であるカーネルイメージおよびオブジェクトファイルは全てページキャッシュに乗るため、処理の最中にI/Oがほとんど発生しません

サイボウズQAの紹介

こんにちは。 今年の1/4が終わってしまったことが信じられない東京品質保証部の新関です。 今日はサイボウズの品質保証部の取組みと組織紹介をさせていただきます。

その歴史

サイボウズのQA組織の歴史は、2000年に開発部内でQAグループを形成したのがスタート地点です。 当時は人数も少なく、1人で複数の製品の品質保証責任者を担う事が多かったです。現在は東京以外に松山、上海、ベトナム(ホーチミン)にQAの部署が存在し、サイボウズ製品を手厚く試験する体制となっています。

品質保証部の主要なロール(役割)

品質保証部のミッションは、その名の通り製品の品質を保証することです。製品を担当するチームと横断的な活動をするチームが協力する体制です。

QA

プロダクトのテストプロジェクト全般を担当しています。試験計画立案からリリース、お客様からのお問い合わせに至るまで、製品のライフサイクルすべてに関わります。 blog.cybozu.ioblog.cybozu.io

TE(Test Engineering Team)

品質と生産性の向上をミッションとしたチームです。開発とQAのジョイント組織で、兼務のメンバーもいます。 blog.cybozu.ioblog.cybozu.io

4/16(月)に社外向けイベントとしてMeetupを開催します。 cybozu.connpass.com

PSIRT(Product Security Incident Response Team)

セキュリティ試験を担当しています。脆弱性報奨金制度の運営、その一環としてバグハンター合宿の開催、社外イベントでの講演などを行っています。 blog.cybozu.ioblog.cybozu.io

Performance

主に性能試験を担当しています。パフォーマンスチューニングの成果を確認し、ボトルネックの調査も行います。

その他

OSやブラウザの新バージョンで動作検証を行うチーム、通訳/資料の翻訳を担当するコミュニケーターチーム、海外拠点メンバーとのコミュニケーションについてエンジニアリング観点からサポートするチームなどがあります。これらについては、近いうちに別のエントリで紹介しようと思います。

仕事の進め方について

海外を含め、拠点をまたぐ形でチームを組んでいるので、普段はTV会議やグループウェアを駆使して仕事を進めています。 それだけではなく、定期的に1箇所に集まり、他拠点のチームメンバーと顔をあわせてコミュニケーションを図ることにしています。直近の活動内容を報告する社内イベント、相互のスキルアップを目的とした勉強会、チームの親睦を深めるイベントなどを開催し、より強いチームを育てるためです。

また、どの拠点にも主要なロールのメンバーを育成する取り組みを進めています。現在は拠点ごとに役割が偏っているのですが、様々な場所で様々な働き方をしているメンバーが増えているので、場所にとらわれずにチームを組めるように、という目標をたてたのです。 拠点間でナレッジを共有してゆくことで、サイボウズのQA全体を強く成長させていきたいという期待もあります。

サイボウズQAのこれから

PSIRTやTEのように専門性をもった役割以外に、スクラムマスターにチャレンジするQAメンバーも出てきました。 品質を保証するミッションは勿論ですが、メンバーそれぞれの強みを活かし、これまで以上の価値を提供できるようになっていけるとよいと思っています。 また、クラウドベンダーとして、Pre ProductionのQAだけでなく、In ProductionでのQAの取り組みについてが今後の課題となっていくと認識しています。

というわけで、一緒に働いてくれる仲間を募集しています。

ご応募お待ちしております!

エンジニアが技術以外のLTをする会:その名も『話スシ🍣』

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180423132953j:plain

こんにちは!開発部兼コネクト支援部の刈川です。 サイボウズには様々な社内イベントがあるのですが今回は「話スシ🍣」という(ぱっと聞いただけでは何かわからない)イベントを紹介したいと思います。

要約すると…

要は社員同士が技術以外のLTをして「この人には実はこういう特技がある」とか「こんなお得な情報を持っている」とかそういうネタを持ち寄ってその人の個性を知り、社員同士の交流を深めていこう、みたいなイベントです。

『話スシ』という名前の由来は「寿司でも食べながら話したいよね」→「話す + 寿司」→「話スシ」という単純なダジャレからきています。開催の際にはたまにお寿司が出ます。

今までのスシネタ(抜粋)

タイトルはほぼ原文ママです。

  • 最強のクレジットカードの選び方
  • マンション購入の話
  • 1日30分で英語ペラペラになる方法
  • 筋トレしていたら人生すべてうまくいく
  • 財テク講座
  • 古今東西おすすめ映画3選
  • 転職ドラフトを活用した給与交渉術
  • 「お給料上げてください!」 〜給与交渉のリアル〜
  • 知らない人と仲良くなる方法
  • 確定拠出年金について話スシ
  • 育児休暇、どうでした?──この人にこれを聞きたいシリーズ
  • もう入院なんて怖くない
  • ぜったいにおいしくなるコーヒーの淹れ方
  • 全人類に贈る正しい糖質制限
  • テトリスシ
  • 最新けん玉事情
  • ルービックキューブを回スシ
  • お寿司に合う日本酒

募集ネタはノージャンルにしてあるのですが、こうしてみるとやはりお金の話健康の話は人気が高いですね。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180423135610j:plain
ルービックキューブを実演している様子

募集は自薦、他薦どれでもOK

話すネタは社員のいいね投票によっておおよそ決定されます。仕組みとしてはこんな感じ。 Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180423143602p:plain

エンジニアといっても中にはお金の話、育児、筋トレ、マンション購入、ゲームの話など技術以外で得意分野があり、それを思う存分発揮してもらう場となっています。 エンジニアに限らず非エンジニア、例えば法務の方に法務トラブルの話をしてもらったりと、話題の範囲はとても広いです。 たまにフルパワーで発表するあまり聴衆を置き去りにすることもありますがそれもまた話スシの文化の一つとなりつつあります。

kintone上の実況スレッドよりコメント抜粋

※ 投票とネタの収集にはkintoneを使用しています。 もちろん自分が話したいネタがあれば自分で話すこともできます。

そのほか特別回も

通常回のほかにも特別回として、新卒や中途入社など新たに仲間が入社したタイミングで自己紹介LTをする「新人スシ」や「中途スシ」なども開催しています。 こちらは新メンバーの方々に自由に自己紹介をしてもらい、その人のことを知る目的で都度開催されています。 話す内容は趣味の話はもちろん前職の話だったりこれからやりたいことの話だったりと様々です。 新卒や中途入社の方のことを知って交流を深めていくことで今後の仕事に役立てています。

おわりに

話スシのイベントが始まってから2年が経とうとしていますが、未だにネタは尽きることはありません。 普段は仕事でしかかかわらない、あるいは全く業務上関わりのないメンバーの意外な一面を知ることができてとても良い機会になっています。 技術以外のLT、ぜひやってみてはいかがでしょうか!

プッシュ通知などのイベントで起動した場合のデバッグ方法

こんにちは。モバイル開発チームに所属している小島です。

めったにはありませんが、たまにOSのイベントからアプリが起動されたときのデバッグを行いたいことがあります。
例えば、プッシュを受けた時や、ディープリンクで起動したときの application:didFinishLaunchingWithOptions:Application#onCreateの挙動などです。

iOS の場合

Xcode のメニューから 「Debug > Attach to Process > By Process Identifier (PID) or Name」を選択します。

Image may be NSFW.
Clik here to view.
キャプチャ

「PID or Process Name」 の部分に開発中のアプリ名(プロセス名)を指定して、「Attach」ボタンを押します。
そうすると、Xcode は、アプリが未起動の場合はプロセスが起動するまでアタッチを待機してくれます。 なので、プッシュ通知などからアプリが立ち上がったときに、即時にアタッチされ起動直後の処理のデバッグが可能になります。

Android の場合

Android の場合は、ブレークポイントの手前で Debug#waitForDebugger()を仕込んでおきます。これにより、アプリはデバッガがアタッチされるまで待機するようになります。
なので、プッシュ通知などでアプリが起動後、停止している最中に Android Studio のメニューの 「Run > Attach debugger to Android process」を実行してプロセスにアタッチすれば、アプリが再び動き出しデバッグ可能な状態になります。

Image may be NSFW.
Clik here to view.
キャプチャ

まとめ

  • iOS の場合は、Xcode で先にアタッチを準備しプロセスが起動するまで待機。
  • Android の場合は、アプリが先にアタッチされるのを待機し Android Studio がアタッチする。

順番が異なりますが、両 OS ともにプッシュ通知などから起動したときの処理のデバッグが可能です。
あまり必要となる機会は無いと思いますが、最近必要になって調べてみたのでどなたかのお役に立てれば幸いです。


セキュリティ・キャンプ全国大会に(講師で)参加します!

みなさんこんにちは。SRE チームの内田(@uchan_nos)です。 この記事では 2018 年 8 月に開かれるセキュリティ・キャンプ全国大会 2018 を紹介します。

セキュリティ・キャンプ

セキュリティ・キャンプ全国大会は IPA(情報処理推進機構)が主催している合宿形式の勉強会です。 全国から学生・生徒を集めて、IT 業界の第一線で活躍する講師陣が講義を行います。

特徴は講義内容がとても濃いことでしょう。 情報セキュリティなどの分野で活躍する講師による熱のこもった講義が繰り広げられます。 (ほんとに熱い講義ばかりなんですよコレが。前回レポートに 2017 年の様子が紹介されています。写真だけだと熱さが伝わらないかもしれませんが…)

講義はたくさんあるので全部紹介することはできませんが、例えば Linux カーネルの脆弱性を突く方法を学ぶ講義や、 USB ポートに挿すだけでキーボードを自動入力してしまう Bad USB と呼ばれるハードウェアを作る講義などがあります。 筆者(内田)は以前、Bad USB の講義に潜り込ませてもらい、PC に挿すと自動で管理者権限のコマンドを実行するようなハードウェアを作ることができました。

こう書くと攻撃手法を教える怖い勉強会だと思われるかもしれませんが、セキュリティの世界で活躍するためには脅威となる様々な攻撃手法を学ぶことは必須なのです。 どの講義も、セキュリティ界の将来を担う人材を育てるために重要な話題が盛り込まれています。

セキュリティ・キャンプ全国大会 2018 の公式サイトはこちらです。 https://www.ipa.go.jp/jinzai/camp/2018/zenkoku2018_index.html

サイボウズとの関係

なぜ Cybozu Inside Out でセキュリティ・キャンプ全国大会 2018 の紹介をするかというと、サイボウズに関係のある講師がたくさん参加するからです。 ここではそれら講師陣を紹介します。 担当講義の内容は 講義一覧から確認可能です1

  • Linux カーネル脆弱性入門(選択コース)
    • 小崎 資広 サイボウズ技術顧問
  • TLS 1.3/暗号ゼミ(集中開発コース)
    • 緑川 志穂 サイボウズ・ラボ
  • アンチウィルス実装トラック(集中開発コース)
    • 新屋 良磨 サイボウズ・ラボユース卒業生
    • 城倉 弘樹 サイボウズ・ラボユース卒業生
  • OS 開発ゼミ(集中開発コース)
    • 武内 覚 サイボウズ技術顧問
    • 内田 公太 サイボウズ
    • 粟本 真一 サイボウズ・ラボユース卒業生
  • 言語自作ゼミ(集中開発コース)
    • 川合 秀実 サイボウズ・ラボ
  • データベースゼミ(集中開発コース)
    • 星野 喬 サイボウズ・ラボ
  • C コンパイラを自作してみよう!(集中開発コース)
    • 西田 耀 サイボウズ・ラボユース卒業生

まとめてみると沢山いますね。そして、集中開発コースの担当が多いですね。みんな実装が好きな人たちですから、どの講義も面白くなるのではないかと思います。

選択コースとは多用な講義から自分で選んだ講義を受講し、専門性と多様性を養うことを目的としたコースです。 Linux におけるセキュリティの話、IoT のセキュリティ、インシデントレスポンスなど、沢山の授業があります。 受講したい講義が多すぎて選べない、という話を良く聞きます。

集中開発コースとは中 3 日間、じっくり同じテーマに取り組むことで開発力を向上させることを目的としたコースです。 こちらも様々なゼミが開講されています。 筆者(内田)は「OS 開発ゼミ」を担当しますが、これはオリジナルな OS を作ったり、最新の OS 理論について議論したり、Linux に機能を付け足したりします。

興味がある方へ

2018 年の応募締め切りは 5 月 28 日ですからまだまだ間に合います! 興味のある方は 参加を目指す方へを読み、是非応募してください。


  1. 本当は去年の講義資料を合わせて紹介したいのですが、セキュリティ・キャンプの講義資料は一般には公開できない貴重なものですので、是非参加して中身を確かめてください。

サマーインターンシップ2018を開催します!

こんにちは!品質保証部の中園です。

毎年ご好評いただいているエンジニア&デザイナー向けサマーインターンシップを、今年も開催することになりました!

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180424084405p:plain:w300

インターンシップでは製品開発の最前線で活躍しているエンジニアがメンターとなり、インターン生を全力でサポートいたします。

実際の開発チームと同じ環境で、サイボウズの開発現場を実体験することができるため、課題をこなしていく中でサイボウズの文化や現場の雰囲気にも触れることができます!

2017年の開催レポートもあわせて御覧ください。

この夏、ワンランク上のスキルアップと、サイボウズの開発文化を体感してみませんか?

皆さんのエントリーをお待ちしています!

募集要項

コース

日程

  • 第1日程 8月6日(月)~10日(金)
  • 第2日程 8月20日(月)~24日(金)
  • 第3日程 9月10日(月)~14日(金)

※インフラ刷新プロジェクトコースは第1日程と第2日程のみの開催となります。

場所

サイボウズ株式会社 東京オフィス

※Webサービス開発コースと品質保証・セキュリティコースについては、東京オフィスに加え、大阪オフィス松山オフィスでも開催いたします。

就業時間

9:00~18:00

※ただし最終日は懇親会を実施するため20時~21時頃解散となります。

対象

2020年4月の入社が可能な学生

募集人数

各コース1日程につき3〜5名程度

選考

書類選考、面接(Webも可)1回

待遇

5日間 10万円

遠方からご参加いただく方には、交通費・宿泊費を支給します。

その他、社長または開発本部長とのランチ会や、エンジニアとの懇親会を開催します。

また、インターンシップに参加いただいた方は全員、本選考を優遇いたします。

エントリー方法

こちらよりエントリーしてください

エントリー締め切り:6月30日(土) 23:59

お問い合わせ

  • 本林 明子(人事部)
  • メールアドレス: recruit_contact@cybozu.co.jp
  • 電話番号: 03-4306-0870

Webサービス開発コース

Image may be NSFW.
Clik here to view.
Webサービス開発コース

概要

サイボウズが提供するkintoneまたはGaroonの新機能のプロトタイプを開発します。

実際のユーザーや社内での要望を元に、仕様検討や実装、テストの自動化にチャレンジしてもらいます。

インターン期間中は製品を開発するエンジニアがメンターとして指導やコードレビューを担当し、大規模なWebサービス開発の現場を体験することができます。

必要な経験/スキル

  • Webサービス開発の経験
  • JavaもしくはJavaScriptの知識(kintoneを選択する場合)
  • PHPもしくはJavaScriptの知識(Garoonを選択する場合)

あると望ましい経験/スキル

  • Git/GitHubの使用経験

モバイルアプリ開発コース

Image may be NSFW.
Clik here to view.
モバイルアプリ開発コース

概要

サイボウズで現在開発中のiPhoneアプリの開発を行ってもらいます。

実際の開発チームに参加し、開発メンバーとともに仕様の検討から簡単な機能の実装、レビューまでを体験できます。

必要な経験/スキル

  • iOS(Swift) の開発経験

あると望ましい経験/スキル

  • Git/GitHubの使用経験

UX/UIデザイナーコース

Image may be NSFW.
Clik here to view.
UX/UIデザイナーコース

概要

サイボウズのデザイングループメンバーとともに、製品・サービスのデザイン業務に取り組んでいただきます。自由な発想を活かして新しいデザインを提案してください。

必要な経験/スキル

  • PCやスマホ向けのデザイン経験
  • ポートフォリオ

あると望ましい経験/スキル

  • ユーザーリサーチの興味、経験
  • プロトタイピングスキル
  • グローバルへの興味
  • チャレンジ精神

品質保証・セキュリティコース

Image may be NSFW.
Clik here to view.
品質保証・セキュリティコース

概要

サイボウズ製品の品質保証活動がどのように行われているか、品質がどのようなプロセスで確保されているのかを、実際の業務を体験しながら学んでいただきます。

実施内容としては、以下を予定しています。

第1日程のみ「品質保証コース」として下記を実施します。

  • サイボウズの品質保証活動について講義
  • サイボウズ製品のテスト設計、テスト実施、バグ報告を通し、品質保証の実業務を体験

第2日程、第3日程は「品質保証・セキュリティコース」として、下記も実施予定です。

  • サイボウズのセキュリィ対策と体制について講義
  • サイボウズ製品のセキュリティテストを体験
  • 不具合情報の公開作業を体験

必要な経験/スキル

  • Excelを操作できる(マクロやVBAは不要)
  • ITに関する基本的な知識がある  ※ ITパスポート試験レベル
  • Webサービスのテストについて興味がある
  • 「品質保証」という概念を説明できる

あると望ましい経験/スキル

第1日程を希望する方:

  • Webサービスのテスト経験

第2日程、第3日程を希望する方:

  • Webサービスのテスト経験
  • Webサービスのセキュリティテスト経験
  • Webサービスの脆弱性の攻撃方法を知っている(SQLインジェクション、XSS)

インフラ刷新プロジェクトコース

Image may be NSFW.
Clik here to view.
インフラ刷新プロジェクトコース

概要

サイボウズが提供する大規模な自社クラウドサービスを支えるため、「Kubernetes」や「コンテナ化技術」を活用した高信頼なインフラの新規構築プロジェクトを実施しています。

そのプロジェクトにおいて、インフラに関わるソフトウェアの構築・設計・開発を体験してもらいます。

必要な経験/スキル

  • Go、Pythonのいずれかの言語でソフトウェアの開発が行えること
  • Linux上のソフトウェアの開発経験

あると望ましい経験/スキル

  • Git/GitHubの使用経験

失敗から学ぶ、テスト自動化導入で大切なこと──Cybozu Meetup テスト自動化 開催報告

こんにちは、テストエンジニアリングチームの園です。

先日、『Cybozu Meetup テスト自動化 ~失敗から学ぶ、テスト自動化導入で大切なこと~』を開催しました。

技術的な内容よりも導入手法に重点を置いたお話を予定していたため、参加枠が埋まるか不安でしたが、参加募集開始から予想を裏切り、最終的に参加枠を大きく超える130名の方からお申し込みをいただきました!

テスト自動化がトピックとして扱われるようになって久しいですが、まだまだ注目される話題であり、導入に悩まれている方も多いのだと改めて認識いたしました。

cybozu.connpass.com

本エントリでは、Meetupで話した内容のまとめと、話し足りなかったことを補足させていただこうと思います。

テストエンジニアリングチームのご紹介

このセッションでは、サイボウズのテストエンジニアリングチーム(以下、TE)の紹介と、活動内容の紹介を行いました。

今年でTEができて丸2年となり、徐々に活動の幅を広げつつあります。

関連記事:

blog.cybozu.io

TEでは、テストの自動化のみならず、作業を効率化して生産性が向上するような様々なツールの作成を行っています。

作成したツールの事例として、いくつかを簡単に紹介させていただきました。

モバイル端末のテスト環境構築

OpenSTFを利用して、Webブラウザからモバイル端末にアクセスし操作できる環境です。 よくあるエミュレーターではなく、実機でのテストが可能です。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180419144553j:plain

海外拠点から日本拠点のモバイル端末にアクセスしたり、逆に、日本拠点から海外拠点のモバイル端末にアクセスすることができます。

つまり海外拠点にテスト環境を構築すれば「技適問題」も回避できるのです。

手動でアクセスできるだけでなく、自動テストにも対応しています。

継続的性能試験

作成した製品のアーカイブについて、CIを通して性能検証を行う仕組みを作りました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180419144727j:plain

今までの性能試験は、手動と自動の組み合わせて行っていました。

そのため試験環境の作成から、試験実施、試験結果の分析までトータルで約24時間かかっていました。

これらを全て自動化し、約2時間~4時間で試験結果の分析まで完了させることに成功しました。

リリースアーカイブ管理

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180419144733j:plain

サイボウズ製品がクラウドに移行した頃から、製品リリース(バージョンアップ)が頻繁に行われるようになりました。

製品リリースが頻繁に行われるということは、必要なアーカイブ、リリースタイミングの管理も増えることになります。

増加する管理コストに対し、管理作業を手作業で行っていたため、事故発生のリスクが高まっていました。

管理の煩雑化に伴い、間違ったアーカイブを適用するなどの事故が発生すれば、利用いただいているお客様にご迷惑がかかります。

そこで、kintoneArtifactoryを使い、アーカイブの管理とリリースの管理を関連付けて行えるようにしました。

このツールにより、過去、現在、未来におけるリリースタイミングに合わせた適切なアーカイブのセットを、コマンド一つで取得することができるようになりました。

リリースに伴うアーカイブの管理上のリスクを軽減しています。

失敗から学ぶテスト自動化導入で大切なこと

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180419182911j:plain

TEが設立された当初、サイボウズでは既に様々なチームがテスト自動化に取り組んでいました。

しかし、活用できているチームもあれば、活用できていないチームもありました。

このセッションでは、そんな「成功」と「失敗」を分析し、自動テストを継続的に利用していくポイントと、そのためにTEが取り組んだ内容を紹介しました。

www.slideshare.net

テスト自動化導入にまつわる、ありきたりな失敗談ですが、誰もがつまづきやすいからこそありきたりなのだと思います。

そこからのテスト自動化導入には「銀の弾丸」はなく、チームの性格や能力に応じて最適な手段は様々です。

サイボウズのTEでは「負荷の分散」と「モチベーションの維持」がテスト自動化導入の重要なポイントであると考えました。

これらの重要ポイントを達成するために行った、「テストを自動化する動機付け」や、テスト作成を省力化するための「テスト共通基盤」作成などの事例を紹介いたしました。

テスト自動化導入失敗の分析結果や、導入のための活動事例が、テスト自動化導入に悩まれている方のヒントや反例としてお役に立てれば幸いです。

テスト自動化導入の失敗談に関しては「あるある」なのか、参加された方々がTwitterにいろいろと書き込んでくださっていました。

盛り上がっていたのでぜひご覧ください!

togetter.com

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180419182949j:plain

今後もTE関連のMeetupを開催予定

今回多くの方からのご好評をいただいたため、今後もTE関連のMeetupを開催する予定です。

connpassグループ「Cybozu Inside Out」で随時告知していきますので、興味のある方はぜひフォローをしてみてください。

今回ご紹介させていただいたTEの活動の中で、これを聞いてみたい、といったご要望もお待ちしております!

We are Hiring!

TEはキャリア採用を行っています。

キャリア採用 テストエンジニア | サイボウズ 採用情報(新卒・キャリア)

私たちと一緒に、品質と生産性の向上に取り組んでみませんか?

QA 力底上げサポートチーム「ミネルヴァ」の紹介

こんにちは! 東京品質保証部の小山です。
好きな品質の定義は「品質は誰かにとっての価値である」(Gerald M. Weinberg) です。(『SQuBOK Guide v2』 p.17 より)
今回はサイボウズの品質保証部の、社内勉強会開催を支援するチーム「ミネルヴァ」を紹介します。

サイボウズには勉強会文化があります。もちろん品質保証部も勉強会の主催に力を入れています。
品質保証部で勉強会開催を支援しているチームが「ミネルヴァ」です。
チーム名は古代ローマの知識の女神からとりました。

活動内容の変遷

品質保証部では、配属された新人にテストの基礎やテスト対象の製品が使用している要素技術の教育を行っています。
遡ること3年前、2015年頃から社内外の技術的トレンドの変化を既存の教育資料が上手くカバーできていないという問題が顕在化し始めました。
そこで、2016年に新人教育のコンテンツ再編プロジェクトとしてミネルヴァが立ち上がりました。
このときの目的は以下の2点です。

  • 教育資料の再整理・作成(JSTQB のシラバスを参考にしました。)
  • 新人向け勉強会のスケジューリング・講師エンジニアのアサイン

再編後の新人教育の満足度が高かったため、2017年からは品質保証部全体のスキルアップを目指し、ミネルヴァの活動対象を新人だけでなく現役メンバーにも広げることにしました。
新人教育コンテンツの再編と運営によって得られたノウハウを応用して勉強会の開催を支援する、つまり、「知識を気軽に共有できる環境を整える活動」を開始することになったのです。
有期のプロジェクトとして始まったミネルヴァですが、このタイミングで継続的な活動を行うチームとなりました。

以下ではこの勉強会開催支援活動について紹介します。

ネタ集めから開催まで

勉強会の管理は kintoneで行っています。
何かを知りたい人や何かを教えたい人が勉強会のネタを kintone のアプリに登録します。
テーマは特にテストに関するものに限定していません。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180511153703p:plain
勉強会ネタ箱アプリ。誰でもネタを登録できます。

開催希望(「いいね!」の数)が一定数を超えたら開催決定です。
ミネルヴァは講師(スピーカー)をアサインし、勉強会の開催日程の調整や会議室の確保を行います。
勉強会のコンテンツの作成は講師自身が行います。

当日になったら勉強会を開催します。
様子はこんな感じです。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180511153727j:plain
なごやかな雰囲気。リモート参加のメンバーも。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180511153752p:plain
kintone 上に実況スレも立ちます。

これまでに開催してきた勉強会

この1年間で、品質保証部内で37件の勉強会(新人教育を除く)を開催することができました。
その一部を紹介します。

  • テスト戦略について
  • セキュリティ基礎
  • Docker 入門
  • 暗号技術入門
  • Jenkins 入門
  • 業務で使える Bash
  • QA で使える英語
  • 誤解釈が発生しにくい日本語文の書き方
  • QA → スクラムマスターへのキャリアパス
  • ふりかえり手法について
  • 『初めての自動テスト』の輪講
  • 品質保証部内の各チームのプラクティスの共有
  • 社外勉強会・イベントの参加報告

扱うテーマはテストや要素技術だけでなく、ふりかえりのテクニックや文章作法など幅広く扱っています。
また、JaSST や システムテスト自動化カンファレンスといったイベントの参加報告も行っています。

継続的な改善活動

ミネルヴァメンバー(3人)で定期的に集まって、運営上の課題やタスクの進捗状況を確認しています。
最近は、内容が曖昧な勉強会ネタを明確化し、一目で興味のあるネタかどうかわかるようにしました。
また、勉強会の質を上げるために講師からミネルヴァへの改善点を出してもらう活動や、勉強会参加者の成果を定量的に評価する活動を新しく開始しました。
今後も改善を続けて、品質保証部メンバー全体のスキルアップをサポートしていきます。

さいごに

今回はサイボウズの品質保証部の社内勉強会開催を支援するチーム「ミネルヴァ」を紹介しました。
引き続き、知識を気軽に共有できる環境を整えていきます!

品質保証部では、新卒・キャリア採用を行っています。

あなたも一緒にサイボウズで品質保証活動を行ってみませんか?

www.wantedly.com

デザイングループの新しいスローガン

こんにちは、新人デザイナーの西藤と申します。

今回は、デザイングループの『スローガン』について新人デザイナーの視点でお話します!

デザイングループの『スローガン』!?

私たちは日々の活動を行なっていく中で活動指針となる2つのスローガンを掲げています。

「Planning & Design」「Accessibility & Global」

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180522165736p:plain

今回はこのスローガンのうち「Planning & Design アイデアを素早く形にする」について書いていきます。

なぜ「Planning & Design」なのか?

このスローガンを立てる少し前までのデザイングループは、プロダクトマネージャーやプログラマーの方から、「アイコンとか画面とかいい感じによろしく」といった感じの依頼がメインでした。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180522105154p:plain

気づくと、プランニングや仕様検討などの上流工程が遠くなり、デザイングループのイメージは「アイコンとか画面をいい感じに作る部署」というように思われていたそうです。

私は、以前のデザイングループを知らないので正直想像できませんが、もし自分がそういった業務のみだと楽しいとは言えなかっただろうな、と思います。

そんな時、デザイングループに新しいマネージャーがやってきて「これからはプランニングにシフトしよう!」と掲げたのが、このスローガンの始まりだそうです。

「Planning & Design」でどのような活動をしているのか?

【リサーチ】積極的に外に出て調査する

まずは、プランニング時のリサーチからデザイングループが関わっていきます。

リサーチでは、日本だけでなくアメリカや中国でサイトビジットやユーザビリティテストを行い、実際にどのように使っているのかを調査しています。また、社内でもいろんな部署の方々にヒアリングやワークショップを行っています。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180522105256p:plain

このような活動を実施することにより、デザイングループの印象は「いろんな情報を提供してくれる!」と変わっていきました。

最近では、ユーザビリティテストの重要性が広まり、色々な部署の方とリサーチ活動を実施するようになりました。

【アイデア思考】自由な発想で考える

プロダクトマネージャーと一緒に、アイデアを創造するワークショップやカスタマージャーニーマップなどを作成する活動をしています。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180522105322p:plain

このような活動を実施することにより、社内でのデザイングループの印象は「デザイングループと一緒にやるといろんな手段で発想ができる」と変わっていきました。

実際にワークショップの開催依頼が他部署からくることもあり、活動が広まってきている感じがあります。また、デザイングループの先輩には、プロダクトマネージャーとペアで活動している人もいて、すごく羨ましく思います。

【プロトタイピング】アイデアを形にする

アイデアをすぐにプロトタイプにしたり、プロダクトマネージャーやプログラマーたちと話しながら目の前でデザインを作成する活動もしています。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180522105337p:plain

「デザイナーがいると、あっという間にアイデアが可視化される!」そんな印象も持ってもらうことができるようになりました。

自分は作るのに時間がかかってしまうのですが、先輩は本当にサクサク作っていて、まだまだ修行が足りないと実感しています。

「Planning & Design」というスローガンのもとで活動することで

新しく掲げたスローガンを元に活動していくと、今まで「デザイン=いい感じに画面とかアイコンを作ること」というイメージだったのが「デザインとは、リサーチ、プランニング、プロトタイプを繰り返すことなんだ」という印象を持ってもらえるようになりました。

Image may be NSFW.
Clik here to view.
f:id:cybozuinsideout:20180522165752p:plain

これからも「Planning & Design」というスローガンのもと、デザイングループの使命である「デザインでチームワークをよりよくする」ための活動を続けていきます。

次回は「Accessibility & Global 世界中すべての人にチームワークを届ける」についてお話ししたい思いますのでぜひお読みください。

Viewing all 686 articles
Browse latest View live