随着Node.js、Go和Python等语言的快速发展,多语言微服务应用越来越多。EDAS能够通过服务网格支持部署多语言微服务应用,且提供应用托管和服务发现、链路追踪、负载均衡和应用监控等服务治理能力。本文通过一个示例介绍如何使用EDAS部署多语言微服务应用。
示例场景说明
示例应用BookInfo模仿在线书店的一个分类,显示一本书的信息。页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。
BookInfo是一个异构应用,几个微服务应用是由不同的语言编写的。这些服务构成了一个有代表性的服务网格的例子:由多个服务、多个语言构成,并且Reviews服务具有多个版本。

BookInfo应用包含四个单独的服务:
- Productpage:为Python服务,会调用Details和Reviews两个服务,用来生成页面。同时,Productpage还包含登录和登出功能。
- Details:为Ruby服务,包含了书籍的信息。
- Reviews:为Java服务,包含了书籍相关的评论,还会调用Ratings服务。Reviews包含3个版本:
- v1版本不会调用Ratings服务。
- v2版本会调用Ratings服务,并使用1到5个黑色星形图标来显示评分信息。
- v3版本会调用Ratings服务,并使用1到5个红色星形图标来显示评分信息。
- Ratings:为Node.js服务,包含了由书籍评价组成的评级信息。
操作流程
在K8s集群中部署应用,您需在容器服务Kubernetes版ACK(Container Service for Kubernetes)控制台中创建集群,并将该集群导入到EDAS控制台,然后在导入的K8s集群中使用自定义镜像来部署应用。

前提条件
您的阿里云账号已同时开通EDAS和容器服务Kubernetes版:
步骤一:创建容器服务Kubernetes集群
登录容器服务Kubernetes版控制台,创建容器服务Kubernetes集群。具体操作,请参见快速创建Kubernetes托管版集群。
如果创建ASK集群,专有网络请选择自动创建(选择已有网络,创建完毕后请查看集群资源是否包含VPC和交换机资源),服务发现请选择PrivateZone,以便ASK集群在导入EDAS后可以使用服务网格。

步骤二:为用户授予开通服务网格的操作权限
EDAS通过服务网格支持多语言应用,所以需要为用户授予开通服务网格ASM的操作权限。
步骤三:在EDAS控制台导入容器服务K8s集群
在EDAS控制台导入容器服务K8s集群时,会默认安装应用防护(限流降级)组件(ack-ahas-sentinel-pilot)、ARMS监控组件(ack-arms-pilot)以及Prometheus监控组件(ack-arms-prometheus)。
步骤四:添加链路追踪功能
EDAS控制台部署多语言应用采用的是基于Istio的服务网格链路追踪的监控方案。Istio代理虽能够自动发送Span信息,但应用程序仍然需要携带HTTP表头信息,以实现在发送Span信息时将Span信息正确地关联到单个跟踪中。
- x-request-id
- x-b3-traceid
- x-b3-spanid
- x-b3-parentspanid
- x-b3-sampled
- x-b3-flags
- x-ot-span-context
此处仅介绍示例多语言应用中部分服务的应用程序中携带的HTTP表头信息。
def getForwardHeaders(request):
headers = {}
# x-b3-*** headers can be populated using the opentracing span
span = get_current_span()
carrier = {}
tracer.inject(
span_context=span.context,
format=Format.HTTP_HEADERS,
carrier=carrier)
headers.update(carrier)
# ...
incoming_headers = ['x-request-id']
# ...
for ihdr in incoming_headers:
val = request.headers.get(ihdr)
if val is not None:
headers[ihdr] = val
return headers
@GET
@Path("/reviews/{productId}")
public Response bookReviewsById(@PathParam("productId") int productId,
@HeaderParam("end-user") String user,
@HeaderParam("x-request-id") String xreq,
@HeaderParam("x-b3-traceid") String xtraceid,
@HeaderParam("x-b3-spanid") String xspanid,
@HeaderParam("x-b3-parentspanid") String xparentspanid,
@HeaderParam("x-b3-sampled") String xsampled,
@HeaderParam("x-b3-flags") String xflags,
@HeaderParam("x-ot-span-context") String xotspan) {
if (ratings_enabled) {
JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);
步骤五:在容器服务K8s版集群中部署多语言应用
结果验证
服务部署完成后,访问主服务,页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。同时还能进行登录、登出操作。
应用监控
示例多语言应用部署完成后,您可以查看应用的健康状况关键指标,包括请求总量、平均响应时间等总体指标,应用所提供的服务、所依赖的服务的相关指标;以及CPU使用量、内存使用量等系统信息。
- 登录EDAS控制台。
- 在左侧导航栏中选择应用列表页面单击具体的应用名称。 ,在顶部菜单栏选择地域并在页面上方选择命名空间,然后在
- 查看应用的健康状况指标。
- 查看应用的系统使用量情况。
常见问题
怎么查看应用变更的出错日志?
EDAS多语言应用交流群
如果您在部署EDAS多语言微服务应用过程中有任何疑问或建议,请提交工单,或使用钉钉扫描下面的二维码或搜索钉钉群号23307994
加入钉钉群进行反馈。

在文档使用中是否遇到以下问题
更多建议
匿名提交