Social Icons

高度なGoスケジューラのチューニング: HFTワークロードのためのゴルーチンをOSスレッドに固定する

GoのHFTシステムにおいて、goroutineをOSスレッドに固定することは、NUMAペナルティとロック競合を大幅に減少させることができます。この記事では、runtime.LockOSThread()を活用し、スレッドのアフィニティを管理し、マルチソケットアーキテクチャ向けにGoコードを最適化する方法を探ります。 NUMAの悪夢 goroutineの固定の詳細に入る前に、HFTシステムにとってNUMA(非均一メモリアクセス)アーキテクチャがなぜ厄介なのかを簡単に振り返りましょう: * メモリアクセスのレイテンシは、どのCPUコアがどのメモリバンクにアクセスするかによって異なります * Goのスケジューラは、デフォルトではgoroutineのスケジューリング時にNUMAトポロジーを考慮しません * これにより、頻繁なクロスソケットメモリアクセスが発生し、パフォーマンスが低下する可能性があります HFTの世界では、ナノ秒単位の違いが利益と損失を分けることがあります。しかし、心配しないでください。この問題を解決するためのツールがあります! Goroutineの固定:秘密...

8時間前
4 分で読む

Firecracker MicroVMs: OS抽象化でサーバーレスを強化

Firecracker MicroVMは、サーバーレスワークロードのための軽量な仮想マシンで、OSレベルの隔離を提供します。これらは非常に高速な起動時間、最小限のリソースオーバーヘッド、そして強化されたセキュリティを提供します。この詳細な解説では、カーネルの起動時間を調整し、最小限のゲストイメージを作成し、vsockを使用した高度なネットワーク設定を行い、大規模な一時的なワークロードをオーケストレーションする方法を探ります。開発者の皆さん、サーバーレスを飛躍させる準備はできていますか? Firecrackerの利点: なぜ気にするべきか? 詳細に入る前に、なぜ忙しい開発者であるあなたがFirecracker MicroVMに関心を持つべきかを考えてみましょう。以下がその理由です: * 超高速の起動時間: ミリ秒単位での起動です。 * セキュリティの向上: 各関数が独自の隔離されたVMで実行されます。 * リソース効率: 最小限のオーバーヘッドでコストパフォーマンスが向上します。 * 柔軟性: 事前定義されたランタイムだけでなく、Linux互換のワークロードを実行できます...

1日前
3 分で読む

エキゾチックなファイルシステムを深掘り: Ceph、MooseFS、JuiceFS

要約 * Ceph: CRUSHアルゴリズムを使った強力なオブジェクトストレージ * MooseFS: 軽量でPOSIX準拠のひねりを加えたシステム * JuiceFS: キーバリューストアの魔法を取り入れたクラウドネイティブファイルシステム * 3つのシステムはそれぞれ、レプリケーション、イレイジャーコーディング、一貫したハッシュ化に独自のアプローチを提供 * パフォーマンステストで驚くべき結果が明らかに(ネタバレ: 常に速度だけが重要ではない) Ceph: ストレージの万能ツール まずはCephから始めましょう。2006年から注目を集めている分散ストレージシステムです。Cephが分散ファイルシステムの中で際立っている理由は何でしょうか? CRUSHアルゴリズム: Cephの秘密のソース Cephの中心には、スケーラブルなハッシュ化の下での制御されたレプリケーション(CRUSH)アルゴリズムがあります。データの交通整理役のようなもので、車ではなくデータの配置をストレージクラスター全体で調整します。 CRUSHの動作を簡単に説明すると: def crush...

1日前
5 分で読む

マルチモデルデータベースパターン: 単一エンジンパラダイムからの解放

マルチモデルデータベースは、異なるデータパラダイム(リレーショナル、ドキュメント、グラフなど)を一つのシステムに統合します。実装パターン、クエリルーティングのコツ、スキーマ統一の悩み、矛盾する一貫性モデルへの対処法を探ります。さあ、冒険の始まりです! マルチモデルの多様性:一つのサイズではすべてに合わない理由 想像してみてください。あなたは次のようなシステムを設計しています: * 金融取引のための構造化データ * ユーザー生成コンテンツのための非構造化ドキュメント * ソーシャル接続のためのグラフデータ * IoTセンサーの読み取りのための時系列データ 突然、信頼していた古いPostgreSQLインスタンスが少し...不十分に見えてきます。そこで登場するのが、データの世界のスーパーヒーローチーム、マルチモデルデータベースです。 実装パターン:データパラダイムのミックスとマッチ 1. ポリグロットパーシステンスアプローチ このパターンは、特定のデータモデルに最適化された複数の専門データベースを使用します。スイスアーミーナイフのようなもので、小さなハサミやコルク...

