替换 Spring Cloud,使用基于 Cloud Native 的服务治理
Spring Cloud 技术体系和基于 Kubernetes 的云原生技术体系有何区别与联系?如何借助 Kubernetes 与其周边的能力替换 Spring Cloud 体系构建微服务系统?本文将围绕这几个问题做详细介绍。
作者|夏岩,火山引擎高级研发工程师
-
在我刚开始工作的时候(2010 年以前),可能还没有云原生社区,当时 Java 体系是企业级开发的首选。 -
2010 年, Netflix 推出了 Move to Cloud 计划,将绝大部分的服务迁到了 AWS 上。 -
2012 年,Netflix 推出了 Open Source Software Center(开源软件中心仓库),类似于 Apache Maven,提供了一些在上云过程中沉淀下来的开源项目。 -
2014 年,Martin Fowler 发表了一篇非常知名的博客,名叫 Microservices ( https://martinfowler.com/articles/microservices.html ),把当时一些公司的架构风格称为“微服务”。文章中指出微服务架构有以下一些特点: -
高可维护性和可测试性; -
服务之间松耦合; -
服务可独立部署; -
服务围绕业务组织; -
被一些小团队使用。 -
2015 年,Spring 社区围绕之前 Netflix 沉淀的一些组件以及 Martin 提出的微服务理念,推出了 Spring Cloud v1.0.0,直到现在 Spring Cloud 还被广泛使用。Spring Cloud v1.0.0 包含的组件较少,只有服务发现、配置管理等几个核心组件。
-
Git 作为配置仓库。 -
JDBC 和 Redis 提供了统一的配置抽象层。
-
生命周期管理 :管理应用什么时候启动,什么时候关闭等。包含打包、健康检查、部署、扩展、配置等功能。 -
网络管理 :包括服务发现、A/B test、灰度发布、熔断、点对点通讯、pub-sub 等。 -
状态管理 :包括 workflow 管理、缓存、应用状态等。 -
绑定 :包含数据传输,协议转换等。
A:Istio 确实没有好用的控制器,因为现在看起来还是一个比较前沿的方向。已知的像 solo.io,他们做了一些产品,是直接基于 Envoy,没有基于 Istio。但是我觉得社区是不断发展的,产品也会不断推陈出新,可能要交给后面的人来解决这个问题。当前的确是没有好用的控制器。
A:整个 CNCF 社区比 Spring Cloud 社区能打的原因就是因为语言无关。如果将语言绑定,很多平台可以自己自洽,就比较简单。但是我们要接受现实:现在的互联网体系,或者整个软件体系,异构已经成为了必然的趋势。我们不可能要求所有人只会一门语言,这个时候可以用不同的语言去实现不同的事情,不同生态会有不同的构成。Kubernetes 以及 CNCF 社区就在做这件事情。
A:这个问题其实还蛮有意思。kube-proxy 现在还是基于 iptables 和 IPVS 做转发的工作,当然像 Cilium 基于 kube-proxy 的 eBPF 做了很多的工作。至于未来会不会完全取代,从我的经验上来看,Service Mesh 融入了很多业务属性,可能并不是 kube-proxy 想要去支撑的。
A:现在还有一些单机版的 Kubernetes,比如 minikube 或者一些云厂商,都会提供比较合理的本地直接访问云端服务的特性。个人更建议开发者尝试一下 minikube/K3s, 就在本地运行,进行一些调试是非常方便的。