大規模な分散システムアーキテクチャと設計実戦ノート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はロックを取得し、一度に類推される.
最終的には、すべての分散アプリケーションが実行されます.
コードを見てみましょう.
各分散アプリケーションは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]);
}
}