タグ

ブックマーク / blog.cybozu.io (78)

  • バグゼロを実現した話とその後の顛末 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。好きなメソッドは emptyIfNull です。 僕は、自社クラウドである cybozu.com のミドルウェアを開発するチームで働いています。具体的には、検索サービスやファイルサーバー、非同期処理用ワーカー、セッションマネージャーなどなどを提供しています。 僕がこのチームに来たのは数年前ですが、当時はバグの多いプロダクトでした。今はすべての既知のバグを直し、残存不具合件数が 0 件、つまりバグゼロな状態になりました。また、バグゼロを実現してから 2 年ほど経過していますが今もその品質を保っています。今回はこのバグゼロを実現した方法と、その後の顛末について記そうと思います。 以前のコード 数年前に提供されていたこのミドルウェア群は、はっきり言って、バグの塊のようなプロダクトでした。 当時のコードは保守性とは程遠い

    バグゼロを実現した話とその後の顛末 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • nginx ちょっと不思議だったリクエストリトライのお話 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、Sustain チームの山口です。 今サイボウズリモートサービスというVPN・中継サービスで使用する L7LB を nginx に移行しようといろいろ調査をしています。 nginx をリバースプロキシとして使用する際に少々障害となる動作があり、それに関するアップデートが最近あったので、今回はそのお話です。 3行で分かる記事の内容 nginx をリバースプロキシとして使う場合、リクエストがバックエンドサーバに二重で飛ぶ可能性がある 対策として proxy_request_buffering off が使えそうだが、使えない nginx 1.9.13 で仕様変更が入り、POST, LOCK, PATCH メソッドのリクエストは二重で飛ばないことが保証された nginx の受動的な health check とリクエストのリトライ動作 nginx はリバースプロキシとして使う場合に

    nginx ちょっと不思議だったリクエストリトライのお話 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • cybozu.com のリバースプロキシを nginx にリプレイス - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。インフラチーム Hazama の深谷です。 デブサミ 2015 で、cybozu.com の自社製リバースプロキシを全面的に再実装した話をしてきました。 今回は、そちらの資料を紹介いたします。 cybozu.com ではお客様ごとに異なるサブドメイン(ex. demo.cybozu.com)を用意しています。サブドメイン方式には、お客様ごとに異なる IP アドレス制限をかけられるとか、Same-Origin-Policy のため安全に JavaScript でカスタマイズができるといった利点があります。 このサブドメインを実現しているのは、従来 Apache で実装されたリバースプロキシでした。しかし、この時の実装はサブドメインごとに異なる VirtualHost を定義する方式で、お客様サブドメインの数に比例して Apache の設定を変更する時間が伸びていくというものでした

    cybozu.com のリバースプロキシを nginx にリプレイス - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 株式会社一休と合同勉強会を開催しました - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。生産性向上チームの宮田(@miyajan)です。 4/20(水)にサイボウズ東京オフィスで株式会社一休のエンジニアたちと合同勉強会&交流会を開催しました。今回はこの会の様子をご紹介します。 経緯 株式会社一休の田中さん(@kentana20)がサイボウズのオフィス見学に来られたときに、『なにか合同で勉強会とかやれるといいですねー』という話をしたのがきっかけでした。その後、外の勉強会で赤坂さん(@chakasaka9)と会ったときも同じような話題が出て、あらためて企画して今回開催という流れになりました。 会場の様子 発表一覧 まずは、それぞれの会社から2ずつ発表が行われました。自動テストやCI、開発/リリースプロセスといったテーマが中心です。その後の懇親会の話のタネとなるので、皆さん全力です。 一休.comのE2Eテスト事情 〜ギリギリ話せるところまで話します〜 一番手は、株式

    株式会社一休と合同勉強会を開催しました - Cybozu Inside Out | サイボウズエンジニアのブログ
  • Shibuya.XSS #7 が開催されました - Cybozu Inside Out | サイボウズエンジニアのブログ

    Cy-SIRT の伊藤です。 2016 年 3 月 28 日に Shibuya.XSS tech Talk #7 がサイボウズで開催されました。 今日は各セッション内容について簡単にご紹介するとともに、講演者の方の資料への URL を残します。 mala さん - 超絶技巧 CSRF speakerdeck.com 2001 年当時に公開された Cross Protcol Scripting Attack と呼ばれる攻撃手法によるリスクが、現在は XHR Level2 でプレフライトのチェック無しに multipart-formdata を経由でバイナリデータを送れるようになったことで増加しているとことを紹介いただきました。 Masato Kinugawa さん - PATHでXSSする技術 speakerdeck.com クエリ部と同様にパスでもユーザ入力を受け付けているアプリの場合、ア

    Shibuya.XSS #7 が開催されました - Cybozu Inside Out | サイボウズエンジニアのブログ
  • NAT をやめて、透過 SOCKS プロキシを導入した - Cybozu Inside Out | サイボウズエンジニアのブログ

    以下の記事内容について、奥一穂氏(@kazuho)より、「connectのエラーコードが信頼できなくなるといった欠点もあるのに透過 SOCKS プロキシが汎用的に良いように読めてしまう」というご指摘をいただきました。確かに、下記内容は当社が抱えていた複数の課題を短期間で解消できる「ワークアラウンド」として透過 SOCKS プロキシという技法もあることを紹介したものであり、NAT と比較して常に良いという主張をしたかったわけではありません。また、記事内では解説を省きましたが、従来より HTTP(S) 通信は NAT ではなく HTTP プロキシを利用しています。謹んで補足・訂正とさせていただきます。 が好きだけどアレルギーで近寄ることができない山泰宇です。 先日アーキテクチャ刷新プロジェクトNeco」を紹介しましたが、今回はその活動の一環として実施したネットワークアドレス変換(NAT

    NAT をやめて、透過 SOCKS プロキシを導入した - Cybozu Inside Out | サイボウズエンジニアのブログ
  • アーキテクチャ刷新プロジェクト「Neco」の紹介 - Cybozu Inside Out | サイボウズエンジニアのブログ

    @ymmt2005 こと山です。 今回は開発部と運用部のメンバーが協力して進めている cybozu.com やサイボウズ Live のアーキテクチャ刷新プロジェクトNeco」について紹介します。 Neco を 3 行で説明すると、 サイボウズのクラウドインフラのいけてないところを洗い出して、 5 年程度を目安に改善するつもりだけど、 やりたいことが多すぎるので、We are hiring! で済んでしまうのですが、それだけでは面白みに欠けますので、いけてない内実を暴露しながら解説いたします。 サイボウズはクラウド 5 年生 正確に言うとサイボウズ Liveなど一部のサービスはもっと以前から取り組んでいたのですが、格的にクラウドサービスといえるインフラを構築してサービス提供を開始したのは今から 4 年前の 2011 年 11 月となります。そこでオープンしたのが cybozu.co

    アーキテクチャ刷新プロジェクト「Neco」の紹介 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 社内で手軽にHTTPSを使いたい!kintone × nginxで圧倒的生産性向上! - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。生産性向上チームの宮田(@miyajan)です。 サイボウズには、生産性向上チームという、組織横断で使える開発基盤を整備するためのチームが存在します。「チーム」となっていますが、今のところ私一人です。 今回は、弊社製品のkintoneとオープンソースのnginxによるリバースプロクシを組み合わせて、社内のエンジニアが手軽にHTTPSを使えるようにした話を書きます。 モチベーション 開発者が手元の開発環境でHTTPSを使いたい場面というのは、意外とたくさんあります。以下は、実際に社内であったケースです。 HTTPSでのみ発生する問題を手元で再現させたい 社内システムをHTTPSで運用する必要がある 例1) SAML認証でSSOするためにHTTPSが必須 例2) Service Workerを利用するためにHTTPSが必須 例3) 社内でDocker Registryを運用している

    社内で手軽にHTTPSを使いたい!kintone × nginxで圧倒的生産性向上! - Cybozu Inside Out | サイボウズエンジニアのブログ
  • conntrack がロードされたサーバで LVS-DR を構成する場合の注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。インフラ開発チームの深谷です。 Linux の conntrack モジュールがロードされたサーバーで、レイヤー4 (L4) ロードバランサを LVS-DR で構成したところ、 パケットフィルタが正常に働かず、通信はできるものの、一部のパケットは落ちるという挙動に悩まされました。 今回はこの問題について詳細に解析し、原因と対策がわかったのでご紹介いたします。 発生した問題 今回の問題は、Ubuntu を使って L4 ロードバランサを実装している時に遭遇しました。 構築したロードバランサには、セキュリティ対策のため iptables のラッパーである UFW を使って、 パケットフィルタをかけていました。 ロードバランサの実装には、Linux カーネルに実装されている LVS を使いました。 LVS ではいくつかのパケット転送方式をサポートしており、今回はパフォーマンスに優れる

    conntrack がロードされたサーバで LVS-DR を構成する場合の注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • Turnip + Sinatra + kintone でメンテナブルなE2Eテストを書こう - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。大阪開発部の岡田(@y_okady)です。大阪ランチは今日も安くて旨いですね。 サイボウズと言えばSeleniumを使ったE2Eテストのイメージが定着しつつありますが、そのE2Eテストをさらに強固なものにするために新しい仕組み作りにチャレンジしました。 作り始めて3日しか経っていないプロトタイプの段階ですが、構成はだいたい固まってそれなりに動くものができたのでご紹介します。 きっかけ 2週間ほど前に読んだ「エッセンシャルスクラム」に、こんなことが書いてありました。 テストはスプリント期間よりも長くかかる場合がある。 そうなるのは、開発チームが巨大な手動テストという負債を背負っているからだ。 サイボウズではE2Eテストの自動化が進んでいると言っても、自動化できているのは試験全体のほんの一部です。ほとんどのテストは手動で実施しており、プログラマが1ヶ月かけて開発したものをQAが1

    Turnip + Sinatra + kintone でメンテナブルなE2Eテストを書こう - Cybozu Inside Out | サイボウズエンジニアのブログ
  • もうサムネイルで泣かないための ImageMagick ノウハウ集 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちわ、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。好きなみかんは紅マドンナです。 今回は、サイボウズのサムネイル事情について記事を書きたいと思います。サイボウズに限らず通常の Web アプリケーションでもサムネイル作成はよくあると思いますが、ハマりどころが多く涙しているサムネイリストも多いかと思います。これからの時代を生きるサムネイリストが快適なサムネイルライフを送れるよう、知見を共有したいと思います。 弊社では画像変換ツールに ImageMagick を用いており、従って知見は ImageMagick 固有のものがほとんどです。 画像比較は人間の眼で行うべし サムネイル周りに何か修正を入れたら修正前後の画像を比較しましょう。機械によるバイト列の比較では画像の良し悪しがわかりません。頼れるのは人間の眼だけです。肉眼で確認しましょう。 比較できるツールを作ると良

    もうサムネイルで泣かないための ImageMagick ノウハウ集 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • TCPとタイムアウトと私 - Cybozu Inside Out | サイボウズエンジニアのブログ

    部長や副部長もプログラミングを(たまに)することで有名なサイボウズの運用部長、山泰宇です。 有名じゃないかもしれませんが、ブログに書いたので有名になるということでご了承ください。 今回は、先日発生した yrmcds に起因する障害の原因と対策を解説します。 yrmcds というのは、サイボウズが開発している memcached 互換のキーバリューストレージです。 問題の理解のため、まず TCP 通信で、通信先の相手の障害にどう対応するか解説します。 データの送信中に相手が落ちるケース このケースはさらに二つに分かれます。 相手の OS は生きているが、通信しているプログラムが落ちるケース 相手の OS ごと(あるいはネットワークごと)落ちるケース 1 と 2 の違いは、前者の場合 RST パケットが返ってくるのに対して、後者ではなにも返ってこない点です。後者の場合、ack されない

    TCPとタイムアウトと私 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • nginx の設定をレビューするときの観点をまとめてみた - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。 インフラチームの野島(@nojima)です。 チームのメンバーに nginx の設定について気をつけるべき点を共有するために、レビュー観点を書きました。 せっかくなのでここで公開します。 ほとんどの項目は自分やチームのメンバーの実体験に基いています。 レビュー観点 server server_name が他のやつと被っていないか。 listen する IP アドレスが同じ場合、server_name で区別できないといけない。 TLS を使う場合、SNI をサポートしないクライアントでは TLS 用の設定が default_server のものが使われる点にも注意。 TLS を使う場合、listen ディレクティブに ssl オプションを書いているか。 location location のマッチの順番に注意 正規表現の location は前方一致の location より

    nginx の設定をレビューするときの観点をまとめてみた - Cybozu Inside Out | サイボウズエンジニアのブログ
  • ES6 or ES2015 ? 〜WEB+DB PRESS Vol.87 ES6特集に寄せて〜 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは!kintone開発チームの佐藤鉄平(@teppeis)です。 日6/24発売のWEB+DB PRESS Vol.87にて、ECMAScript 6をテーマに第1特集を書かせていただきました。 ECMAScriptとはJavaScriptが準拠している言語仕様で、その最新版であるECMAScript 6 (ES6) が今月17日にEcma標準として公開されました。 特集では、ES6の主要機能や変更点には一通り触れつつ、それぞれの機能が追加された背景やどう活用できるのかといったこともできるかぎり解説しています。 第1章 ECMAScript 6とは何か: JavaScriptの新たな仕様を知る 第2章 ECMAScript 6に触れてみよう: トランスパイラ/ポリフィルで今すぐ使う 第3章 モダンになった文法: 生産性を高めるための言語の進化 第4章 強化された標準ライブラリ:

    ES6 or ES2015 ? 〜WEB+DB PRESS Vol.87 ES6特集に寄せて〜 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • Etsyを支えるパフォーマンスアラートの技術 ~Velocity Conference 2015レポート #1~ - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは!kintone 開発チームの田中裕一(@yuichielectric)です。 O'Reilly Mediaがサンタクララで開催したVelocity Conference 2015に僕と佐藤鉄平(@teppeis)の2人で参加してきました。これから何回かに分けてそれぞれが面白いと思ったセッションの内容を紹介していこうと思います! Velocity Conferenceとは O'Reilly Mediaが主催しているカンファレンスで、高速でスケーラブルで価値のあるサービスを作るための方法論がテーマです。 もともとは、技術的なテーマが主だったようですが、最近はそういったサービスを開発するために必要となってくる、継続的インテグレーションや継続的デリバリーの手法や、アーキテクチャ(流行りのmicroservicesの話題も幾つかありました)、開発プロセス、組織論(DevOps絡みの話題が

    Etsyを支えるパフォーマンスアラートの技術 ~Velocity Conference 2015レポート #1~ - Cybozu Inside Out | サイボウズエンジニアのブログ
  • JS自動レビューツール"jswatchdog"を公開しました - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。kintone 開発チームの天野 (@ama_ch) です。すっかり春らしくなりましたね。 少し前に JS の自動レビューツール jswatchdog をオープンソースで公開しましたので、こちらで紹介させていただきます。 使い方 https://kintone.github.io/jswatchdog/ 上記の URL を開き、左側のエディタに JS コードを貼り付けるだけです。 右側に修正が必要な箇所が表示されるので、適宜修正します。 特徴 バリバリの開発者じゃなくても使いやすい一画面完結の Web インターフェース lint ツールでお馴染みの構文チェックの他、知らずに脆弱性を作り込むことを避けるため、XSS の可能性がある箇所にも警告を表示 内部的には、JS の静的構文チェックツールとして ESLint と JSHint を組み込んでいます。 さらに XSS の可能性があ

    JS自動レビューツール"jswatchdog"を公開しました - Cybozu Inside Out | サイボウズエンジニアのブログ
  • クラウドを支えるこれからの暗号技術 - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 私は先月のDevelopers Summit 2015で、「クラウドを支えるこれからの暗号技術」という講演をいたしました。そのとき、近いうちに詳細なテキストを公開する予定と申し上げました。その準備ができましたので報告いたします。 講演と同じタイトル『クラウドを支えるこれからの暗号技術』のpdfgithubから取得できます。 2015/6/21追記。このテキストが秀和システムから出版されました。 表題の講演は、主に2000年に入ってから登場した新しい暗号技術の紹介がメインです。そのときのプレゼン資料は3月の時点で4万5千ビューを超えていて、デブサミ資料の中でもかなり上位に入る閲覧数のようです。技術者の暗号に関する関心が高いことを伺わせます。 しかし一般向けの暗号のテキストは、公開鍵暗号の一つであるRSA暗号やElGamal暗号ぐらいしか詳しい原理が記されていな

    クラウドを支えるこれからの暗号技術 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • nginx の拡張モジュールを書いて DoS 対策をした - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは。インフラチームの野島です。 最近、cybozu.com はロードバランサを Apache から nginx に置き換えました。 (参考: cybozu.com のリバースプロキシを nginx にリプレイス) 置き換えの一環として、Apache に実装していた DoS 対策の仕組みを nginx の拡張モジュールにする形で移植しました。今回、この拡張モジュール nginx-maxconn-module を OSS として公開しましたので紹介します。 背景 DoS 対策 秒間リクエスト数 v.s. 瞬間同時リクエスト数 実装方針 nginx-maxconn-module 基的な使い方 高度な使い方 インストール おわりに 背景 題に入る前に、cybozu.com において、HTTP リクエストがどのように処理されているかを説明します。 cybozu.com では、負荷分散のた

    nginx の拡張モジュールを書いて DoS 対策をした - Cybozu Inside Out | サイボウズエンジニアのブログ