dga*_*son 9 java jgroups amazon-ec2 discovery
对于我目前的项目,我们决定在一些Linux机器上将我们的应用程序部署到亚马逊的Elastic Computing Cloud.我们使用JGroups进行组通信,并且需要一种可靠的发现机制,该机制不需要使用其他集群成员的地址预先配置每个应用程序(这对于TCPPING是必需的,并且TCPGOSSIP需要'排序').由于我们不能使用UDP多播,因此从我们的选项中排除了多播发现.
我们研究了使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要,我可以包括我的协议栈配置,但它与UDP非常相似,除了它使用我们的EC2Ping协议而不是多播发现.
我的主要问题如下:
任何评论将不胜感激.谢谢