Thursday, January 15, 2015

[メモ] TCP上(もしくはHTTP)にリトライ可能なアプリケーションプロトコルを実現する方法

HTTP/1.1の持続的接続においては、サーバがリクエストを受け取ったあとに異常終了したのか、リクエストを受け取らずに接続を閉じたのか判別することができない。このため、べき等性の保証がないアプリケーションにおいて、リトライを行うべきか否か自動的に判断できなくなる場合がしばしば発生する

リトライ可能か否か(ピアがメッセージの処理を開始した否か)を判別するには、より細かな情報交換を行う別種のプロトコルを採用しても良いが、複雑なプトロコルはパフォーマンスに悪影響を及ぼす可能性が高いので避けたいところである。

というわけで、以下本題。

pipeliningを行わないHTTP/1.1のような単純なリクエスト/レスポンス型プロトコルをそのままに、アプリケーションレイヤへのリクエスト到達可否を判定する手軽な方法としては、SO_LINGERを用いる方法がある。具体的には、以下のような形式でサーバを実装する。
while (1) {
  receive_request();
  use_RST_for_close(); // SO_LINGERを使い、RSTで切断するよう設定
  handle_request();
  send_response();
  use_graceful_close(); // SO_LINGERを使い、graceful closeを行うよう設定
}
クライアントサイドでは、リクエスト送信後にEPIPE(write(2)の場合)かECONNRESET(read(2)の場合)を受け取った場合のみ、リクエストを再送すればよい。

別解としては、サーバが接続を切断する際に「HTTP/1.1 599 Going Away」のようなレスポンスを(たとえリクエストを受信していなくとも)送信するという方法が考えられる(この場合はlingering closeを行わない)。クライアントは、サーバからこのレスポンスを受信した場合のみ、リクエスト再送を行えば良い。

追記: H2Oでは後者の方式をサポートしようかと考えている。そうすれば「Docker と SO_REUSEPORT を組み合わせてコンテナのHot Deployにチャレンジ - blog.nomadscafe.jp」で挙げられているようなデプロイ手法において、(例示されている常にリトライする方法とは異なり)安全なホットデプロイが実現可能になる。

注: パイプライン処理については行わない前提で考える