2日前
5 分で読む

高並行システムにおけるメモリマップドファイルを用いた部分的I/O戦略: ビーストを手なずける

基本: メモリマップドファイルとは何か? 本題に入る前に、メモリマップドファイルについて簡単におさらいしましょう。要するに、ファイルを直接メモリにマップし、プログラムのアドレス空間内で配列のようにアクセスできる方法です。特に大きなファイルやランダムアクセスパターンを扱う場合、パフォーマンスの大幅な向上が期待できます。 POSIXシステムでは、mmap()関数を使ってメモリマッピングを作成しますが、Windowsでは`CreateFileMapping()`と`MapViewOfFile()`という独自の関数があります。以下はC言語での`mmap()`の使用例です: #include #include #include int fd = open("huge_log_file.log", O_RDONLY); off_t...

2日前
4 分で読む

マイクロサービスにおけるキャッシュの無効化: 手強い問題の解決

要約 高度な無効化戦略を深く掘り下げ、イベント駆動型のアプローチを探り、データへの「スマートポインタ」と戯れ、多層キャッシュと格闘し、並行性の危険な水域を航行します。準備はいいですか?これはワイルドな旅になります! キャッシュの難題 無効化戦略に飛び込む前に、まずなぜこの問題に直面しているのかを簡単に振り返りましょう。マイクロサービスにおけるキャッシュは、車にニトロを追加するようなものです。すべてが速くなりますが、一つの間違いで全てが爆発する可能性があります! マイクロサービスアーキテクチャでは、しばしば以下のような状況があります: * 独自のキャッシュを持つ複数のサービス * 独立して更新される共有データ * サービス間の複雑な依存関係 * 高い並行性と分散トランザクション これらの要因がキャッシュの無効化を悪夢にします。しかし、心配しないでください。これに対処するための戦略があります! 高度な無効化戦略 1. 時間ベースの有効期限 最も簡単なアプローチですが、単独では不十分なことが多いです。各キャッシュエントリに有効期限を設定します: cache...

3日前
6 分で読む

Quarkusにおけるサーバー送信イベント: リアルタイム通信の知られざるヒーロー

