DotNetMultiServerUploadマルチファイルアップロード、マルチサーババックアッププログラム


GIT管理アドレスDotNetMultiServerUpload

DotNetMultiServerUpload


概要


このプログラムは画像アップロードプログラムで、windows IISが必要です.Net運転環境
windows server 2008 r2
.net framework 4.5
iis 7.5
マルチピクチャアップロード、マルチサーババックアップをサポート

シーンの操作


画像サーバーには数十GBの画像があります
サーバには多くの不安定な要因があり、
次のようになります.
ハードディスク(HDD)が壊れる
機械室の電源が切れる
ホワイトリストが失われます
……
このような場合にサーバを移行するのは困難です
これらの問題は、画像サーバにアクセスできないという窮地を招く可能性があります.
ユーザー体験を向上させるためには、上記の問題を考慮して、画像をリアルタイムでバックアップする必要があります.
DotNetMultiServerUploadは、これらの問題を解決するために誕生したものです.

使用方法の説明


必要なハードウェア環境
  • ピクチャサーバ(マスター)
  • 画像バックアップサーバ
  • 両サーバーはwindows 2008 r 2 iisである.Netframework 4.5環境
  • 導入環境
    【第一歩】
    プライマリ・サーバとバックアップ・サーバにそれぞれ1つのサイトを作成
    ドメイン名i-1をバインドする.xx.comはサイトをi-1と命名する.xx.com(必要に応じて自分のドメイン名をバインド)
    同時にプライマリサーバサイトi-1において.xx.comにドメイン名s 1をもう1つバインドする.i-1.xx.com
    バックアップサーバサイトi-1.xx.comにドメイン名s 2をもう1つバインドする.i-1.xx.com
    ドメイン名管理システムでドメイン名を対応サーバに解析する
    s1.i-1.xx.comはプライマリサーバs 2にバインドする.i-1.xx.comはバックアップサーバi-1にバインドする.xx.comをプライマリサーバにバインド
    プライマリ・サーバに障害が発生した場合は、ドメイン名(i-1.xx.com)をバックアップ・サーバに解析します.
    【ステップ2】
    2台のサーバサイトi-1にプログラムを配置する.xx.com以下、プロファイル/webを変更する.configと/servers.xml
    /web.config
    <?xml version="1.0"?>
    <!--
        ASP.NET  , 
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
      <appSettings>
    
        <!--    servers.xml-->
        <add key="ServerName" value="s1"/>
    
    
        <!-- -->
        <add key="Servers" value="/servers.xml"/>
    
        <!-- -->
        <add key="SecurityKey" value="asdfdsfsdf"/>
    
        <!-- -->
        <add key="Log" value="/log"/>
    
    
        <!-- -->
        <add key="Domain" value="http://i-2.xx.com"/>
      </appSettings>
      <!--
          .NET 4.5   web.config  ,  http://go.microsoft.com/fwlink/?LinkId=235367。
    
          <httpRuntime>  。
          <system.Web>
            <httpRuntime targetFramework="4.5" />
          </system.Web>
      -->
      <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true" targetFramework="4.5"/>
        <pages controlRenderingCompatibilityVersion="4.0"/>
      </system.web>
    </configuration>
    

    /servers.xml
    <?xml version="1.0" encoding="utf-8" ?>
    
    <Servers>
      <!-- 1-->
      <Server Name="s1" Uri="http://s1.i-2.upload.xx.com/do.ashx" SecurityKey="asdfdsfsdf" />
    
      <!-- 2-->
      <Server Name="s2" Uri="http://s2.i-2.upload.xx.com/do.ashx" SecurityKey="asdfdsfsdf" />
    </Servers>
    

    プログラムの説明


    プログラム全体をいくつかの部分に分ける
  • バックグラウンドマルチマップアップロードプログラム/.m/upload.aspx
  • コアプログラム/do.ashx

  • プログラムを配備したら、アドレスを通じてhttp://i-1.xx.com/.m/upload.aspx画像をアップロード
    またはhttp://s1.i-1.xx.com/.m/upload.aspx画像またはhttp://s2.i-1.xx.com/.m/upload.aspx画像をアップロード
    どのアドレスを使用しても、プログラムは自動的に画像を別のサーバに同期します.
    もちろん、他のサーバを統合同期する際にも、ネットワークの問題やサーバの問題が発生し、同期に失敗する可能性があります.
    この場合DotNetMultiServerUploadは、上記のような問題が発生して同期に失敗した場合、
    プログラムはログファイルを作成し、アップロードに失敗したファイル情報とサーバ情報を記録します.
    サーバ側で計画タスクを作成し、定期的にエラーを処理できます.
    この2つのアドレスを定期的に実行すると、アップロードに失敗したファイルを他のサーバに再同期できます.
    http://s1.i-1.xx.com/do.ashx?action=uploaderrors&SecurityKey=asdfdsfsdf
    http://s2.i-1.xx.com/do.ashx?action=uploaderrors&SecurityKey=asdfdsfsdf

    サードパーティプログラムインタフェース


    アップロードは/.m/upload.aspxアップロード
    他のバックグラウンドにアクセスすることもできます
    画像をアップロードするだけで
    http://i-1.xx.com/do.ashx?action=upload&SecurityKey=asdfdsfsdf
    すぐ
    C#コード実装の場合:
        string SecurityKey = "asdfdsfsdf";
        string format = "xml"; //or json 
    
        WebClient wc = new WebClient();
        byte[] data = wc.UploadFile("http://i-1.xx.com/do.ashx?action=upload&format=" + format + "&SecurityKey=" + SecurityKey, @"D:\xx.jpg");
        wc.Dispose();
    
        string xml = System.Text.Encoding.GetEncoding("utf-8").GetString(data);
        /*
         :
        XML:
        <resp>
        <success>1</success>
        <link>http://i-1.xx.com/2014/4/15/5310bcaf-0f8a-45c5-9a61-9bf45b5e09c1.jpg</link>
        </resp>
    
    
        JSON:   
        {"resp":{"success":1,"link":"http://i-1.xx.com/2014/4/15/5310bcaf-0f8a-45c5-9a61-9bf45b5e09c1.jpg"}}         
        */