这个问题来自前段时间知识星球里面一位同学的提问:
- 广义上的云原生工程师需要区基础设施工程师和业务实现工程师吗?怎么样才算一名云原生工程师?
- 招聘软件上大多招聘Go的高级开发工程师,任职要求里面很明显是业务设计开发,但是也会要求熟悉 Kubernetes,深入理解容器,Devops 等。因为我在平时工作中很少会主动操作 Kubernetes,所以招聘软件上要求熟悉 Kubernetes,目的是让你工作中了解kubernetes特性,时刻提醒自己基于 Kubernetes 做开发,尽量让自己的服务是无状态的还是会有其他目的? 或者换个问法,Go的高级开发工程师和云原生工程师(业务方向)本质区别是什么?
最近在和多个人聊到云原生相关的话题时,发现每个人对云原生的定义和对云原生技术理解都很不一样。 以至于很多人会问我,我学习云原生需要从 Java/.NET/xxx 语言转 Go 吗?
回答这个问题,需要从『云原生的基础设施』和『遵循云原生架构设计的应用系统』两个方面来看待云原生。
首先,云原生基础设施的方向,和以往的中间件/infra平台开发本质上并没有什么不同,做的事情也都是构建应用系统里做业务逻辑支撑的基础组件,比如 容器平台,Devops平台,微服务治理框架,各种中间件的管理和运维等。当然值得一提的是,Golang 凭借着简单的语法和友好的网络/并发机制,是目前做云原生框架和平台的首选。除此之外,还需要掌握的基础技能包括:操作系统,网络,分布式协议等。
其次,如果你一直做的是应用系统开发或者业务架构设计,对于了解和深入云原生,我的观点是建议继续使用之前的语言,不需要重新学习和转型 Golang。
和开发基础设施平台不同,基于云原生架构来设计应用系统,并不要求你具备很多的底层技术能力,更多的要求是掌握云原生四要素提到的,比如对 DevOps 和敏捷开发,微服务/云原生架构的原则等,在深度上了解各种云原生框架/微服务框架 (这里列举一些,比如 Kubernetes,Jenkins/Gitlab,Nacos,Istio,Dapr,Prometheus,Skywalking…) 的使用,而运维则交给基础架构或SRE团队,让专业的人做专业的事情。
今年来看,云原生仍然是一个值得投资学习的技术方向,一方面云原生仍然是未来几年的技术趋势,合理的使用云原生技术对企业IT系统开发维护都有不错的降本增效成果。
最近讲一下我认为的云原生的一些细分方向目前的成熟度:
- 容器和 Kubernetes:趋于成熟稳定,针对 Kubernetes 的管理工具也有很多,入门难度在持续降低。
- 可观测性:Opentelemetry 在去年是 CNCF 活跃度前二的项目,我看到的也是Opentelemetry 的使用率在持续提升,是一个不错的学习方向。但可观测性的整体解决方案还是比较复杂,需要Opentelemetry (数据采集) + Jaeger ,Prometheus ,ELK (后端)+ Grafana (展示前端) 组合使用,或者使用 SkyWalking 这种一体化的 APM 系统
- 开发工具和效能:代码托管,CI/CD 工具也偏向稳定,使用常见的 Gitlab ,Jenkins / ArgoCD 等
- 微服务:侵入式微服务框架已经比较成熟了(包括云原生 API 网关,配置中心,注册中心)。但 Service Mesh 技术因为复杂度的问题仍没有解决,大规模落地并不理想
- 应用管理:PaaS 也是一个偏成熟的方向,也有 Kubevale 这种提供应用模型定义的平台,使得 PaaS 构建门槛进一步降低
- Dapr:个人对 Dapr 的设计也比较喜欢,但客观来说 Dapr 的落地还需要很长时间,是一个可以投资的方向
- Serverless:未来看好,但现在除云上的 FaaS 使用较多外,Serverless 整体的普及和落地也需要一个漫长的过程,建议投资关注
- Ebpf:在云原生安全和无侵入可观测性方向有较大的空间,有兴趣可以学习
- AIOps:过去几年我对AIOps有较多研究,但现在我感觉这个方向并没有它宣传的那么美好,我的看法是可以作为可观测性的一个辅助
- 未来企业对云平台和云原生技术的使用成本会更多关注,促生了FinOps的发展。