def METHOD_NAME(config,
                         ip_config,
                         server_id,
                         mode,
                         shard_num=1000,
                         port=8245):
    """
    Args:
        config: a yaml configure file for distributed graph service
        ip_config: list of IP address or a path of IP configuration file
            For example, the following TXT shows a 4-machine configuration:
                172.31.50.123:8245
                172.31.50.124:8245
                172.31.50.125:8245
                172.31.50.126:8245
        server_id: The graph server rank
        shard_num: The total sharding number for the graph. 
            Each server is responsible for part of shards.
        port: int, port number, default is 8245
    Return:
        A DistGraphClient for handling GraphServer 
    """
    if ip_config is not None:
        ip_addr = helper.load_ip_addr(ip_config)
        ip_addr = ip_addr.split(";")
    if mode == "mpi":
        try:
            from mpi4py import MPI
            fleet = Dist(MPI)
        except Exception as e:
            log.info(e)
            raise
        server_id = fleet.worker_index()
        if ip_config is None:
            local_ip_addr = ":".join([fleet.get_local_ip(), str(port)])
            ip_addr = fleet.allgather(local_ip_addr)
    server_num = len(ip_addr)
    if server_id == 0:
        args = (config, ip_addr, server_num, server_id, shard_num)
        process = multiprocessing.Process(target=start_client, args=args)
        process.start()
    graph_server = DistGraphServer(
        config, shard_num, ip_addr, server_id=server_id, is_block=False)
    while True:
        time.sleep(10)