在微服务诞生之初,并没有太多方案的选择:选一个注册中心用来做服务注册和发现,通过客户端SDK进行负载均衡和容错,再搭配上日志、监控、调用链全套观测手段,一套微服务架构便建立起来了。
作为最流行的业务开发语言,Java体系里诞生了很多微服务架构,例如Spring Cloud。使用Spring Cloud,Spring技术栈的开发人员可以快速的开发和管理微服务,丰富的功能让其他语言体系的开发者们羡慕不已。
只使用Kubernetes:
流量治理能力不足——缺乏熔断能力,没有灰度控制能力;
大规模使用时的性能问题——基于Kubernetes Service的服务发现过程需要经过Iptables或IPVS的查找过程,集群规模大时性能影响会比较明显。
使用Kubernetes部署+Spring Cloud(或Dubbo等)服务治理:
使用Kubernetes部署+Istio(或Linkerd等)服务治理:
Kubernetes部署+Spring Cloud服务治理
先把整套部署、治理、观测系统建设完善之后再去做微服务拆分;
利用专门的团队或者直接利用云服务完成整套系统的建设和运维;
系统建设完善后,业务运维尽量交给业务研发自己进行。
一个平台,全界面操作,可以完成整套部署、治理、观测等线上运维工作;
具备日志、监控、调用链、依赖图谱等全角度观测能力;
屏蔽Kubernetes底层技术细节,托管注册中心、配置中心、调用链分析等后端服务,让研发工程师的关注点可以回归业务本身;
扩展标准Spring Cloud能力,增加路由治理和服务鉴权功能,可以更精确的控制调用。
Kubernetes部署+Istio服务治理
概念复杂:又是很多新概念,Virtual Service、Destination Rule、Subset、Service Entry… …
架构复杂:包含太多的系统组件,Pilot、Mixer、Galley、Security、Gateways、Kiali… …组件之间的关系又很复杂。
保证稳定性困难:社区版本发布频率快,每个版本都有不少稳定性问题。如果线上出现问题,等下一版解决吧等不起,自己改吧又太复杂不知道该怎么改。
先做完微服务化和容器化之后再考虑引入服务网格技术。不要因为网格没有架构依赖,想通过网格解决十几年前的大型单体应用的服务治理问题;
利用专门的团队或者直接利用云服务完成整套系统的建设和运维;
先从访问量不大的边缘系统尝试网格,延迟敏感的应用慎用网格。
建立完备的测试系统,可以通过长时间实际业务的压测及时发现版本问题并及时优化和回归,保证Istio版本的稳定性。
界面上可以通过几个简单配置后自动完成安装、升级等复杂操作。
对Istio的复杂概念和使用过程进行了简化,可以更容易的使用网格的各种功能。