服务网格实现Istio
服务网格是微服务架构的一个概念,用于管理网格服务的流量。Istio作为一个ServiceMesh的实现,在github上是一个关注度挺高的开源项目。截至编写本文前,istio的最新版是0.7.1版,框架本身还未完全成熟,但投入简单使用还是可以的,就现有功能来说还是挺丰富的。以下是对于网格的一些简单及主要功能的介绍,istio的快速使用可以访问Istio官网,根据文档指引使用。
路由请求
- 请求头匹配;
- 根据权重将流量导向到对应版本;
- 支持服务到服务粒度的流量控制;
- 支持流量复制;
- 进出口流量全控制;
- 可设置调用超时时间及重试次数;
服务熔断&故障注入
服务熔断提供给网格内服务一定的保护措施,如最大连接数、单连接最大请求数等,在了解服务本身的处理能力下设置可避免服务过载,进而将这种过载带到请求链上的其他服务,提高了服务的弹性和可用性。
故障注入通过对请求链上的某一服务调用注入超时故障(可设置流量比例及超时时间)或 请求失败故障(可设置流量比例及状态码),可用于测试服务整体的弹性。
集成监控&服务跟踪
服务跟踪:可集成Zipkin或Jaeger做服务跟踪,用于了解请求链上各服务间调用的耗时,帮助统计找到性能瓶颈,提升整体可用性。
监控:prometheus + grafana 的组合可以监控到ServiceMesh内系统资源间的消耗及服务的调用情况(QPS及调用成功率等)。
不足
https访问外部协议支持不友好
在网格内的https访问外部服务,URL都要改成http协议加上端口号,再设置路由规则,在网格处将请求转换为https,对于一些调用类库的服务,且该类库内部调用https外部服务,由于是已编译好的,因此修改成本较大。
稳定性还不足
按照文档指引,在k8s集群上跑Istio Demo时有发生过集群中某一节点网络连接问题,问题是在安装Istio后一段时间后出现的,删除Istio后网络连接还是存在问题,最后运维大佬一顿排查,还是定位不到具体原因(大概率是iptable设置的规则有问题),个人认为可能和istio-proxy的有关系,另外在安装网格时有时会报错,卸载了装回来又不会报错(?搞不懂😳)。
总结
就Istio当前的对流量的控制能力,及与其他优秀的解决方案的整合来看,该SeviceMesh实现还是功能还是很强大的,但同时应该注意其目前该ServiceMesh还处于一个迭代很快的开发阶段,目前还没看到一个非常正式的发行版本,截至编写该文,Istio最新的版本号为0.7.1。现在还未看到一个应用Istio到生产环境中的成熟产品或者一个明确的应用场景,功能本身很丰富,但具体使用起来还是需要结合需求找到合适的着力点(或者说一个舒服的姿势?)。