目录
1:云原生的定义
云原生准确来说是一种理念和方法论,主要倡导构建和部署基于云计算的应用建构,
主要目的是充分利用云计算的可扩展性,灵活性和可容错性。以实现更高效的应用程序开发与部署。
2:什么是云计算技术
既然云原生是基于云计算技术,那么什么是云计算呢,云计算是通过互联网提供计算资源的一种技术和服务。具有很高的可扩展性和灵活性。
2.1 提供什么资源
简略的来说,基础的有以下几种
硬件资源
-
计算资源(CPU/GPU/FPGA):提供虚拟机(VM)或容器,用户可以根据需要选择不同配置的计算资源。
-
存储资源:包括对象存储(如AWS S3)、块存储(如AWS EBS)和文件存储(如AWS EFS)。
-
网络资源:提供虚拟网络(如AWS VPC)、负载均衡器、防火墙等。
软件资源
-
操作系统:用户可以选择不同的操作系统(如Linux、Windows)来运行应用程序。
-
中间件:提供数据库(如MySQL、PostgreSQL、MongoDB)、消息队列(如RabbitMQ)、缓存系统(如Redis)等。
-
开发工具:提供集成开发环境(IDE)、代码仓库(如GitHub、GitLab)、持续集成/持续部署(CI/CD)工具等。
平台服务
-
容器编排:如Kubernetes、Docker Swarm,用于管理容器化应用程序。
-
无服务器计算:如AWS Lambda、Azure Functions,允许用户运行代码而无需管理服务器。
-
机器学习和数据分析:提供机器学习框架(如TensorFlow、PyTorch)、数据分析工具(如Apache Spark)等。
2.2 云计算特点解释
前面提到云计算具有很高的灵活性和扩展性和容错性,能大幅度提高应用程序开发与部署,那么主要体现在哪些方面呢,下面将会用通俗的语言举出正例反例。
灵活性,可扩展性的解释
假如说目前有一家软件公司在运行一款程序,这个程序呢有个特点,访问这个程序的流量时高时低,公司运维人员为了确保能够保证服务一直稳定运行,必须要准备大量的服务器,服务器的计算资源要满足最大访问量的情况,但是很多时候访问的人很少,而且为了确保时刻准备高流量的情况,又不能把服务器租出去。大致大量计算资源空闲浪费了,假如说服务器储备的少的时候,一旦碰到高流量的情况下服务就不能正常运行。而且部署服务器也很麻烦。
但是如果使用了云计算提供的服务器资源,大量的计算资源形成一个资源池,由云服务提供商管理,根据你的需要提供计算资源(cpu资源,存储资源)。按使用量收费,会有以下好处
第一,不需要公司专门人员部署服务器
第二,公司的成本大幅度降低,不会碰到服务器准备太多,太少面临的窘境
第三:节省出来大量的人力物力去专注于程序开发,无需考虑运营,能提高开发效率
容错性的解释
云计算的容错性是指在云计算环境中,系统能够自动检测和处理故障,确保服务的高可用性和可靠性。云计算通过多种技术手段实现容错性,主要包括以下几个方面
-
冗余和备份:
-
数据冗余:云计算平台通常会将数据存储在多个物理节点上,确保即使某个节点发生故障,数据仍然可用。
-
服务冗余:通过运行多个服务实例,确保即使某个实例失败,其他实例可以接管。
-
-
故障检测和恢复:
-
实时监控:云计算平台通过监控工具实时检测系统状态,及时发现潜在的故障。
-
自动恢复:一旦检测到故障,系统会自动启动恢复机制,如自动重启服务、数据恢复或流量切换
-
-
多区域部署:
-
地理冗余:云计算平台通常在多个地理区域部署资源,确保即使某个区域发生故障,其他区域可以接管
-
而非云计算通常通过硬件存储冗余技术和手动恢复机制去确保服务数据不出问题
非云计算相对于云计算的缺点在于1:手动恢复时间长,服务中断时间长,云计算由检测工具和自动恢复服务。2:成本比云计算要更高,云计算根据使用量收费。
3:云原生的组成
-
容器技术:Docker、Containerd等。
-
容器编排:Kubernetes、Docker Swarm等。
-
CI/CD工具(continuous integration/continuous deployment):Jenkins、GitLab CI、GitHub Actions等。
-
服务网格:Istio、Linkerd等。
-
监控和日志:Prometheus、Grafana、ELK Stack
4:云原生的特点
-
容器化(Containerization):
-
使用容器技术(如Docker)将应用程序及其依赖打包成一个独立的单元,确保应用程序在不同环境中具有一致性。
-
容器化使得应用程序可以快速部署和扩展,同时减少了环境差异带来的问题。
-
-
微服务架构(Microservices Architecture):
-
将应用程序拆分成一组小型、独立的服务,每个服务负责一个特定的业务功能。
-
微服务架构使得应用程序更容易开发、测试和部署,同时也提高了系统的可维护性和可扩展性。
-
-
不可变基础设施(Immutable Infrastructure):
-
一旦部署,基础设施(如服务器、容器等)不会被修改,而是通过重新部署新的版本来更新。
-
这种方式减少了配置漂移和环境差异,提高了系统的稳定性和可靠性。
-
-
声明式配置(Declarative Configuration):
-
使用声明式配置文件(如Kubernetes的YAML文件)来定义应用程序的部署和运行状态,而不是通过脚本或命令行进行操作。
-
声明式配置使得系统能够自动管理资源,减少了人为错误。
-
-
自动化(Automation):
-
通过自动化工具(如CI/CD管道)实现应用程序的持续集成和持续部署。
-
自动化减少了手动操作的复杂性和错误率,提高了开发和部署的效率。
-
-
弹性(Elasticity):
-
应用程序能够根据负载自动扩展或收缩资源,以适应不同的流量需求。
-
弹性使得系统能够高效利用资源,同时保证在高负载下的性能和可用性。
-
备注(这里总结的颇为抽象,如果你觉得不懂想仔细了解,请关注下文),成为我的粉丝吧!
如果坚持读到了这里,那么说明你踏出了记忆复苏的第一步,假以时日你必将重登巅峰,掌握你之前失去的所有云原生相关知识。加油少年,