微服务综合治理面临的久久挑战
在业务初期,因人手久久有限,想要快速开发并爱上线产品,很多团队使用单体的架构来开发。但是随着公司的发展,会不断往系统里面添加新的业务功能,系统越来越庞大,需求不断增加,越来越多的人也会加入到开发团队,代码库也会增速的膨胀,慢慢的单体应用变得越来越臃肿,可维护性和灵活性逐渐降低,维护成本越来越高。
这个时候很多团队会把单体应用架构改为微服务的架构,解决单体应用的问题。但随着微服务越来越多,运维投入会越来越大,需要保证几十甚至几百个服务正常运行与协作,这给运维带来了很大的挑战,下面从软件生命周期的角度来分析这些挑战:
-
开发测试态
- 如何实现开发、测试、线上环境隔离?
- 如何快速调试本地变更?
- 如何快速部署本地变更?
-
发布态
- 如何设计服务发布策略?
- 如何无损下线旧版本服务?
- 如何实现对新版本服务灰 度测试?
-
运行态
- 线上问题如何排查?有什么工具可以利用呢?
- 对于服务质量差的节点如何处理?
- 对于完全不工作的实例我们如何恢复?
面对以上问题,Serverless 应用引擎在这方面都做了哪些工作?
Serverless 应用引擎
如上图所示,Serverless 应用引擎(SAE)基于神龙 + ECI + VPC + SLB + NAS 等 IaaS 资源,构建了一个 Kubernetes 集群,在此之上提供了应用管理和微服务治理的一些能力。它可以针对不同应用类型进行托管,比如 Spring Cloud 应用、Dubbo 应用、HSF 应用、Web 应用和多语言应用。并且支持 Cloudtoolkit 插件、云效 RDC / Jenkins 等开发者工具。在 Serverless 应用引擎上,零代码改造就可以把 Java 微服务的应用迁移到 Serverless。
总的来说,Serverless 应用引擎能够提供成本更优、效率更高的一站式应用托管方案,零门槛、零改造、零容器基础,即可享受 Serverless + K8s + 微服务带来的技术红利。
微服务治理实践
1. 开发态实践
1)多环境管理
- 多租户共有一个注册中心,通过不同的租户对流量进行隔离;更进一步可以通过网络 VPC 进行环境隔离;
- 提供环境级别的运维操作,比如一键停止和拉起整个环境的功能;
- 提供环境级别的配置管理;
- 提供环境级别的网关路由流量管理。
2)云端联调
Serverless 应用引擎(SAE)基于 Alibaba CloudToolkit 插件+ 跳板机可以实现:
- 本地服务订阅并注册到云端 SAE 内置的注册中心;
- 本地服务可以和云端 SAE 服务互相调用。
如上图所示,在实现的时候用户需要有一个 ECS 代理服务器,实际注册的是 ECS 代理服务器到 SAE 的注册中心,IDEA 在安装 Cloudtoolkit 插件以后,在启动进程时,会在本地拉起一个通道服务,这个通道服务会连上 ECS 代理服务器,本地所有的请求都会转到 ECS 代理服务器上,云端对服务的调用也会通过 ECS 代理转到本地,这样就可以以最新的代码在本地断点调试,这就是云端联调的实现。
3)构建快速开发体系
代码在本地完成联调以后,要能快速地通过 Maven 插件和 IDEA-plugin,可以很快地一键部署到云端的开发环境。
2. 发布态实践
1)应用发布三板斧
- 可灰度:应用在发布的过程中,运维平台一定要有发布策略,包括单批、分批、金丝雀等发布策略;同时还要支持流量的灰度;批次间也要允许自动/手动任选。
- 可观测:发布过程可监控,白屏化实时查看发布的日志和结果,及时定位问题。
- 可回滚:允许人工介入控制发布流程:异常中止、一键回滚。
通过这三点可以让应用发布做到可灰度、可观测、可回滚。