全部产品
云市场

VPC高速直连调用

更新时间:2019-12-10 14:18:58

VPC高速直连调用方式前提

  1. 仅支持部署在专属资源组中的服务,专属资源组创建查看资源组使用介绍
  2. 部署服务前,专属资源组需要先和用户VPC进行打通,具体原理及使用步骤请查看资源组开通VPC高速直连

调用方式

Python SDK

EAS目前提供了python sdk用于进行服务访问,python sdk中集成了通过vpc直连的方式进行访问的接口。

安装python sdk

  1. pip install -U eas-prediction

使用示例

  1. #!/usr/bin/env python
  2. from eas_prediction import PredictClient
  3. from eas_prediction import StringRequest
  4. from eas_prediction import TFRequest
  5. from eas_prediction import ENDPOINT_TYPE_DIRECT
  6. if __name__ == '__main__':
  7. client = PredictClient('http://pai-eas-vpc.cn-shanghai.aliyuncs.com', 'mnist_saved_model_example')
  8. client.set_token('M2FhNjJlZDBmMzBmMzE4NjFiNzZhMmUxY2IxZjkyMDczNzAzYjFiMw==')
  9. client.set_endpoint_type(ENDPOINT_TYPE_DIRECT) # 表示通过直连通道来访问服务
  10. client.init()
  11. #request = StringRequest('[{}]')
  12. req = TFRequest('predict_images')
  13. req.add_feed('images', [1, 784], TFRequest.DT_FLOAT, [1] * 784)
  14. for x in range(0, 1000000):
  15. resp = client.predict(req)
  16. print(resp)

其它语言

目前仅提供了Python版本的SDK,其它语言版本会陆续开放,敬请期待。用户可以按照下面的方法自己来实现直连访问的功能。

上面已经提到EAS提供了服务发现的机制,在VPC环境中通过如下的地址即可获取用户服务的后端地址列表:

区域 地址
上海 http://pai-eas-vpc.cn-shanghai.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/
北京 http://pai-eas-vpc.cn-beijing.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/
杭州 http://pai-eas-vpc.cn-hangzhou.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/

如访问杭州的名为mnist_saved_model_example的服务,该服务有两个instance:

  1. $curl http://pai-eas-vpc.cn-shanghai.aliyuncs.com/exported/apis/eas.alibaba-inc.k8s.io/v1/upstreams/mnist_saved_model_example

得到如下结果:

  1. {
  2. "correlative": [
  3. "mnist_saved_model_example"
  4. ],
  5. "endpoints": {
  6. "items": [
  7. {
  8. "app": "mnist-saved-model-example",
  9. "ip": "172.16.0.22",
  10. "port": 50000,
  11. "weight": 100
  12. },
  13. {
  14. "app": "mnist-saved-model-example",
  15. "ip": "172.16.0.23",
  16. "port": 50000,
  17. "weight": 100
  18. }
  19. ]
  20. }
  21. }

如上所示,客户端可获取该服务后端对应的两个instance的ip,port,weight信息,可实现一个weighted round robin 算法来在每次调用前获取一个instance,并对其进行直连访问。注意:endpoint list需要在后台定期从服务端同步后cache在本地,每次请求前从cache中根据wrr算法随机拿一个instance进行访问,千万不要每次请求前同步地从服务端获取这个list,性能会有非常大的损耗。

由于服务更新时或节点异常发生failover时,部分instance可能不可用,在检测到请求失败时,客户端需要进行自动重试,以避免健康检查失败的instance在从instance list中移除的延时过程中被访问到,造成服务质量下降。