文章插图
图片
11 测试微服务架构下,测试分为三个层次:
- 端到端测试:覆盖整个系统 , 一般在用户界面机型测试 。
- 服务测试:针对服务接口进行测试 。
- 单元测试:针对代码单元进行测试 。
三种测试从上到下实施的容易程度递增,但是测试效果递减 。端到端测试最费时费力,但是通过测试后我们对系统最有信心 。单元测试最容易实施,效率也最高,但是测试后不能保证整个系统没有问题 。
文章插图
图片
由于端到端测试实施难度较大,一般只对核心功能做端到端测试 。一旦端到端测试失败,则需要将其分解到单元测试:则分析失败原因,然后编写单元测试来重现这个问题,这样未来我们便可以更快地捕获同样的错误 。
服务测试的难度在于服务会经常依赖一些其他服务 。这个问题可以通过Mock Server解决:
文章插图
图片
单元测试大家都很熟悉了 。我们一般会编写大量的单元测试(包括回归测试)尽量覆盖所有代码 。
12 微服务框架指标接口、链路跟踪注入、日志引流、服务注册发现、路由规则等组件以及熔断、限流等功能都需要在应用服务上添加一些对接代码 。如果让每个应用服务自己实现是非常耗时耗力的 。基于DRY的原则 , 小明开发了一套微服务框架,将与各个组件对接的代码和另外一些公共代码抽离到框架中,所有的应用服务都统一使用这套框架进行开发 。
使用微服务框架可以实现很多自定义的功能 。甚至可以将程序调用堆栈信息注入到链路跟踪 , 实现代码级别的链路跟踪 。或者输出线程池、连接池的状态信息,实时监控服务底层状态 。
使用统一的微服务框架有一个比较严重的问题:框架更新成本很高 。每次框架升级,都需要所有应用服务配合升级 。当然,一般会使用兼容方案,留出一段并行时间等待所有应用服务升级 。但是如果应用服务非常多时 , 升级时间可能会非常漫长 。并且有一些很稳定几乎不更新的应用服务,其负责人可能会拒绝升级……因此 , 使用统一微服务框架需要完善的版本管理方法和开发管理规范 。
13 另一条路 - Service Mesh另一种抽象公共代码的方法是直接将这些代码抽象到一个反向代理组件 。每个服务都额外部署这个代理组件,所有出站入站的流量都通过该组件进行处理和转发 。这个组件被称为Sidecar 。
Sidecar不会产生额外网络成本 。Sidecar会和微服务节点部署在同一台主机上并且共用相同的虚拟网卡 。所以sidecar和微服务节点的通信实际上都只是通过内存拷贝实现的 。
文章插图
图片来自:Pattern: Service Mesh
Sidecar只负责网络通信 。还需要有个组件来统一管理所有sidecar的配置 。在Service Mesh中 , 负责网络通信的部分叫数据平面(data plane),负责配置管理的部分叫控制平面(control plane) 。数据平面和控制平面构成了Service Mesh的基本架构 。
文章插图
图片来自:Pattern: Service Mesh
Sevice Mesh相比于微服务框架的优点在于它不侵入代码 , 升级和维护更方便 。它经常被诟病的则是性能问题 。即使回环网络不会产生实际的网络请求,但仍然有内存拷贝的额外成本 。另外有一些集中式的流量处理也会影响性能 。
14 结束、也是开始微服务不是架构演变的终点 。往细走还有Serverless、FaaS等方向 。另一方面也有人在唱合久必分分久必合,重新发现单体架构……
【一文搞懂微服务架构演进】
推荐阅读
- 如何实现微服务全链路灰度发布?
- 一文读懂常见的缓存策略
- 微信上,几乎不发朋友圈的男人,并不是低调,多半是这种人
- 微信昵称后面“小耳朵”是干什么用的?我也是刚知道,真的很实用
- 苹果手机微信语音无声音解决攻略
- 微信进一步规范“自媒体”:准确标注信息来源
- 苹果手机微信怎么设置拍一拍名字和文字 苹果手机微信怎么设置拍一拍名字
- 微信憨笑表情包什么意思 微信憨笑表情是啥意思
- 不锈钢可以放微波炉吗 不锈钢饭盒可以放微波炉吗
- 微波炉可以用的容器 微波炉可以用的容器有哪些