9
對於我目前的項目,我們決定在一些Linux機器上將我們的應用程序部署到Amazon的Elastic Computing Cloud。我們使用JGroups進行組通信,並且需要一個可靠的發現機制,不需要使用其他羣集成員的地址(這對TCPPING是必需的,並且需要使用TCPGOSSIP進行'排序')來預配置每個應用程序。由於我們不能使用UDP多播,因此不包括來自我們的選項的多播發現。EC2 JGroups發現
我們研究了使用S3 Ping協議,但在閱讀之後發現存在一些可靠性問題後,我們決定推出我們自己的協議來完成這一發現。
我很想獲得關於我們編寫的簡單協議以及它如何與S3 Ping進行比較的一些反饋。目前的限制是它依賴於適用於Java的AWS開發工具包。
public class EC2Ping extends Discovery {
private static final Logger log = LoggerFactory.getLogger(EC2Ping.class);
public static final short EC2_PING_PROTOCOL_ID = 1001;
private static final int DEFAULT_JGROUPS_PORT = 7800;
static {
ClassConfigurator.addProtocol(EC2_PING_PROTOCOL_ID, EC2Ping.class);
}
/** The JGroups port number */
private int port = DEFAULT_JGROUPS_PORT;
/** The EC2 client */
private AmazonEC2Client client;
/** The EC2 instance filters */
private List<Filter> filters;
public EC2Ping(EC2Ping src) {
this.client = src.client;
this.port = src.port;
}
public EC2Ping() {
// Default constructor
}
@Required
public void setClient(AmazonEC2Client client) {
this.client = client;
}
public void setFilters(List<Filter> filters) {
this.filters = filters;
}
public void setPort(int port) {
this.port = port;
}
public int getPort() {
return port;
}
@Override
public Collection<PhysicalAddress> fetchClusterMembers(String cluster_name) {
List<PhysicalAddress> addresses = new ArrayList<PhysicalAddress>();
DescribeInstancesRequest request = new DescribeInstancesRequest();
if (filters != null) {
request.setFilters(filters);
}
DescribeInstancesResult result = client.describeInstances(request);
for (Reservation res : result.getReservations()) {
for (Instance instance : res.getInstances()) {
String ipAddr = instance.getPrivateIpAddress();
IpAddress addr;
try {
addr = new IpAddress(ipAddr, port);
addresses.add(addr);
} catch (UnknownHostException uhe) {
log.error("Unable to resolve cluster member address [" + ipAddr + "]");
}
}
}
return addresses;
}
@Override
public boolean isDynamic() {
return true;
}
@Override
public boolean sendDiscoveryRequestsInParallel() {
return true;
}
}
我可以包括我的協議棧的配置,如果有必要,但它是非常相似的UDP除了代替多播發現,它使用了我們的EC2Ping協議。
我的主要問題如下:
- 是否比S3平安目前這個更可靠的解決方案嗎?
- 對AWS Java SDK的依賴性是否否定此解決方案的實用性? (在回饋給JGroups方面)
任何意見將不勝感激。謝謝