Server-Sent Events(SSE)は、ただの流行語のように聞こえるかもしれませんが、実際にはリアルタイム通信を静かに革新している技術です。WebSocketとは異なり、SSEはサーバーからクライアントへの一方向のチャネルを作成します。このシンプルさがSSEの強みです。 QuarkusでのSSEが注目に値する理由は以下の通りです: * 軽量で実装が簡単 * 標準HTTPで動作 * 自動再接続処理 * 既存のウェブインフラと互換性あり * 双方向通信が不要なシナリオに最適 QuarkusでのSSE実装:クイックスタートガイド コードを使って実際に試してみましょう。Quarkusで基本的なSSEエンドポイントを実装する方法は以下の通りです: @Path("/events") public class SSEResource { @Inject @Channel("news-channel") Emitter<String> emitter;...

3日前
3 分で読む

リアルタイムデータマスキング: ログ内の機密情報を保護

まずは「なぜ」について簡単に触れておきましょう: * コンプライアンス:GDPRやCCPAなどの規制は、個人情報を無造作にログに記録することを許しません。 * セキュリティ:ログはデータベースほど厳重に保護されていないことが多いです。攻撃者にとっての宝の山にしないようにしましょう。 * 安心感:データ漏洩の心配をせずに安心して眠れるようにしましょう。 リアルタイムデータマスキングの仕組み リアルタイムデータマスキングの基本は、次の3つの要素で構成されています: 1. インターセプターまたはミドルウェア:ログが書き込まれる前にキャッチします。 2. 検出ルール:マスキングが必要なものを特定します。 3. マスキングロジック:機密データを安全なマスクされたバージョンに変換します。 これらを分解して、ログパイプラインをパフォーマンスの悪夢に変えずに実装する方法を見ていきましょう。 1. インターセプター:最初の防衛線 インターセプターはログのチェックポイントとして機能します。アプリケーションコードとログフレームワークの間に位置し、ログエントリをその場で検査および...

4日前
3 分で読む

EnvoyとKong: APIゲートウェイを強化する

EnvoyとKongの世界を探求し、トラフィック管理、セキュリティ、パフォーマンス最適化の高度なパターンを学びましょう。マルチテナントルーティング、カスタムプラグイン、そして最も慎重なセキュリティ専門家も納得するゼロトラストアーキテクチャの実装方法について学ぶことができます。 トラフィック管理: リクエストの無法地帯を制御する まずはトラフィック管理から始めましょう。マイクロサービスの世界では、トラフィック管理は猫を集めるようなもので、混沌として予測不可能で、時には面白いこともあります。 ロードバランシング: ジム愛好者だけのものではない EnvoyとKongは、単純なラウンドロビン戦略を超えた高度なロードバランシング機能を提供します。いくつかの高度な技術を見てみましょう: * 最小リクエスト: 最もアクティブなリクエストが少ないインスタンスにリクエストをルーティングします。気まぐれなサービスに最適です。 * 重み付きラウンドロビン: 異なるインスタンスに異なる重みを割り当てることができます。強力なサーバーが他のサーバーよりも多くの負荷を処理できる場合に便利です。...

4日前
6 分で読む

GoにおけるSIMD加速JSON解析: AVX2でjsoniterを高速化

私たちは、Goのための超高速JSONパーサーであるjsoniterの力を、AVX2 SIMD命令と組み合わせて、JSONを驚異的な速度で解析します。特に大規模なデータセットにおいて、顕著なパフォーマンス向上が期待できます。 スピードの必要性:なぜSIMDなのか? 詳細に入る前に、なぜSIMD(Single Instruction, Multiple Data)がゲームチェンジャーなのかを説明しましょう。簡単に言えば、SIMDは複数のデータポイントに対して同時に同じ操作を行うことができます。これは、複数の敵を一度に倒すスーパーヒーローのようなものです。 AVX2(Advanced Vector Extensions 2)は、IntelのSIMD命令セットで、256ビットのベクトルを操作します。これにより、1つの命令で最大32バイトのデータを処理できます。JSON解析では、大量のテキストデータを扱うことが多いため、これにより大幅な速度向上が可能です。 jsoniterの登場:JSON解析のスピードデーモン jsoniterは、...

5日前
3 分で読む

ビデオゲームがプログラミング言語を救った方法: RobloxによるLuaの予期せぬ復活

Luaは、90年代初頭にサンバとサッカーの国(地理に疎い人のために言うと、それはブラジルです)で生まれ、かつてはゲーム開発者たちの寵児でした。その軽量さと埋め込みのしやすさから、ゲームのスクリプト言語として選ばれていました。しかし、年月が経つにつれ、新しくて魅力的な言語が注目を集め始めました。Luaは、忘れ去られたプログラミングブログの「何が起こったのか?」という記事でのみ思い出される運命にあるように思われました。 そこに登場したのがRobloxです。 Roblox: 意外なヒーロー 2006年、Robloxはピクセル化されたフェニックスのように登場し、子供たち(正直に言うと、大人もたくさん)に自分のゲームを作るプラットフォームを提供しました。そして、彼らがスクリプト言語として選んだのは何だったでしょうか?そう、Luaです。 なぜLuaだったのでしょうか?その理由を見てみましょう: * シンプルさ: Luaの構文は非常に簡単で、寝不足の開発者でも理解できます。 * 柔軟性: さまざまなプログラミングスタイルに対応できます。 * パフォーマンス:...

5日前
3 分で読む

マイクロサービスの混乱を制御する: QuarkusとMicroProfile LRAによる分散サガ

マイクロサービスアーキテクチャの隠れたヒーローである分散サガについてお話ししましょう。モノリスが過去のものとなった今、複数のサービス間でのトランザクション管理は本当に頭痛の種です。そこで登場するのが分散サガです。このパターンは、2フェーズコミットプロトコルを必要とせずに、サービス間のデータ整合性を維持するのに役立ちます。 これは、各サービスが自分のステップを知っていて、誰かがつまずいたときに優雅に回復する方法を知っている振り付けされたダンスのようなものです。それは、各自が自分のボールを空中に保つ責任を持つ熟練したジャグラーのチームを持っているようなものであり、仲間のジャグラーがボールを落としたときに助ける方法も知っています。 QuarkusとMicroProfile LRAの登場 さて、「なぜQuarkusとMicroProfile LRAなのか?」と思うかもしれません。それは、スポーツカーを選ぶ理由を聞くようなものです。Quarkusは超音速のサブアトミックJavaフレームワークであり、MicroProfile LRAと組み合わせることで、分散サガを簡単に実装する力を与えてく...

6日前
4 分で読む

リアクティブプログラミングの隠れたコスト: リアクティブストリームを使うべき時と避けるべき時

リアクティブプログラミングは強力なツールですが、落とし穴もあります。デバッグの悪夢から予期せぬリソースの消耗まで、リアクティブパラダイムを受け入れるべき時と避けるべき時を探ります。 リアクティブストリームの魅力 効率的で非ブロッキングなデータ処理を約束するリアクティブプログラミングは、現代のソフトウェア開発の寵児となっています。RxJava、Project Reactor、Akka Streamsのようなフレームワークは、バックプレッシャーの処理や非同期データフローの簡単な構成に開発者を魅了しています。 しかし、ベンおじさんが言ったように、「大いなる力には大いなる責任が伴う」(そしていくつかの頭痛も)。 ストリームの暗黒面 1. デバッグ:トワイライトゾーンへようこそ リアクティブストリームをデバッグしようとしたことはありますか?それは、目隠しをして油を塗った豚を捕まえようとするようなものです。非同期で非ブロッキングなコードを扱うとき、従来のデバッグ技術はしばしば役に立ちません。スタックトレースはオペレーターやスケジューラーの迷路となり、人生の選択を疑問視させます。...

6日前
3 分で読む

ステロイドを使用したマイクロサービス: LinuxでのTCPパフォーマンスのターボチャージ

TCPチューニングのタンゴ まずは、あまり知られていない2つのTCPオプションから始めましょう。それは、tcp_notsent_lowatとTCP_CORKです。これらは、TCP接続のパフォーマンスを最大限に引き出すための秘密のソースです。 tcp_notsent_lowat: 知られざるヒーロー tcp_notsent_lowatは、クラスで静かにしているけれど、テストではいつも高得点を取る子のようなものです。これは、カーネルがアプリケーションにバックプレッシャーをかけ始める前に蓄積できる未送信データの量を制御します。つまり、バッファの整理整頓を保つためのバウンサーのような役割を果たします。 設定方法は以下の通りです: sysctl -w net.ipv4.tcp_notsent_lowat=16384 これで下限値を16KBに設定します。しかし、ここで止まる必要はありません。ソケットオプションを使ってさらに工夫してみましょう:...

7日前
3 分で読む

分散型アイデンティティ管理: バックエンドに依存しないDIDシステムの構築

DIDが注目される理由とは? 分散型アイデンティティ(DID)は、単なる技術業界の流行語ではありません。私たちのデジタルアイデンティティの管理と制御方法におけるパラダイムシフトです。バックエンドに依存しないDIDシステムの構築に入る前に、なぜこれが注目されているのかを理解しましょう。 * 🔒 プライバシーの向上: どの情報を誰と共有するかを自分でコントロール * 🚫 中央集権的な障害点なし: 大規模なデータ漏洩にさよなら * 🌐 相互運用性: 異なるプラットフォームやサービスでアイデンティティが機能 * 🎭 仮名性: 異なるコンテキストで複数のアイデンティティを作成可能 バックエンドに依存しないDIDシステムの構築要素 興味を引かれたところで、技術的な詳細に入りましょう。「バックエンドに依存しない」というのが鍵です。私たちのシステムは、ブロックチェーンや分散型台帳、さらには従来のデータベースなど、さまざまな基盤技術と連携できるようにしたいのです。 1. DID解決 DIDシステムの基盤は、DIDをDIDドキュメントに解決する能力です。このプロセスは、特定...

7日前
4 分で読む

私たちのコミュニティに参加 👋

Suddo.jp — テクノロジーニュース、ITコース、チュートリアル、プログラミング のフルメンバーシップを解除し、限定コンテンツの広範なコレクションを探索してください。

今すぐサインアップ、いつでもキャンセル可能

プランを見る