12 comments:

  1. Thank you for another fantastic posting. Where else could anyone get that kind of information in such a perfect way of writing? I have a speech next week, and I was looking for more info.
    FRIV 2 | Juegos Friv | Friv 2 Planet | Play Friv 2 Games
    Juegos Friv - La Mejor Colección de Juegosfrivol
    Friv 4 Games - Friv 400 School for Kids

    ReplyDelete
  2. http://emcmee.jimdo.com/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A8%D8%A7%D9%84%D8%B1%D9%8A%D8%A7%D8%B6/ شركة نقل عفش بالرياض
    http://emcmee.jimdo.com/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%A8%D8%A7%D9%84%D8%B7%D8%A7%D8%A6%D9%81/ شركة نقل عفش بالطائف
    http://emcmee.jimdo.com/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%A8%D8%A7%D9%84%D8%AF%D9%85%D8%A7%D9%85/ شركة نقل عفش بالدمام
    http://emcmee.jimdo.com/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%A7%D8%AB%D8%A7%D8%AB-%D8%A8%D8%AC%D8%AF%D8%A9/ شركة نقل عفش بجدة
    http://emcmee.jimdo.com/%D8%B4%D8%B1%D9%83%D8%A9-%D9%86%D9%82%D9%84-%D8%B9%D9%81%D8%B4-%D8%A8%D8%A7%D9%84%D9%85%D8%AF%D9%8A%D9%86%D8%A9-%D8%A7%D9%84%D9%85%D9%86%D9%88%D8%B1%D8%A9/ شركة نقل عفش بالمدينة المنورة

    ReplyDelete

  3. شركة نقل عفش
    اهم شركات مكافحة حشرات بالخبر كذلك معرض اهم شركة مكافحة حشرات بالدمام والخبر والجبيل والخبر والاحساء والقطيف كذلك شركة رش حشرات بالدمام ومكافحة الحشرات بالخبر
    شركة مكافحة حشرات بالدمام
    شركة تنظيف خزانات بجدة الجوهرة من افضل شركات تنظيف الخزانات بجدة حيث ان تنظيف خزانات بجدة يحتاج الى مهارة فى كيفية غسيل وتنظيف الخزانات الكبيرة والصغيرة بجدة على ايدى متخصصين فى تنظيف الخزانات بجدة
    شركة تنظيف خزانات بجدة
    شركة كشف تسربات المياه بالدمام
    شركة نقل عفش واثاث

    ReplyDelete


  4. Babel account & manag contracting companies
    The program includes 12 specialized systems in contracting field and providing explanation library of 145 videos with total of 6 hours of explanation
    and providing more than 200 questions in the field of contracting and group of essays which serve contracting companies
    babelsoftco
    مكونات الخرسانة الجاهزة
    ادارة ومراقبه المستخلصات
    برنامج ادارة المستخلصات
    برنامج ادارة المستخلصات وخطابات الضمان
    برنامج مستخلصات
    ادارة مستخلصات اصحاب الاعمال
    برنامج خطابات ضمان
    ادارة خطابات الضمان
    انواع خطابات الضمان
    شرح خطابات الضمان
    برنامج اعمال ادارية
    منظومة الاعمال الادارية
    برنامج اعمال ادارية لشركة مقاولات
    برنامج حسابات لشركة مقاولات
    برنامج محاسبة
    برنامج حسابات مقاولات
    برامج محاسبة
    برنامج الحسابات العامة
    الحسابات العامة
    برنامج ادارة شركات المقاولات
    برامج محاسبة شركات المقاولات
    برنامج محاسبة مقاولات
    برنامج مقاولات
    برنامج الحسابات العامة
    برنامج ادارة العقارات
    برنامج محاسبة مقاولات
    برنامج ادارة شركات المقاولات
    برنامج محاسبة شركات المقاولات
    برنامج بابل للمقاولات
    برنامج محاسبة مقاولات
    المعالجه المحاسبية لضريبة القيمة المضافه

    ReplyDelete
  5. Babel accounting and managing contracting companies Software is the first in the Middle East according to its spreading among contracting companies and clients in the Middle east and the world soon,,,,,,
    I recommenda Babel Software
    ادارة ومحاسبة شركات المقاولات
    برنامج الحسابات العامة
    برنامج ادارة شركات المقاولات
    ادارة ومحاسبة شركات المقاولات
    ادارة شركات الاستثمار العقارى
    برنامج محاسبة مقاولات
    برنامج شركات مقاولات
    برنامج مقاولات
    برنامج مراقبه مخازن
    برنامج مراقبة مخازن
    ادارة ومراقبه المخازن
    ادارة ومراقبة المخازن
    منظومة مراقبه المخازن
    برنامج ادارة ومراقبه المخازن
    برنامج ادارة المخازن
    برنامج مخازن
    برنامج ادارة المشتريات
    برنامج استثمار عقارى
    منظومة الاسيتثمار العقارى
    ادارة التسويق العقاري
    ادارة الاستثمار العقاري
    برنامج محاسبة شركات المقاولات
    المعالجة المحاسبية للاستثمار العقاري
    ادارة التسويق والاستثمار العقاري
    برنامج محاسبة شركات المقاولات
    برنامج استثمار عقارى
    المعالجة المحاسبية للاستثمار العقاري
    برنامج مصنع خرسانة جاهزة
    برنامج ادارة مصانع الخرسانة
    برنامج ادارة مصانع الخرسانة الجاهزة
    منظومة ادارة الانتاج
    برنامج ادارة محطات الخرسانة
    شركات الخرسانة الجاهزة

    ReplyDelete
  6. This is very interesting, You’re a very skilled blogger. I have joined your feed and look forward to seeking more of your fantastic post. Also, I have shared your web site in my social networks!
    Regards - www.office.com/setup
    www.office.com/setup

    ReplyDelete
  7. Pet Probiotic Probiotics for dogs Probiotics for cats Does your pet have diarrhea; stinky gas or bad breath Get effective relief with Pet Flora Probiotic Advanced Probiotics for Dogs Cats helps Skin Allergies

    ReplyDelete