当我设计微服务并部署到K8时,我发现我的微服务(最大利用率仅为0.1-0.3个CPU).您是否有最佳实践,我们如何提高微服务CPU利用率?
让我来描述一下实验室环境:
- 带5个 node 的K8
- 每个 node 具有14个CPU和128 GB RAM( node 构建在安装了VMWare的虚拟机上)
- 带nginx的K8,设置已满日志(log)等
- 微服务
- 在python语言中(在一个进程中处理的GIL限制,意思是最大.1个CPU利用率)
- 我用了三个豆荚
- 接口REST请求/响应(不增加I/O操作)
- 每个调用的处理时间约为100ms
我们进行了性能测试,您可以看到以下输出:
- 微服务最大利用率.每个Pod中有0.1-0.3个CPU
我预计问题是,K8管理(路由、日志(log)、…)产生更高的资源利用率,并且不能为我们的微服务的利用提供高吞吐量.我认为,提高微服务利用率的最佳做法可以是:
1] Increase amount of pods个
- 优点是,我们将获得更高的微服务利用率,但每个K8S node 的Pod数量受到限制
- 缺点是,每个Pod的微服务利用率仍将保持不变
2] Use micro batch processing
- 优点是,我们可以支持绑定调用(例如,每一两秒),在这种情况下,微服务端的处理时间会更长
- 缺点是,我们将增加处理时间,因为Bundle (不是实时处理的理想场景)
3] K8s change log level个
- 专业人士,我们可以降低ngix、…中的日志(log)级别go 犯错
- 缺点,详细问题跟踪可能存在的问题
4] Use K8s nodes with physical HW (not VMware)个
- 专业人士,更好的性能
- 缺点是,此更改可能会产生额外成本(新硬件)和维护
您是否使用了其他最佳实践,即在K8中实现高微服务利用率的 idea (我的目标是为这段Python代码的每个Pod获得0.8-1个CPU)?