클러스터 서버 정보 수집 및 할당 서비스 Beetle.Tracker
성능 지표
서비스 설계의 성능 지표는 한 대의 서버가 50K/초의 자원 분배 임무를 맡을 수 있다는 것이다.
확장성
서비스 통신 인터페이스의 방식으로 응용을 마운트하고 응용의 수요에 따라 상응하는 규칙을 실현하고 서비스에 설정하면 사용할 수 있다.사용자 정의 규칙에는 주로 다음과 같은 인터페이스가 있습니다.
public interface IProperties
{
void FromHeaders(IDictionary header);
IDictionary ToHeaders();
}
실현 용례
public class TestProperties:Beetle.Tracker.Properties
{
public string Group
{
get
{
return this["GROUP"];
}
set
{
this["GROUP"] = value;
}
}
public string Host
{
get
{
return this["HOST"];
}
set
{
this["HOST"] = value;
}
}
public string Port
{
get
{
return this["PORT"];
}
set
{
this["PORT"] = value;
}
}
public string Node
{
get
{
return this["NODE"];
}
set
{
this["NODE"] = value;
}
}
}
public interface IInfoFormater
{
object FromString(Type type,string value);
string ToStringValue(object obj);
}
실현 용례
public interface IAppTrackerHandler
{
IInfoFormater Formater
{
get;
set;
}
AppHost GetHost(IProperties properties);
IProperties Register(IProperties properties);
TrackerInfo GetInfo(IProperties properties);
}
public interface IAppTrackerHandler
{
IInfoFormater Formater
{
get;
set;
}
AppHost GetHost(IProperties properties);
IProperties Register(IProperties properties);
TrackerInfo GetInfo(IProperties properties);
}
실현 용례
public class TestTackerHandler :MarshalByRefObject, Beetle.Tracker.IAppTrackerHandler
{
public TestTackerHandler()
{
Formater = new TestFormater();
}
private long mCursorIndex = 0;
private List mGroups = new List();
public IInfoFormater Formater
{
get;
set;
}
public IProperties Register(IProperties properties)
{
lock (mGroups)
{
TestProperties tp = new TestProperties();
tp.FromHeaders(properties.ToHeaders());
Group group = mGroups.Find(e => e.Name == tp.Group);
if (group == null)
{
group = new Group();
group.Name = tp.Group;
group.Nodes = new List();
group.Nodes.Add(new Node { Name = tp.Node, Host = tp.Host, Port = tp.Port, LastTrackTime=DateTime.Now });
mGroups.Add(group);
}
else
{
Node node = group.Nodes.Find(n => n.Name== tp.Node );
if(node !=null)
node.LastTrackTime = DateTime.Now;
else
group.Nodes.Add(new Node { Name = tp.Node, Host = tp.Host, Port = tp.Port, LastTrackTime = DateTime.Now });
}
return new Properties();
}
}
public TrackerInfo GetInfo(IProperties properties)
{
TrackerInfo result = new TrackerInfo();
result.TypeName = "Beetle.Tracker.TestImpl.Group,Beetle.Tracker.TestImpl";
TestProperties tp = new TestProperties();
tp.FromHeaders(properties.ToHeaders());
Group group = mGroups.Find(e => e.Name == tp.Group);
if (group == null)
return null;
result.Data= Formater.ToStringValue(group);
return result;
}
public override object InitializeLifetimeService()
{
return null;
}
public AppHost GetHost(IProperties properties)
{
int g = 0;
while (g < mGroups.Count)
{
int i = 0;
Group group = mGroups[(int)(mCursorIndex % mGroups.Count)];
mCursorIndex++;
while (i < group.Nodes.Count)
{
Node node = group.Nodes[(int)(group.CursorIndex % group.Nodes.Count)];
group.CursorIndex++;
if ((DateTime.Now - node.LastTrackTime).TotalSeconds < 5)
return new AppHost { Host = node.Host, Port = int.Parse(node.Port) };
i++;
}
g++;
}
return null;
}
}
성능 테스트 결과
노트북 한 대를 서버 테스트로 사용합니다. 테스트 결과는 현재 서비스가 초당 2.5W/초의 서버 할당 요청을 불러올 수 있는 처리입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZooKeeper 클러스터 구성Zookeeper 기본 구성 항목: tickTime: CS 통신 심장박동 initLimit: LF 초기 통신 시한 syncLimit: LF 동기화 통신 시한 dataDir: 데이터 파일 디렉토리 dataLogDir:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.