こんにちは、NRIデジタルの島です。 昨年のre:Inventにて、AWS Lambda(以下Lambda)にコールドスタートの性能を大幅に改善し、初回起動を高速化する「SnapStart機能」のリリースが発表されました。 New – Accelerate Your Lambda Functions with Lambda SnapStart サーバレスアーキテクチャであるLambdaを使用してアプリケーションを構築する際、必ず課題となるのが「コールドスタートにおける処理遅延」です。特にJavaの場合フットプリントも大きく、またJIT(Just-In-Time)等アプリケーションアーキテクチャの特性上初動が遅いです。ひとたびコードが最適化されると他の言語よりも高速になりますが、初動時からスピードが求められるサーバレスアーキテクチャとの相性はあまり良くないです。これが原因で「Lambdaには
PayPayの6年の歴史の中で、私たちは急速な成長を遂げてきました。現在、6700万人以上のユーザーにサービスを提供し、日々数百万件の決済を処理しています。しかし、これを成功させるためには、トラフィックと信頼性の要求を満たすための技術的な挑戦が伴います。 PayPayは設立当初からJavaとNodeJSを採用しており、これらの技術は非常にうまく機能してきました。しかし、成長に伴いサービスをスケールアップする必要が生じ、これによりKubernetesクラスターでのCPUとメモリの使用量が増加しました。これにはサーバーコストの増加が伴います。 2023年末、私たちはコアサービスでのトラフィックをより効率的に処理する方法を模索し始め、GraalVMやGo、Rustなどさまざまな技術を調査しました。Rustは、その優れたパフォーマンスとメモリの安全性が保証されていることから、PayPayの多くのユ
はじめに こんにちは。がれっとです。 先日ECSとRDSをやめて、AWSコストを9割削減しましたという記事を投稿したところ、興味深いコメントを見つけたので検証してみました。 結論 EFS上のファイルには通常のSQLite相当のロックを行うことができ、SQLiteの書き込みが競合してバイナリファイルが壊れるといったことは基本的にない。 検証内容 SQLiteは書き込みロックをOSによるファイルロックを使用して実現しているため、Network File System上のファイルに対してうまくいかないというコメントを発見しました。 たしかに、SQLite公式ドキュメントにもその旨が記載されています。 そのため、本当にEFS上のSQLiteは書き込みが競合して壊れるのか、検証していきます。 AWS 構成図 マウントポイントによってロックのかかり方が異なる可能性を否定できなかったため、念の為アベイラ
By Sedrubal HTTP/3は2022年に標準化されたHTTPの仕様で、開発当初は「HTTP over QUIC(QUICを使用したHTTP)」と呼ばれていました。HTTP/3を使用することで通信パフォーマンスが向上するとされていますが、特定の条件においては旧バージョンのHTTP/2の方がパフォーマンスが高まるという論文が発表されました。 QUIC is not Quick Enough over Fast Internet | Proceedings of the ACM Web Conference 2024 https://dl.acm.org/doi/10.1145/3589334.3645323 QUIC is not Quick Enough over Fast Internet - YouTube 2024年時点ではHTTPには大きく3つのバージョンが存在しています。
みなさん、 lodash で消耗してますか? 私は消耗しています。 なぜ lodash で消耗するかというと、とにかく思考停止でインストールされ、 node_modules 下で大量に重複します。サイズが大きいlodashが複数バンドルされてビルドされると、重篤なパフォーマンス上の問題を引き起こします。 lodash には実装上の問題もあり、異様に丁寧に、そして富豪的に作られており、その結果ビルドサイズが無駄に大きいです。丁寧に作られて入るのですが、現代のフロントエンド水準や一般的なポリフィルと噛み合っていません。というわけで、常々やめたいと思っています。 ちゃんとES201xを追ってる人からすると、ほとんどの lodash のメソッドは不要に見えるはずです。本エントリは、思考停止で lodash で実装しようとする人に、ちょっと考え直しては? と投げつける用の記事になります。 現代におい
We're going to speed up some numpy code by 100x using "unsafe Python." Which is not quite the same as unsafe Rust, but it's a bit similar, and I'm not sure what else to call it... you'll see. It's not something you'd use in most Python code, but it's handy on occasion, and I think it shows "the nature of Python” from an interesting angle. So let's say you use pygame to write a simple game in Pytho
マルチクラウド展開にまつわる既成概念を覆すより データ転送では、特に長距離の場合にレイテンシ(遅延)が問題になることがありますが、現在はすべてのクラウド・プロバイダーがそれぞれの物理インフラストラクチャを互いの近くに配置(専門用語では「コロケーション」)しているため、これはさほど問題となりません。この近接性(場合によっては同一コロケーション施設内の別の部屋)は、クラウド間のレイテンシがミリ秒単位であることを意味します。それに加え、クラウド・データセンター・リージョンは世界中で増加しており、クラウド・リージョン間の距離は縮まっています。 という事で、レイテンシ(遅延)について、まとめてみてみます。 ■ Agenda レイテンシ(遅延)とスループット(帯域幅) レイテンシと TCP の動作 帯域幅遅延積(Bandwidth-Delay Product) TCP Window Size の調整と
記事作成時点で開発中のLinux 6.8カーネルでは、ネットワークに関する部分にいくつかの重要な改良が加えられており、多数の同時接続を伴うTCPパフォーマンスが最大40%向上しているとのことです。 [PATCH v8 net-next 0/5] Analyze and Reorganize core Networking Structs to optimize cacheline consumption - Coco Li https://lore.kernel.org/netdev/[email protected]/ Linux 6.8 Network Optimizations Can Boost TCP Performance For Many Concurrent Connections By ~40% - Phoronix https://www.phoronix.com/ne
Development Division/Repro Team/Feature 1 Unit の Watsonです。Feature 1 Unit は Repro Tool の機能開発と保守を担っています。 弊社でも利用している Oj gem のパフォーマンス改善 PR を送った話と、その PR の内容について共有します。 ことのはじまり 以前、同僚が Ruby on Rails で JSON を返す REST API を作成した際、JSON のエンコード部分のパフォーマンス計測をしていました。JSON のエンコード方法は JSON.generate、ActiveSupport::JSON.encode、Oj gem を利用する方法など色々ありますが、私としては Oj gemの ほうがパフォーマンス的にいいだろうからそちらを利用したほうが良いのではと思っておりました。 計測結果を拝見したら確
Svelte は比較的新しいフレームワークです。主に、仮想 DOM の課題が浮き彫りになってきた後で、それを解消しようというモチベーションで開発されています。なぜ Svelte が React や Vue などのように仮想 DOM を採用していにないのかについて、この記事でまとめてみようと思います。 読み書きしやすい:リアクティブなコンポーネントを実装するための"高級言語" 高速:仮想 DOM を利用しない 1. 読み書きしやすい:リアクティブなコンポーネントを実装するための"高級言語[1]" Svelte はリアクティブなコンポーネントを実装するためのコードを記述する上で一般的な UI フレームワークよりも人間が扱いやすい設計になっています。具体的に言うと、記述量が少なく、理解しやすい構文を実現しています。 例えば、React で以下のようなコンポーネントがあった場合を想定します。 im
速さは正義。どうも、かわしんです。 Rust で一番速い HTTP パーサーは C で書かれた picohttpparser の Rust バインディング、picohttpparser-sys です。ガハハ。 $ RUSTFLAGS="-C target-feature=+sse4.2" cargo +nightly bench Finished bench [optimized] target(s) in 0.28s warning: the following packages contain code that will be rejected by a future version of Rust: traitobject v0.1.0 note: to see what the problems were, use the option `--future-incompat-re
昔はCPUの性能といえば「クロック周波数」の高さが大事でした。しかし、最近のCPUは世代や「コア数」「スレッド数」の方が性能への影響力が大きいです。 この記事では「2コアと4コアの違いが分からない。」「インテルのCPUは2コアなのに4スレッドとか言うけど、スレッドって何?」というPC初心者向けに、図解も使って分かりやすく解説してみる。 CPUのコア数とは? CPUは中に色々と入っている。で、実際に処理をする中央処理ユニットがいくつ搭載されているか、これが「コア数」になります。もっともっと大雑把に言うと「CPUの殻の中にいくつCPUが入っているか?」ということです。 CPUが登場してばかりの頃は、当然「1コア」が主流でした。殻の中に、CPUを1個だけ置いて完成です。 デュアルコア 2005年頃から、2つの処理ユニットを搭載する「2コア」(デュアルコア)のCPUが登場しました。代表例は「Ath
回答 (13件中の1件目) JIT方式は中途半端なものではありません。もちろん万能でなんでも優れているわけでもありませんが以下の利点があります。 * プログラムは単一の機械独立、OS独立の形式で配布できる(実行時に実行環境の機械語に変換できる) * 配布形式が小さくなる。マシン中立なバイナリ表現にした場合は特に。 * 全体をネイティブコンパイルするのではなく、速度にシビアに関わる最内周ループや何度も実行される場所に限ってネイティブコンパイルすることで実行に必要なメモリフットプリントを減らすことができる。 * 実行時だけわかる情報を元にした最適化やコード生成が可能。例えば、 *...
LLVMやSwiftを作ったChris LattnerがCEOをやっている会社が、Pythonの使用感とC言語並の性能を併せ持つ言語としてMojoをアナウンスした。 まだ手元で試せる状態でリリースされてはいないが、最大35000倍Pythonより速いという。 Mojo🔥 combines the usability of Python with the performance of C, unlocking unparalleled programmability of AI hardware and extensibility of AI models. Also, it's up to 35000x faster than Python 🤯 and … deploys 🏎 pic.twitter.com/tjT09U4F80— Modular (@Modular_AI) May
お願い 「C10K 問題とは何か」がわかる方は是非 Issue や Twitter などで教えてください。 追記: 自分の立場 1req ごとに 1 native thread を割り当てていたら、クライアントの数が増えれば増えるほど負荷が高まるのは当然だ。ただハードウェアの性能的に余裕があっても性能が劣化することがあり、それを C10K 問題と呼ぶ。C10K 問題は fd, pid の枯渇、スレッドを固定長サイズで確保することによるメモリの無駄遣い、コンテキストスイッチコストを含む。これを解決する方法が 1req ごとに 1 native thread を割り当てない技術で、シングルスレッド+イベントループ+IO 多重化といったテクニックや M:N モデルにつながる。 追記: @naoya_ito さんに解説してもらった当時の歴史的背景 https://twitter.com/naoya
Innovative Tech: このコーナーでは、テクノロジーの最新研究を紹介するWebメディア「Seamless」を主宰する山下裕毅氏が執筆。新規性の高い科学論文を山下氏がピックアップし、解説する。Twitter: @shiropen2 Pythonは人気な言語だが、実行速度が遅いため、速さを求められる環境になると違う言語が採用される。この研究では、Pythonのような高水準言語のシンプル性とCやC++のような低水準言語の高速性を兼ね備えることができるPythonベースのコンパイラ「Codon」を提案する。 Codonは、Pythonのコードをネイティブなマシンコードにコンパイルするコンパイラであり、シングルスレッドにおいて通常のPythonよりも10倍から100倍速く実行され、CやC++に匹敵する速度を実現できるという。またCodonではマルチスレッドも可能なため、より大きな性能向上
しかし、これでもリファレンスは表示されず、パッケージドキュメントしか表示されません。 この機能はオプトインで動くもので、ビルドの時に環境変数が必要だったことを思い出し、これを指定するとようやく見れました! 機能はシンプルですね。 ちなみに、これを書く時にまったく違う同名のライブラリを見て、ふむふむと読んでいたのですが、本家の方は検索では出てこないのでみなさまもお気をつけください。 使い方はシンプルですね。 まずは arena.NewArena()で*Arenaを作成 使い終わったら Free()メソッドを呼び出す arena.MakeSlice[Type](arena)やarena.New[Type](arena)といった関数を使ってアリーナ内部のメモリを利用 arena.Clone(obj)を使うと、アリーナが終了しても残るよう、ヒープに値を移動する(浅いコピー) Goはメソッドのジェネ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く