中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

コマンド直列化スクリプト

並列で動いているバッチプロセスが叩く外部コマンド(ffmpeg)がメモリーをバカ食いするケースが有って、タイミングが重なるとサーバーメモリーが枯渇するのでそこだけ直列化した。 作ってみたら便利だったので記事にした #!/usr/bin/bash set +e PID_FILE=/…

axiosのソケットリークでハマった

このシンプルなコードでソケットリークが起こる事に気付いた。 実際には膨大なコードの中からココに疑いも持った段階で9合目って感じだが・・・ const axios = require('axios'); const consumers = require('stream/consumers'); const get = (url) => { r…

dockerコンテナ(ubuntu 20.04 LTS arm64)内でChromiumを動かすのが大変だった件

経緯 ubuntu 18.04 LTSのサポートが1年を切ったのでubuntu 20.04 LTSにアップデートしようとしていた。 実サーバー側の検証はそれ程大きな問題はなかったがCI環境でE2Eテストを行う部分で、コンテナ内でChromium headlessを使っており、これが思いの外難産…

MongoDBの統一トポロジー(useUnifiedTopology)について

最近のMongoDBドライバーはエラーが出る (node:8746) [MONGODB DRIVER] Warning: Current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass o…

10TBクラスのmongodb ReplicaSet 運用ナレッジ

オススメの構成 [primary] - priority = 2 [secondary] - priority = 1 : (必要なだけ) : [backup] - priority = 0 - hidden = true POINT 1. Primaryが好き勝手変動すると運用上の取り回しが悪いのでなるべく同じノードがPrimaryになるようにする 2. バッ…

ARM環境まとめ

最近のARM(aarch64)周り この1年で本番環境を全てarm64サーバーに切り替えたりDocker環境を作ったりしてarm64周りのナレッジが溜まってきた。 ハマり続けたメモ。思い出したら追記する ブチ当たった問題の情報がネットに無い場合も多く、もしかしたらarm6…

1時間超えのCIを10分以下にした話

経緯 app.wercker.com 今までwercker を使っていたのだが、数年前は良いサービスだったのにOracleなんかに買われたせいで最近はインスタンスが目に見えて遅かったり、不安定だったりやってられないので、引っ越しを検討していた。 比較したサービス wercker …

Faiss解説シリーズ(第三回)パフォーマンス

crumbjp.hateblo.jp インデックス毎の性能と精度のバランスを取る上で考慮すべき要素 メモリー使用量 Faissインデックスは基本的にオンメモリー上で処理を行う。 すべてのデータが何らかの形でメモリー上に展開できなければならない。 これが最優先事項 Flat…

Faiss解説シリーズ(第二回)ハマりポイント集

crumbjp.hateblo.jp Faissインデックス毎の制限について サンプルコード FlatインデックスはID管理出来ない func AddWithIDsDontWorkOnFlatIndex() { fmt.Println("*** AddWithIDsDontWorkOnFlatIndex ") index, _ := faiss.IndexFactory(2, "Flat", faiss.M…

Faiss解説シリーズ(第一回)基本編

最近、根詰めて触っているので詳しくなって来たついでに解説記事を書いてみた Faissとは Facebookが開発しているC++NNS(Nearest neighbor search)エンジン 手に入るライブラリの中では最高峰の速度 高次元ベクトルで問題になりがちなメモリー問題に対応でき…

Faissでベクトル検索するDBを開発した

広告プラットフォームcraft に投入 24000次元のSCDVベクトルを数百万件入れてインデクシングしています。 PQ圧縮しているのでメモリー負担は殆ど無く小さなサーバーで運用できています(トレーニングの時だけメモリーが大変) 順次利用範囲を広げていく予定…

SCDVが出来るまで

SCDVとは? 数多ある文章を評価する手法の中で速くて安くて旨いと噂されているもの 趣旨 実験的な実装やその結果は色々手に入るが実際にある程度の規模のサービスに使うとなると、どんな苦労があるのかを紹介しようと思う。 コードレベルの詳細な解説は他所…

AWSでもsysctlやらなきゃならんのか・・・

問題 構成 突発的に、1台のサーバーで5秒間だけ、502 Bad Gateway が数百〜数千出て困った。(②の部分) nginx.conf proxy_connect_timeout 5; 5秒はnginx設定によるモノなのだろうが、なんで一瞬だけ出るのか全然解らなかった。 nginxのerror.log にはこ…

Graviton2のアクセラレータの効果

前回の続き 2020-06-18から1日間の記事一覧 - 中年engineerの独り言 - crumbjp 2xlarge以上は圧縮アクセラレータが付くらしい https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_Deep_dive_on_Arm-based_EC2_instances_powered_by_AWS_Graviton_CMP32…

AWS Graviton、Graviton2 インスタンス別性能

前回の続報 crumbjp.hateblo.jp ARM64バイナリ用のインスタンスタイプ別の状況 網羅的にやる気は無く、自分に必要な範囲で調べただけ。 instance type CPU能力 SPOT AZ a1系 m6gの半額程度 潤沢 1a,1d m6g系 c6gと遜色なし 買える 1a, 1c c6g系 高 枯渇 1a, …

AWS Graviton2

最大40%のコストカット! aws.amazon.com 魅力的だが、ARMアーキテクチャのプロセッサなのでバイナリから違うのが面倒くさい。 サラのOSディストリビューションから作り直しなので現行のサービスでテストするにはかなりの障壁。 人柱記事が出てくるまで時…

socket.io が nodejs12系で落ちる

なんで今のコードでnodejs10系では問題にならなかったのかが解らないのだけど、ずっと問題なく動いていた。 それがnodejs12系では落ちる様になった。(EPIPE) github.com とりあえずPRを送っておいたが、取り込まれるまで待てないので socket.io からforkし…

mecab-gyp 1.0.6 nodejs12対応

mecab-gyp nodejs で mecab を扱いたい時、選択肢がほとんどない。 オプションが渡せなかったりforkしてるモジュールだったりで使い物にならない。 仕方がないので自分で作っているのだが、nodejs10 -> nodejs12 でv8.hが大きく変わってコンパイル出来なくな…

mecab-ipadic-neologd 池田さん森さん問題

mecab-ipadic-neologd github.com mecabの精度を劇的に上げてくれるのだけど、頑張りすぎな所があって、、 mecab -d ./lib/mecabdic <<< '森さん池田さん' 森さん 名詞,固有名詞,人名,一般,*,*,森さん,モリサン,モリサン 池田 名詞,固有名詞,人名,姓,*,*,池…

今時、digest認証なんかしたくないんだが。。。

先方がそうなので仕方なく、、、ユーザ名に @ が含まれていると動かなかったので少しだけ世直し。 github.com

MongoDBの開発陣は糞

アトミック性の部分の問題を何年も放置する判断力は異常 コメントでも相当言われてるが、、あいつらバカなんだろう。。 bulkUpdate & upsert でユニーク制約エラーを起こす [SERVER-14322] Retry on predicate unique index violations of update + upsert -…

Rails の or クエリー

qiita.com まあ説明はこちらに譲るとして、、 一番の問題は 非常に気を遣う ということだ。 普通に使うと動くけど、レアケースで落ちるのが痛い。 qiita.com これが一番しっくり来た。 コメントの通りちょっと直さないと落ちるんだけど。。これをinitializer…

ITシステムを構築するということ

引っ越しついでに。。。 技術を体系的に理解するということ IT技術は日進月歩でどんどん進化も早くなるので、専門職化して行くのはある程度仕方ないとは思うけど やっぱり、その様な人材や技術を効率的に正確に扱うには、全体を万遍無く理解出来てないと難し…

Markdownじゃなきゃダメな体に・・・

引っ越して来ました。。。 もうMarkdownじゃなきゃやってらんないよね。。 へー色サポートしてるのね

ES6 transpiler すると壊れる問題

webpack + babel で一見ちゃんとtranspilerできるのだが、動かしてみるとエラる。 Uncaught TypeError: Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined. 色々調べたが解決方法には辿り着かなくて何とかひねり出したのがこれ。 plugins: [ new web…

capistrano-bundle_rsync の :repo_tree がちゃんと動かない・・・

こうじゃないと動かないと思うんだが、これだけ使われてるライブラリでこんな5分で治る奴が放置されているとも思えんのだ・・・ だれか教えて偉い人!! https://github.com/sonots/capistrano-bundle_rsync/pull/15/files

MongoDB の チューニンガソン環境を作った。

例のGoogle compute engine 60日トライアル の$300 分をどう使おうか・・・と考えていたのだが、MongoDBのチューニンガソンに使えるんじゃないか!?と思って週末に一気に作ってみた。mongo-tuningason.crumb.jp"いきなり超負荷を掛けると、色々問題が起き…

mongosが腐る・・・

mongosの後ろのshardでstepdownが起きたときにmongosが追随せずに以降のクエリーが全て刺さり続けることがある。 こうなるともう自動で復活はしないようだ。 すべてのmongosが腐る訳ではなく、stepdown時に高負荷だったmongosが腐る傾向にある。 shardConnPo…

MongoDBクラスタ間の同期

node-mongosync https://www.npmjs.com/package/node-mongosyncステージング環境へのデータ同期や、MongoDB引っ越しの際に便利。 そうそう引っ越さないけど・・以前 mongoshellで実装したものの焼き直しだ。 node-native-driverでは、tailable cursor の clo…

『もう二度と、絶対にMongoDBを使うべきじゃない理由』というのがあるらしい

記事 https://fa-works.com/blog/why-you-should-never-ever-ever-use-mongodbなかなか香しいな。 というよりコイツ他のブログも結構ヒドイw とりあえず不満をぶちまけるタイプのようだ。で、、事の本質はプロダクトの設計がちゃんと出来ない人はどんな場合…