JCM is a distributed name service (cluster map manager)
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
dist
doc
jcm.model
jcm.server
jcm.subscriber
test/beanchmark
.gitignore
HISTORY.md
README.md
pom.xml

README.md

JCM

JCM is a distributed name service implementation based on ZooKeeper.

FEATURE

  • manage more than hundred thousand nodes (ip)
  • map cluster name to node(ip) list
  • health checking on every node
  • persistent storage cluster list into zookeeper
  • totally distributed, read and write every JCM server
  • HTTP api based on JSON

Run

  1. start zookeeper first (standalone or distributed)

  2. start JCM server

     java -jar jcm.server-0.1.0.jar
    
  3. add some clusters with nodes to JCM with HTTP api

     curl -i -X POST http://10.181.97.106:8080/c -H "Content-Type:application/json" --data-binary @./doc/cluster_sample.json
    
  4. use jcm.subscriber to subscribe clusters, to get nodes from JCM server

Subscriber Usage

Subscriber is a library used in client side.

Subscriber subscriber = new Subscriber( Arrays.asList("127.0.0.1:8080"),
    Arrays.asList("hello9", "hello"));
RRAllocator rr = new RRAllocator();
subscriber.addListener(rr);
subscriber.startup();
for (int i = 0; i < 2; ++i) {
  System.out.println(rr.alloc("hello9", ProtoType.HTTP));
}
subscriber.shutdown();

see more examples jcm.subscriber/src/test

HTTP API Reference

See doc/api.md

Compile

mvn package -Dmaven.test.skip=true

If run with tests, startup zookeeper first

Implementation Brief

Architecture overview:

simple-arch.jpg

Module overview:

impl-module.jpg

LICENSE

/*******************************************************************************
 *  Copyright Kevin Lynx (kevinlynx@gmail.com) 2015
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 *******************************************************************************/