上一文的代码 `HttpUtils.http(sevName, path)` （来自 "solon.net.httputils" 插件的工具类），内部是通过 sevName 获取对应服务负载均衡，并最终获取服务实例地址。内部接口调用：

```java
//根据服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get(sevName);

//根据分组和服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get(groupName, sevName);
```

负载均衡是 Rpc 开发和服务集群调用时，必不可少的元素。

### 1、了解负载均衡

内核层面提供了两个接口。插件中 “solon.net.httputils”，“nami” 都是使用它们对服务进行调用：

| 接口 | 说明 | 
| -------- | -------- |
| LoadBalance     | 负载均衡接口     | 
| LoadBalance.Factory     | 负载均衡工厂接口     |


要获取一个服务的实例地址，只需要使用（在定制开发时，可能用得着）：

```java
//开发时要注意不存在服务的可能
LoadBalance loadBalance = LoadBalance.get(sevName);
//输出的结果，例："http://12.0.1.2.3:8871" 、"ws://120.1.1.2:9871"（协议头://地址:端口）
String server = loadBalance.getServer();
```


### 2、负载均衡的能力实现


已有的实现方案是："solon.cloud" 插件的 CloudLoadBalanceFactory。实现是无感知的，且是动态更新了（一般是实时或延时几秒）。引入 [Solon Cloud Discovery](/article/369) 相关的组件，即可使用。

还可以根据需要，进行微略调整（一般没啥必要）:

```java
@Configuration
public class Config{
    @Bean
    public CloudLoadStrategy loadStrategy(){
        return new CloudLoadStrategyDefault(); //默认为轮询
        //return new CloudLoadStrategyIpHash(); //ip希哈
    }
}
```

更多的策略，可以自己定义。比如在 k8s 里直接使用 k8s sev 地址：

```java
//关于策略自定义，v2.2.6 后支持
@Component
public class CloudLoadStrategyImpl implements CloudLoadStrategy{
    @Override
    public String getServer(Discovery discovery){
        //即通过服务名，获取k8s的服务地址
        return K8sUtil.getServer(discovery.service());
    }
}
```

### 3、自定义负载均衡实现


* 基于内核接口 "LoadBalance.Factory" 实现（一般是没必要自己搞）

```java
//只是示意一下 //具体可以参考 CloudLoadBalanceFactory 实现
@Component
public class LoadBalanceFactoryImpl implements LoadBalance.Factory{
    @Override
    public LoadBalance create(String group, String service){
        if("local".equals(service)){
            return LoadBalanceImpl();
        }
    }
}

//只是示意一下 //具体可以参考 CloudLoadBalance 实现
public class LoadBalanceImpl implements LoadBalance{
    @Override
    public String getServer(){
        return "http://127.0.0.1:8080"
    }
}
```

* 基于 “Solon Cloud Discovery” 接口实现（适合服务多，且完全动态）

```java
//找一个 Solon Cloud Discovery 适配插件参考下
public class CloudDiscoveryServiceImpl implements CloudDiscoveryService{
    ...//接口，可以按需实现
}


CloudManager.register(new CloudDiscoveryServiceImpl());
```


