Istio:一个用于微服务间通信的服务网格开源项目

  • Abel Avram
  • Rays

2017 年 5 月 30 日

话题:开源IBMGoogleDevOps语言 & 开发架构

Google、IBM 和 Lyft 开源了微服务管理、保护和监控框架Istio。Istio 为希腊语,意思是“启航”。

微服务简化了开发,它将创建复杂系统的任务切分为数十乃至上百个小服务,这些小服务易于被小型的软件工程师团队所理解和修改。但是微服务并未真正地消除复杂性,而是将复杂性迁移到对大量服务的连接、管理和监控上。其中涉及对上百个服务的管理、处理部署问题、版本控制、安全、故障转移、策略执行、遥测和监控等,实现它们并非易事。Istio 力图去解决这些问题。

按 Google 的提法,Istio 是“架构的一层,处于服务和网络间”,它“通常连同服务部署一起,统称为服务网络(Service Mesh)”。在Istio 网站上,详细解释了“服务网络”这一概念:

如果我们可以在架构中的服务和网络间透明地注入一层,那么该层将赋予操作人员对所需功能的控制,同时将开发人员从编码实现分布式系统问题中解放出来。通常将该统一的架构层与服务部署一起,统称为一个“服务网络”。由于微服务有助于分离各个特性团队(Feature Team),因此服务网络有助于将操作人员从应用特性开发和发布过程中分离出来。通过系统地注入代理到微服务间的网络路径中,Istio 将迥异的微服务转变成一个集成的服务网络。

Istio 可在任何云上或私有的环境中运行。虽然首个测试版(即 0.1 版)是运行于 Kubernetes 上的,但并非必须如此。Istio 的主要特性包括:

  • HTTP、gRPC 和 TCP 网络流量的自动负载均衡;
  • 提供了丰富的路由规则,实现细粒度的网络流量行为控制;
  • 流量加密、服务间认证,以及强身份声明;
  • 全范围(Fleet-wide)策略执行;
  • 深度遥测和报告。

Istio 的底层使用了Envoy。Envoy 是 Lyft 于去年九月份开源的一种服务代理和通信总线,已用于生产系统中,“管理了上万台虚拟机间的一百多个服务,每秒可处理近两百万次请求”。在近期的 GlueCon 2017 大会上,来自 IBM 的 Shriram Rajagopalan 和来自 Google 的 Louis Ryan 介绍了 Istio 的技术细节(PDF)。下图给出了系统的高层图解:

Envoy 实现了过滤和路由、服务发现、健康检查,提供了具有弹性的负载均衡。它在安全上支持 TLS,在通信方面支持 gRPC,支持 MongoDB 和 DynamoDB 分析器对数据库访问统计信息的采集,以及更多功能。Envoy 用 C++ 11 编写实现,并测试了使用 C++、Go、Java、PHP 和 Python 编写的微服务,也支持使用其它的语言。Istio 还实现了应用和网络的监控,可在PrometheusGrafana中查看。Istio 还可以集成Zipkin,对延迟问题进行诊断。

Istio 支持团队计划将其与Google Cloud EndpointsApigee集成。此外,Red Hat、Pivotal、Weaveworks、Tigera 和 Datawire 也有兴趣将自身的产品与 Istio 集成。在Istio 的路线图中,给出了未来将提供功能的更多细节。Istio 1.0 版计划于今年下半年发布。

查看英文原文:Istio: A Service Mesh for Microservices

开源IBMGoogleDevOps语言 & 开发架构