Kubernetes微服务实战
上QQ阅读APP看书,第一时间看更新

2.5 通过API公开服务

微服务通过网络彼此交互,有时也需要与外界交互。服务通常通过API公开其功能。我喜欢将API视为网络连接的接口。程序接口需要使用其编程语言的语法(例如,Go的接口类型)。现代网络API也会使用一些高级表示,不过基础都是UDP和TCP。微服务通常会通过Web传输协议公开其功能,例如HTTP(REST、GraphQL、SOAP)、HTTP/2(gRPC),或者WebSocket。有些服务可能会模拟其他有线协议,例如memcached,但这只在特殊情况下很有用。没有任何理由需要你直接在TCP/UDP上构建自己的自定义协议或使用一些专有的特定于语言的协议。除非需要支持某些旧代码库,否则最好不再使用Java RMI、.NET远程处理、DCOM和CORBA之类的方法。

微服务通常分为两类:

·内部微服务只能由在同一网络/集群中运行的其他微服务访问,并且这些服务可以公开专有的API,因为你能够同时控制服务端及其客户端(其他服务)。

·外部服务对外开放,通常需要从Web浏览器或使用不同语言的客户端访问。

使用标准网络API的好处是,它使用与编程语言无关的传输协议,可以实现微服务的多语言支持。每个服务都可以用自己的编程语言来实现(例如,一个服务通过Go实现,而另一个服务使用Python),甚至可以迁移到完全不同的语言(比如Rust)而不会受到干扰,因为所有这些服务都通过网络API访问。稍后我们将研究多语言方法及其使用场景。