私の現在のプロジェクトでは、一部のLinuxボックスでAmazonのElastic Computing Cloudにアプリケーションをデプロイすることに決めました。グループ通信にはJGroupsを使用し、他のクラスタメンバーのアドレス(TCPPINGでは必要あり、TCPGOSSIPで必要な「並べ替え」)で各アプリケーションを事前に設定する必要はありませんでした。 UDPマルチキャストを使用することはできないため、オプションからのマルチキャスト検出は除外されます。EC2 JGroupsディスカバリー
S3 Pingプロトコルを使用しましたが、信頼性の問題があることを確認した後、独自のプロトコルを実行してこの発見を達成することにしました。
私が書いた簡単なプロトコルとS3 Pingとの比較方法についてのフィードバックを頂きたいと思います。現在のところ、AWS SDK for Javaに依存しています。
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;
}
}
必要であれば、私は自分のプロトコルスタック構成を含めることができますが、それはそれが私たちのEC2Pingプロトコルを使用して、代わりにマルチキャスト発見のものを除き、UDPと非常によく似ています。
私の主な質問
は次のとおりです。- S3のPingよりも、この存在より信頼性の高いソリューションをしていますか?
- AWS Java SDKへの依存性がこのソリューションの有用性を否定しますか? (JGroupsへの寄稿の面で)
すべてのコメントをいただければ幸いです。ありがとう