대규모 분포 식 시스템 구조 와 디자인 실전 노트 3
3378 단어 fourinone
fourinone 에서 지도 자 를 선택 하 는 것 은 paxos 알고리즘 처럼 선점 을 바탕 으로 하 는 소수 가 다수 에 복종 하 는 전략 을 실시 하 는 것 이 아니 라 양보 하 는 전략 이다. 상당 한 지도자 가 지도자 가 되 겠 다 는 신청 을 하기 전에 다른 사람 에 게 지도자 가 되 고 싶 은 지 물 어보 고 싶 으 면 자신 이 먼저 참 으 며 다른 사람 이 없 으 면 그 가 나 서 는 것 이다.이렇게 하면 충돌 을 피 할 수 있다.
지도자 가 확정 되면 지도자 가 통일 적 으로 명령 을 내 려 각 기 계 를 동기 화 시킨다.
지도 자 는 또 어떻게 각 기 계 를 동기 화 합 니까?fourione 프레임 워 크 는 파 크 를 통 해 정보 관 리 를 설정 하고 파 크 는 정 보 를 만 들 고 수정 하 는 방법 을 제공 하 며 윤 훈 과 감청 두 가지 방식 으로 변화 하 는 대상 을 얻 고 분포 식 시스템 설정 의 일치 성 을 향상 시 킵 니 다.
import com.fourinone.BeanContext;
import com.fourinone.ParkLocal;
import com.fourinone.ObjectBean;
public class GetConfigA
{
public static void main(String[] args)
{
ParkLocal pl=BeanContext.getPark();
ObjectBean oldob=null;
while(true)
{
ObjectBean newob=pl.getLastest("zhejiang","hangzhou",oldob);
if(newob!=null)
{
System.out.println(newob);
oldob=newob;
}
}
}
}
import com.fourinone.BeanContext;
import com.fourinone.ParkLocal;
import com.fourinone.LastestListener;
import com.fourinone.LastestEvent;
import com.fourinone.ObjectBean;
public class GetConfigB implements LastestListener
{
public boolean happenLastest(LastestEvent le)
{
ObjectBean ob = (ObjectBean)le.getSource();
System.out.println(ob);
return false;
}
public static void main(String[] args)
{
ParkLocal pl = BeanContext.getPark();
pl.addLastestListener("zhejiang", "hangzhou", null, new GetConfigB());
}
}
import com.fourinone.*;
public class SetConfig
{
public static void main(String[] args)
{
ParkLocal pl = BeanContext.getPark();
ObjectBean xihu = pl.create("zhejiang", "hangzhou", "xihu",AuthPolicy.OP_ALL);
try{Thread.sleep(8000);}catch(Exception e){}
ObjectBean yuhang = pl.update("zhejiang", "hangzhou","xihu");
}
}
이 를 통 해 알 수 있 듯 이 응용 프로그램 은 Park Local 에서 만 변경 하면 다른 기 계 는 이런 변 화 를 감지 하여 전체 분포 식 시스템 을 일치 시 킬 수 있다.
이 동시에 fourinone 은 지연 을 처리 하 는 상황 을 제공 했다.
import com.fourinone.BeanContext;
public class ParkMasterSlave
{
public static void main(String[] args)
{
String[][] master = new String[][]{{"localhost","1888"},{"localhost","1889"}};
String[][] slave = new String[][]{{"localhost","1889"},{"localhost","1888"}};
String[][] server = null;
if(args[0].equals("M"))
server = master;
else if(args[0].equals("S"))
server = slave;
BeanContext.startPark(server[0][0],Integer.parseInt(server[0][1]), server);
}
}
한 명의 지도자 와 여러 명의 예비 지도 자 를 가동 시 키 기만 하면 된다. 지도자 가 지연 되면 예비 지도자 가 정상에 오 를 것 이다.