大規模な分散システムアーキテクチャと設計実戦ノート4

1764 ワード

複数の分散アプリケーションが同じ分散システムを使用したい場合,分散ロック機構を用いて解決した.Fourinoneフレームワークでは、分散ロックメカニズムの実現も簡単です.
各分散アプリケーションはfourinoneフレームワークにいくつかのノードを確立し、ノードのドメイン名は「lock」、ノード名は「アプリケーションの名前」、ノード値は「アプリケーションの名前」であり、例えば現在3つの分散アプリケーションa,b,c:fourinoneフレームワークに登録した後のlockドメインの場合は以下の通りである.
lock:
   a:a
   b:b
   c:c
各分散アプリケーションは、ノードが確立された後、lockドメインの最初のノードを絶えずポーリングし、ノードの値がアプリケーションの名前と同じであれば、分散ロック(すなわち、分散システムの使用権を取得)を取得し、使用が完了した後、現在のノードを削除する.
この手順によれば、a,b,cの3つのアプリケーションがポーリングされ、lockの最初のノード値がaであるため、aはロックを取得し、aの実行が完了すると、aノードは削除され、このとき、lockの最初のノードはbであるため、bはロックを取得し、一度に類推される.
最終的には、すべての分散アプリケーションが実行されます.
コードを見てみましょう.

import com.fourinone.*;
public class ParkServerDemo
{
  public static void main(String [] args)
  {
    BeanContext.startPark();
  }
}

import com.fourinone.*;
public class Demo
{
   public void lockutil(String appName)
   {
      ParkLocal pl=BeanContext.getPark();
      ObjectBean oldob=pl.create("lock",appName,appName);
      while(true)
      {
         String curob=(String)(pl.get("lock").get(0).toObject());
         if(curob.equals(appName))
         {
               System.out.println("get lock ,is doing...");
               try{Thread.sleep(8000);}
               catch(Exception e){}
               pl.delete("lock",appName);
               System.exit(0);
         }
         else System.out.print(".");
      }
    }
    public static void main(String [] args)
    {
      Demo d=new Demo();
      d.lockutil(args[0]);
    }
}