タグ

queueに関するmanabouのブックマーク (23)

  • インフラのリリース自動化戦略とその行き着く先 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、@ueokandeです。 番リリースってドキドキしますよね。 日はkintone.comのリリース自動化と、その戦略についてお話します。 kintone.comのCI/CDパイプライン kintone.comのインフラ構成はモノレポで管理しており、AWSの構成や、Kubernetes上にデプロイするサービスなどが1つのレポジトリに存在します。 現在のkintone.comは、開発環境、ステージング環境、番環境の3つがあります。 適用タイミングをずらすことによる環境間の乖離を防ぐため、各リリースはすべての環境に適用することとしました。 開発環境でしばらく寝かせたい変更は、機能フラグやカナリアによって切り替えます。 CI/CDパイプラインは以下のようになっています。 それぞれの環境に順に適用し、番環境適用後にテストが通れば無事リリース完了です。 kintone.comのCI

    インフラのリリース自動化戦略とその行き着く先 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • 分散キューという名の苦しみ - Software Transactional Memo

    TL;DR 分散システムにおいてキューを導入する場合、当にキューが必要なのか再考すべき。そこが地獄の入り口だから。 システムの抽象 コンピュータの世界は、来は0と1の信号の羅列が飛び交う無機質なものである。でも人類は信号だけですべてを語らず、様々な喩えを定義してきた。それはデスクトップ・ウィンドウ・マウスカーソルといったグラフィカルな表現に留まらず、パケットやカプセル化といった用語にロック・キュー・リスト・木などのアルゴリズムやデータ構造の世界にも自然に溶け込んでいる。これらはすべて人間の理解を助けるための喩え話に過ぎず、この喩えこそが人間のより直感的な理解をもたらす一方で、発想の制約を生み出してきた。 人間が大きなシステムを作るときも何らかの喩えを用いてシステム全体を整理する。アーキテクチャの「ポンチ絵」を描いて情報共有をするのは企業に勤めていれば経験した人も多いだろう。パワーポイン

    分散キューという名の苦しみ - Software Transactional Memo
  • Zabbix 3.2でsidekiqのキューなどを監視する - Amazon Linux編 - Qiita

    前回のZabbix 3.2でsidekiqを監視する - Amazon Linux編では、sidekiqのプロセス監視などをしましたが、sidekiqにどのくらいのキューがたまっているかなどは監視できていませんでした。 キューの数を監視することにより、キューの数が溜まっていたらsidekiqの処理能力が限界を迎えている可能性があるので、ワーカーの数を増やす必要があるので、重要な監視項目です。 Stats sidekiqには監視APIがついており設定にもよりますが、/admin/sidekiq/statsのURLにアクセスすると以下のようなJSONが取得できます。 { "sidekiq": { "processed": 166, "failed": 79, "busy": 0, "processes": 1, "enqueued": 0, "scheduled": 0, "retries":

    Zabbix 3.2でsidekiqのキューなどを監視する - Amazon Linux編 - Qiita
  • Sim Queue in Java (part 1/2)

  • 高速なキューを作る話(前編) - Qiita

    私が以前Haskellで作成した(割と自己満足な)kazura-queueという比較的高速なキューのライブラリがあります。 このライブラリを作るときに考えたアレコレを書いてみたいと思います。 前提 ここでいうキューって何? データ構造としてのキュー(Sequenceみたいな)や分散処理用のキュー?(RabbitMQみたいな)ではなく、並行処理のためにスレッド間の部品として使うようなキュー(Chan(やTQueueやTChan)みたいな)を意図しています。 ここではChanが持っているキューとしての性質をざっと書き出してみましょう。 キューに入るデータの型は任意 Chan aという型で表現できる範囲で好きなデータを入れることができる。 FIFO キューなのだから当たり前といえば当たり前かもしれませんが一応。 スレッドセーフ 複数のスレッドが同時に書き込もうとしても問題が起きない。1 複数のス

    高速なキューを作る話(前編) - Qiita
  • セグメント木をあきらめた人のための平方分割 - くじらにっき++

    この記事はCompetitive Programming Advent Calendar 2016(その2)の12月15日の記事です。 www.adventar.org はじめに 基事項 1点に対する変更クエリ・区間に対する質問クエリ Range Sum Query Range Minimum Query 区間に対する変更クエリ・1点に対する質問クエリ Range Add Query Range Update Query 区間に対する変更クエリ・区間に対する質問クエリ RSQ and RAQ RMQ and RUQ 応用例 Flipping Parentheses セグメントツリーにチャレンジしたくなったら 謝辞 はじめに 私はRMQのような典型的なセグメント木までは比較的容易に実装できるのですが,それよりも難しいクエリに対応したセグメント木を書くのは難しく感じています。とはいえ「区間に

    セグメント木をあきらめた人のための平方分割 - くじらにっき++
  • Let's learn and try double-ended priority queue with Perl 6 - Qiita

    こんにちは、Perl 6アドベントカレンダーの9日目の投稿になります。 今日は、拙作Algorithm::MinMaxHeapの紹介をしたいと思います。 Introduction Algorithm::MinMaxHeap はdouble-ended priority queueの実装です。[0] 一つの木構造の中に、降順と昇順の2種類のヒープが同時に入っているという、ちょっとおもしろいデータ構造をしています。 もう少し正確な言葉で言い換えると、これはノードがMin-Maxオーダーになっている木です: 偶数段目(図のMin level)にあるノードは、同じ偶数段目にある子のノードと値が同じかそれよりも小さくなっています。 奇数段目(図のMax level)にあるノードは、同じ奇数段目にある子のノードと値が同じかそれよりも大きくなっています。 MinMaxHeap Internals 代表的

    Let's learn and try double-ended priority queue with Perl 6 - Qiita
  • Self-linking and Latency + Life of a Twitter jvm engineer

  • Sidekiqで非業の死を遂げたキューを知る方法 - Qiita

    前置き:Rubyのキューイングシステム RailsRuby)で非同期にキューイングしてくれるライブラリといえばSidekiqですよねっていうくらいSidekiqが好きなんですが、世の中のシェア的にはResqueなのかな。でも、Sidekiqの方が安定的に動かせているので僕は好きです(delayed_jobは知らない)。 ShoryukenというAWS SQSを使ったキューイングシステムもあり、RedisじゃなくてSQS使いたいっていう場合は、これも良いのかもしれないですね。まぁ、ローカルの場合面倒そうな感じもありますけど。 phstc/shoryuken まぁともかくSidekiqを導入してキューイングするっていうのは、もう超絶簡単にできるわけです。できるんですけど、実際にラフに運用していくと、キューがいつの間にかこけて処理待ちで埋まってたり、レアなケースで例外投げて死んでたりするわけで

    Sidekiqで非業の死を遂げたキューを知る方法 - Qiita
  • lf287, SoftwareDevelopment: 並列プログラミング - メッセージキュー (1)

    by Leonardo Giordani <leo.giordani(at)libero.it> 著者紹介: Politecnico of Milan の通信工学部の学生で、ネットワーク管理を行っています。 プログラミング (主にアセンブリ言語と C/C++) に興味を持っています。 1999 年以降は、ほとんど Linux/Unix だけを扱っています。 目次: はじめに メッセージキューの基礎 プロトコルの作成 System V メッセージキュー お薦めの 要約: この連載記事の目的は、マルチタスキングの考え方を紹介し、それが Linux オペレーティングシステムではどのように実装されているかを説明することです。 まずはマルチタスキングの基礎になる概念的な部分から始めて、最終的にはプロセス間通信を行うアプリケーションを完成させます。 そこではシンプルですが効率的な通信プロトコルを使い

    lf287, SoftwareDevelopment: 並列プログラミング - メッセージキュー (1)
  • Apache Kafkaに入門した

    Apache kafka 最近仕事でApache Kafkaの導入を進めている.Kafkaとは何か? どこで使われているのか? どのような理由で作られたのか? どのように動作するのか(特にメッセージの読み出しについて)? を簡単にまとめておく(メッセージングはまだまだ勉強中なのでおかしなところがあればツッコミをいただければ幸いです). バージョンは 0.8.2 を対象に書いている. Apache Kafkaとは? 2011年にLinkedInから公開されたオープンソースの分散メッセージングシステムである.Kafkaはウェブサービスなどから発せられる大容量のデータ(e.g., ログやイベント)を高スループット/低レイテンシに収集/配信することを目的に開発されている.公式のトップページに掲載されているセールスポイントは以下の4つ. Fast とにかく大量のメッセージを扱うことができる Scal

  • Jesque を頑健に使うために RobustWorkerPool というのを書いた - その手の平は尻もつかめるさ

    8/16 (日) に京都でハッカソンが催されるとの事だったので遊びに行って,表題のものを作ってきました (実際には大部分は予め作っていた). Jesque は Resque の Java 実装版で,今やっているやつではこれを使った JobQueue - Worker なシステムの実装を進めています. しかし Jesque Core の Worker Pooling の実装は調べてみると微妙な感じで,具体的にどう微妙かと言うと「Worker を Pooling する (つまり Worker を任意個生成する)」というところまでは面倒を見てくれるのですが,その Worker 群に対して死活監視等のマネジメントの一切をしないという問題があり,これは「不慮の事故で Worker が死んでしまった時 (Worker が poll している時に例外が上げられた時とか) にその Worker を生き返ら

    Jesque を頑健に使うために RobustWorkerPool というのを書いた - その手の平は尻もつかめるさ
  • RSpecの速度を並列実行で3倍速に〜3行書き換えて〜 - Qiita

    RSpecの実行に数分〜数十分単位がかかるようになってきたので、並列実行を導入しました。ちなみに最近日で流行りのCircleCIなどは使わず、古きよきJenkinsを使っています。 高速化の方法の選択として、下記記事を参考にしました。 20150106: RailsのRSpecテストを速くする方法まとめ 私はtest-queueというgemを実行に使うことで高速化をはかりました。 どれぐらい早くなった? まず先に結論から。およそ3倍早くなりました。 なぜ3倍かというと、Jenkinsのホストマシンが3コアのマシンだからです。 Before After もしこれが10コアだったら、10倍速になることでしょう。 一応、「データベースとの兼ね合いで...」「テストの実行順序が...」といった話はもちろん出ると思うんですが、私が今回試したアプリはActiveRecordを使っていないRails

    RSpecの速度を並列実行で3倍速に〜3行書き換えて〜 - Qiita
  • fluentdによる大規模キュー設計

    「Fluentd Meetup 2015 夏」で発表した内容です。

    fluentdによる大規模キュー設計
  • SGE Queues

  • 分散型メッセージングミドルウェアの詳細比較 | POSTD

    メッセージキュー について書いている連載の続きとして、今週末は分散型メッセージングを実行するための様々なライブラリを詳細に分析していきたいと思います。今回の分析では、APIの特性、デプロイメントやメンテナンスの容易さ、そしてパフォーマンスの質を含めて2、3種類の異なる側面に着目します。メッセージキューは2つのグループに分類できます。ブローカレス(brokerless)とブローカード(brokered)です。ブローカードなキューはエンドポイント間に何かしらのサーバを挟んでいますが、ブローカレスなメッセージキューは、メッセージ送信の際でも間に何も挾まないP2Pです。 今回分析するのは以下のシステムです。 ブローカレス nanomsg ZeroMQ ブローカード ActiveMQ gnatsd Kafka Kestrel NATS NSQ RabbitMQ Redis 取り掛かりとして、ほぼ間違

    分散型メッセージングミドルウェアの詳細比較 | POSTD
  • &Oslash;MQ(zeromq)について調査する。

    ØMQ(zeromq)について簡単に調査したのでメモ。元ネタはØMQ - The Guide。 概要 N-N通信を実現する、socket API風軽量メッセージングライブラリ。 自動的な再接続や、メッセージのキューイングを行ってくれる。 複数のメッセージングパターンと呼ばれるものを組み合わせることによって、柔軟なメッセージ配信を行うことができる。 ライブラリについて socket APIライクなC APIを持つ。以下socketは、zeromqのsocketを指す。 zeromqはコンテキストというものを通じて使う。1コンテキストに、I/Oスレッドが1つ割り当てられる。基1プロセスに1コンテキストでOK。複数のcontextを持つことはできるし、その場合は同じ個数のI/Oスレッドが走る。 zeromqのsocketは、プロセス内通信(スレッド間通信など)、プロセス間通信、TCP、UDPマ

    &Oslash;MQ(zeromq)について調査する。
  • Stackを使ってQueueを作る - くまメモ

    有名な話かと思ったら意外と知られていなかったのでメモ。 FILOを使ってFIFOを作るとも言います。StackでQueue作れてもQueueでStackを作る方法が思いつかないので誰か教えて下さい。もしくはこういう学問があったら紹介して頂けると嬉しいです。 簡単な説明としては、2つのStackを用意して、enqueueするときには1つ目にpush()し、dequeueするときには2つ目からpop()するだけ。 ただし2つ目のStackが空の場合は1つ目のスタックが空になるまで2つ目のスタックに移し替える。 template<typename T> class MyQueue { std::stack<T> in, out; MyQueue(){} void enqueue(const T& v) { in.push(v); } T dequeue() { if (out.empty())

    Stackを使ってQueueを作る - くまメモ
  • druby でジョブキュー・サーバーを1分で作る。 - それマグで!

    Rubyの標準パッケージでJobQueueができます。処理を後回しにしたら早いとか、NoSQLとか、◯◯便利と言われるけど、私はdruby推したい。drubyRubyの標準パッケージで、すぐ使えて便利。 drubyとスレッドを使う druby(分散Ruby)は、マルチスレッド化にも対応した、よく出来た分散オブジェクト技術。 drubyを使えば、通常のオブジェクトをネットワークに公開できる。 今回は、Queueクラスとdrubyを作ったジョブ・キューサーバーを数行で作る。 Queue.server.rb メインとなるサーバー、たったこれだけで、キューサーバーが作れる。 #!/usr/bin/env ruby -Ku #coding:utf-8 #サーバー require 'thread' require 'drb/drb' #起動 q = Queue.new DRb.start_serv

    druby でジョブキュー・サーバーを1分で作る。 - それマグで!
  • なぜ Haskell ではキューが軽んじられているか? - あどけない話

    Haskell ではキューが欲しくなったら Data.Sequence を使えと言われる。Seq は両端キューだし、シーケンスとして使えば、連結(><)や分割(splitAt)が、ならし計算量で O(log N) という優れものである。しかし、内部がfinger treeなのでコードが複雑なのと、計算量が「ならし」なところが玉に傷である。 もっと単純で、最悪計算量を保証する(両端でない)キューが標準で提供されてもいい気がする。その候補には、リアルタイムキューがある。どうして標準でキューが提供されないのだろう? 僕なりの答えは「需要がない」だ。 問題を解くときにスタックはよく使うが、キューが必要な問題はそんなに思いつかない。僕はネットワーク屋なので、もちろんルータにはキューが必要なことは知っているが、それ以外で有名どころと言えば幅優先探索ぐらいだ。 幅優先探索 でも、Haskellではキュー

    なぜ Haskell ではキューが軽んじられているか? - あどけない話