Istio 架构扩展机制
任何一个系统,随着使用场景和使用方式的不断变化,随时会面对很多新的挑战。为了应对这些挑战,需要保证在内核基本稳定的前提下建立一套完善的插件机制,插件使用者可以使用自定义的方式进行扩展,并且不影响系统基本架构的稳定性。
Istio 作为支撑微服务通信的基础设施,对扩展性有着非常高的要求,提供了多维度、多层次的插件扩展机制,大体汇总如下。
1)服务注册中心:服务管理上,可以提供自定义的服务注册中心支持。
2)通信协议:不仅支持常见的 HTTP 协议和 TCP 协议,也对各种用户自定义协议提供支持。
3)链路治理:不仅支持各种自定义的流量调度和流量管理,也可以支持用户以自定义的方式对请求进行加工处理。
4)遥测和统计:支持多种适配器,并且可轻松地增加新的自定义适配器。
Istio 通过各种不同形式的插件机制实现了强大的扩展性支持,插件从实现层面看其实很简单,本质上是一个钩子回调函数,插件注册就是将钩子回调函数挂在插件机制上,在事件到来时,触发回调函数的调用。因此研究插件机制重点需要关注两点。
1)插件的抽象。抽象是架构师必备的一项基本能力,抽象就是从变化中提取不变的过程。通过研究经典的抽象过程,可以为后续设计自己的插件机制提供参考。
2)回调和通知的机制。
Istio 通过服务发现抽象接口进行服务发现基本能力的定义,服务发现抽象接口定义了一个注册中心以提供基本的能力,各注册中心只需要实现这个接口。插件回调和通知机制方面,服务注册中心提供了两个方向的回调触发。
1)将注册中心插件注册到 Istio 中,可以通过插件获得具体的服务发现能力;
2)插件会提供服务变更抽象接口,Istio 反向向插件中注册用于通知的回调函数,当注册中心发生变更时,插件会调用预注册的 Istio 回调函数。
架构固然有很多通用的设计思想和原则,但很多架构设计原则本身就是一对矛盾体,比如分布式系统的 CAP、性能和效率等,同时满足所有的设计要求是不可能的,需要针对具体的场景,进行一定的折中和取舍。
架构设计就是个权衡的过程,在无法满足所有需求的情况下,不需要同等对待所有的需求,架构设计的本质是取舍,即发现业务的根本需求,权衡哪些需求才是你真正关注的,哪些需求是当前可以舍弃的。同时也要认识到根本需求也不是一成不变的,随着时间和业务的变化,根本需求也可能会发生变化。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/b4a3171c4b195d7a7e2fc141a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论