云原生是一种面向云计算架构和应用开发的新兴技术,它能够让企业更好地利用云计算技术来 构建高可用性、高性能、高弹性的应用系统。
要做到高可用性、高性能、高弹性,在传统的架构视角下往往很难。而云原生提供了一种完整的体系化的应用程序开发和运维范式,它涵盖了应用程序架构、部署和管理的方方面面。云原生采用了一系列的开源技术,如容器化、自动化部署、服务网格、云原生存储等,以更好地支持应用程序的开发和运维。
讲到云原生,就不得不提CNCF组织。CNCF(Cloud Native Computing Foundation)是一个致力于促进云原生计算的开源组织。CNCF成立于2015年,由Linux基金会创建,旨在通过维护和推广开源技术,使云原生计算成为一种更普遍的方式
"Make Cloud Native Ubiquitous" -- 让云原生无处不在
以下大名鼎鼎的项目均由CNCF孵化,包括K8s!
正是在大厂的支持,基金会的运作,全球开源作者地不断努力下,2021年,云原生抢占了技术C位,迎来落地大爆发。
全面拥抱云原生在2021年成为行业共识:解读云原生的2021:抢占技术C位,迎来落地大爆发_云计算_褚杏娟_InfoQ精选文章
云厂商作为云原生落地的第一大阵营,率先启动了云原生的商业化落地。
在云厂商的加速下,头部企业也积极推进云原生在生产环境的落地。
对于正在落地云原生技术的企业来说,新技术新概念太多,有时经常分不清云原生和微服务架构有什么区别,下面简单介绍下:
云原生和微服务架构是两个相关但不同的概念。
微服务架构是一种软件架构模式,旨在将应用程序拆分成更小、更独立的服务,以便更好地满足不同业务需求,并提供更高的可伸缩性和灵活性。
而云原生则是一种面向云计算架构和应用开发的新兴技术,旨在构建高可用、高性能、高弹性的应用系统,以更好地利用云计算技术。
云原生与微服务架构的主要区别在于以下5点:
所以,微服务架构和云原生是两个相关但不同的概念,它们在范围、目标、范式、技术栈和目标环境等方面存在差异。理解了这些差异,相信你能明白其中点和面的区别。
下面以一张图先来简单了解云原生的最佳实践:
云原生的最佳实践核心点主要是以下几点:
当然,云原生的最佳实践是不断发展和演化的。随着云原生技术的不断成熟,最佳实践也会不断更新和改进。
采用微服务架构是云原生应用开发和部署的重要方面之一。下面详细介绍一下微服务架构的一些最佳实践:
拆分服务:将应用程序拆分为独立的服务,每个服务只关注一项业务功能,尽可能保持服务的自治性,也就是软件设计原则里的“单一职责”。
定义服务接口:定义每个服务的接口,包括输入输出、协议、语言和数据格式等。
使用轻量级通信协议:采用轻量级的通信协议,如 REST、gRPC 等,保证服务之间的通信效率和可靠性。
分布式数据管理:在微服务架构中,每个服务都需要处理自己的数据,需要采用分布式的数据管理方案,如数据分片、数据复制、数据缓存等。
保证服务可用性和容错性:在微服务架构中,需要保证每个服务的可用性和容错性。可以采用服务注册和发现、负载均衡、服务熔断、降级等机制。
使用异步通信:使用异步通信可以提高服务的性能和可扩展性,如消息队列等。
监控和日志管理:采用监控和日志管理可以快速发现并解决问题,保障微服务架构的稳定性和可靠性。
一个典型的微服务架构如下,不同语言有不同的实现或组件选择,但思想上大同小异。
图片来源百度搜索,如侵立删
采用微服务架构可以提高应用程序的可维护性、灵活性和可扩展性,但也需要考虑到微服务架构的复杂性和管理难度。开源世界已经有多个知名的微服务框架,如 Java系的SpringCloud,Dubbo,Go的Tars-go,Go-Micro等,企业可以根据技术布局进行综合评估和规划。
构建一次,随处运行。容器化是云原生架构中的另一个关键技术。可以说,正在因为容器化的快速发展,推动了云原生技术的快速落地。它可以将应用程序打包成独立的容器,并在不同的环境中进行部署和运行。下面是容器化的一些最佳实践:
容器技术:使用容器技术的事实标准Docker。这里推荐使用主流云厂商提供的容器基础环境。
构建轻量级容器镜像:尽可能减小容器镜像的大小,避免不必要的依赖和组件。
安全管理容器:对容器进行安全性评估和管理,确保容器中的应用程序不会受到攻击和威胁。
统一管理容器:采用容器编排技术Kubernetes,实现对容器的统一管理和部署,避免手动管理容器带来的错误。
确保容器可用性:保证容器的高可用性,可以通过容器健康检查、容器自愈等技术来实现。
自动化容器部署:采用 CI/CD 技术,实现容器的自动构建、测试和部署,加快上线时间,减少错误率。
监控和日志管理:对容器进行监控和日志管理,可以及时发现并解决问题,保障容器的稳定性和可靠性。
容器化可以提高应用程序的可移植性、可靠性和可扩展性,是云原生技术的底座。
容器化解决了底层资源的问题,微服务架构解决软件系统的问题,而CICD则是其中最强大的粘合剂,它解决软件系统如何部署到底层资源上。自动化部署和管理帮助企业快速、高效地构建和部署应用程序,降低人工操作的出错率,并提高系统的可靠性和可扩展性。
这里也有同学对CICD与Devops存在疑惑,简单解释下:
其中,Agile是敏捷开发,是一种软件开发理念。DevOps和CI/CD是软件开发领域的两个关键概念,它们都旨在提高软件开发和部署的效率和质量,但它们的侧重点略有不同。
DevOps是一种软件开发和运维的方法论,旨在通过集成开发和运维团队的工作,协同实现快速、高质量、可靠的软件开发和部署。DevOps的核心是通过自动化、协作和交流来加速软件交付,并提高软件质量和可靠性。DevOps注重人、流程和工具的整合,通过集成开发、测试、部署等环节,实现快速迭代和持续交付。DevOps的实现需要相关团队紧密协作,共同实现快速反馈、自动化测试、持续部署等工作。
CI/CD则是DevOps中的一个重要环节,它包括持续集成(CI)和持续交付/持续部署(CD)。持续集成指开发人员频繁地将代码集成到共享代码库中,并进行自动化的构建和测试,以确保代码质量和稳定性。持续交付/持续部署则是将自动化的构建和测试过程进一步扩展,将代码部署到生产环境中,并实现快速反馈和持续优化。CI/CD的实现需要自动化工具的支持,例如版本控制系统、构建工具、测试框架、自动化部署工具等。
因此,DevOps和CI/CD是软件开发领域的两个关键概念,它们旨在通过整合开发和运维团队的工作、自动化和协作来提高软件开发和部署的效率和质量。CI/CD则是DevOps中的一个具体环节,通过持续集成和持续交付/部署来实现快速、高质量、可靠的软件开发和部署。
CICD是Continuous Integration and Continuous Deployment(持续集成和持续部署)的缩写,是一种流程和工具组合,旨在通过自动化构建、测试和部署来提高软件开发的效率和质量。它包括以下几个组件:
版本控制系统:CICD系统需要一个版本控制系统来管理源代码,常见的版本控制系统包括Git、SVN等。SVN已成为过去式。
构建工具:CICD系统需要一个构建工具来编译和打包代码,得到的构建产物就是我们的运行程序,常见的构建工具包括Maven、Gradle等。
测试框架:CICD系统需要一个测试框架来自动化执行各种测试,如单元测试、集成测试和端到端测试等。
自动化部署工具:CICD系统需要一个自动化部署工具来将构建好的软件包部署到生产环境或其他目标环境中,常见的自动化部署工具包括Docker、Ansible等。
持续集成服务器:CICD系统需要一个持续集成服务器来自动化执行构建、测试和部署流程,常见的持续集成服务器包括Jenkins、Travis CI、Circle CI等。
CICD系统的工作流程通常如下:
1. 开发人员在本地开发和测试代码,然后将代码推送到版本控制系统中。
2. 持续集成服务器监听版本控制系统,一旦有代码变更,就会自动触发构建、测试和部署流程。
3. 构建工具编译和打包代码,测试框架执行各种测试。测试通过后,自动化部署工具将构建好的软件包部署到目标环境中。
4. 持续集成服务器将构建、测试和部署的结果反馈给开发人员,以便及时修复代码缺陷。
CICD系统极大地帮助了开发人员完成快速构建、测试和部署软件的工作,以便更快地发布高质量的软件,同时可以减少人工错误和提高效率。
作为研发流程的重要一环,目前云平台均提供了一站式研发管理平台,例如站长素材网的Coding,阿里云的Devops解决方案-云效平台,华为云的CodeArts等。
云原生技术栈中还包括了一系列面向DevOps的诊断与分析系统,提升系统整体的可观测性,包括集中式日志系统(Logging)、集中式度量系统(Metrics)和分布式追踪系统(Tracing)。
云原生可观测性技术是指通过监测、度量、分析和诊断应用程序在云原生环境中的运行状况,以提供实时的、全面的和可视化的运维数据。它包括以下几个方面:
日志管理:通过对应用程序的日志进行收集、存储、分析和检索,以监测和诊断应用程序在云环境中的运行状况。通常使用的工具包括ELK、Fluentd、Splunk等。
度量监控:通过收集和监测应用程序的度量指标,如CPU利用率、内存占用、网络流量等,以实现对应用程序在云环境中的实时监控。常用的工具包括Prometheus、InfluxDB、Grafana等。
分布式追踪:通过追踪应用程序中各个服务之间的调用关系和时间消耗等指标,以帮助排查应用程序的性能问题。常用的工具包括Zipkin、Jaeger等。
告警和自动化:通过配置告警规则和自动化脚本,可以自动检测和响应应用程序中的异常情况,从而减少人工干预和提高运维效率。常用的工具包括Prometheus Alertmanager、Grafana Alerting等。
云原生可观测性技术能够帮助运维人员及时发现和排查应用程序中的问题,从而提高应用程序的可用性和稳定性。同时,它也能够帮助开发人员更好地理解应用程序的性能状况,从而进行优化和改进。
云原生设计可靠性和安全性是基于云原生架构的一种设计理念,其目的是提高应用程序在云环境中的稳定性和安全性。下面是一些云原生设计可靠性和安全性的实践:
服务可靠性:采用容器编排技术和自动化部署工具来实现服务的高可用性和自动恢复,同时采用服务网格技术来提高服务之间的可靠性和健壮性。
数据可靠性:采用多副本机制来保证数据的可靠性和高可用性,同时采用分布式存储技术来解决数据存储的可扩展性和可靠性问题。
安全设计:采用零信任策略和多层安全防护机制,包括网络隔离、访问控制、漏洞扫描、安全审计等,保障应用程序和数据的安全。
持续安全性:采用自动化安全测试和漏洞扫描工具来及时发现和修复安全漏洞,同时采用持续集成和持续交付技术来保证软件的安全性和可靠性。
监控和故障排除:采用自动化监控和日志管理工具来实现实时监控和故障排除,同时采用可观测性设计来提高系统的可观测性和故障诊断能力。
云原生设计可靠性和安全性是一种系统级的设计理念,它不仅仅是技术的应用,还需要考虑业务的需求和安全风险,同时需要采用多种技术手段来实现。
总的来说,云原生技术从软件研发,软件发布到线上观测的技术体系。前面提到,云厂商作为云原生落地的第一大阵营,已经为云原生落地提供了相对全面的基础设施。企业可根据自己的情况进行选择。
37手游的云原生架构也是按这个最佳实践进行的。从原来的自建IDC到整体容器化;从原来的单体PHP应用,到目前微服务架构;经过过架构改造,代码改造,基础设施改造全过程。
下一篇文章,我们将介绍37手游全面拥抱云原生的实践。
注:本文章部分由ChatGPT生成。
- AWS: https://aws.amazon.com/cn/what-is/cloud-native/