6.1 微服务应用架构 |
|
在介绍服务部署前,先介绍整个微服务应用的架构,如图6-1所示。
图6-1 应用的微服务架构
其中,service-js服务是指由Vue/React实现的前端页面,当用户访问前端Web页面时,会看到一个静态页面,当用户点击相应的按钮时,前端页面会通过浏览器异步请求后端service-python服务提供的API接口,service-python调用后端其他服务完成用户的请求,并把结果合并处理之后发送给前端浏览器,当前端页面收到请求的响应数据时会渲染出新的页面呈现给用户。
service-go是基础层服务,不调用其他服务,直接返回结果数据。响应结果数据如下:
{ "message": "go v2" }
service-lua是中间层服务,不调用任何其他服务,直接返回结果数据。响应结果数据如下:
{ "message": "lua v1" }
service-node是中间层服务,调用底层服务service-go,整合数据响应。正常响应结果数据如下:
{ "message": "node v1", "upstream": [{ "message": "go v2", "response_time": "0.01" }] }
service-node调用底层服务异常时响应数据如下:
{ "message": "node v1", "upstream": [] }
service-python服务提供API接口给前端调用,调用中间层的service-node服务和service-lua服务,整合所有服务的数据,发送给前端API请求,正常响应数据如下:
{ "message": "python v2", "upstream": [{ "message": "lua v1", "response_time": 0.1 }, { "message": "node v2", "upstream": [{ "message": "go v1", "response_time": "0.01" }], "response_time": 0.1 }] }
service-python调用后端服务异常时响应数据如下:
{ "message": "python v1", "upstream": [] }
service-js服务在浏览器中异步调用后端service-python接口服务,在获取到响应数据后,会通过图表工具ECharts库在浏览器中绘制出本次服务调用链上的调用情况,包括调用成功了哪些服务,以及调用成功服务的响应时间。在绘制的服务调用情况图中(见图6-2),只会显示调用成功的服务,没有调用成功的服务不会展示在图中。后端的每个服务都分别有v1、v2两个版本,没有经过路由规则配置的时候,用户请求会以轮询的方式落到每一个版本上。在绘制的服务调用图中,会显示出本次调用的服务的版本,以便在后续的实验中更方便地观察路由配置有没有真正生效。
React版本所有服务调用成功如图6-2所示。
图6-2 React版本所有服务调用成功
React版本部分服务调用失败如图6-3所示。
图6-3 React版本部分服务调用失败
Vue版本所有服务调用成功如图6-4所示。
图6-4 Vue版本所有服务调用成功
Vue版本部分服务调用失败如图6-5所示。
图6-5 Vue版本部分服务调用失败
【实验前的准备】
进行本章实验前,需要先执行如下的前置步骤。
下载实验时用到的源码仓库:
$ sudo yum install -y git $ git clone https://github.com/mgxian/istio-lab Cloning into 'istio-lab'... remote: Enumerating objects: 247, done. remote: Counting objects: 100% (247/247), done. remote: Compressing objects: 100% (173/173), done. remote: Total 774 (delta 153), reused 164 (delta 73), pack-reused 527 Receiving objects: 100% (774/774), 283.00 KiB | 229.00 KiB/s, done. Resolving deltas: 100% (447/447), done. $ cd istio-lab