首页 > 其他分享 >【云原生番外篇】到底什么是云原生,它的意义在于什么

【云原生番外篇】到底什么是云原生,它的意义在于什么

时间:2024-03-15 11:00:51浏览次数:29  
标签:原生 容器 服务 my 什么 应用程序 番外篇 app

一、什么是云原生

        大家好,通过前几章节的学习云原生的基础我们已经简单了解,借此机会和一些还未明白什么是云原生的小伙伴们探讨一下“什么是云原生”。云原生是一种构建和运行应用程序的方法,它基于容器、微服务和自动化运维等技术体系,旨在提高应用程序的高效性、可靠性和可扩展性,使其能够适用于各种不同的云平台。

        从更广泛的角度来看,云原生不仅仅是一种技术方法,更是一种文化和潮流,代表着云计算时代的必然导向。云原生的出现,使得云能够成为云化战略成功的基石,而非障碍。它充分利用云计算的优势,整合了之前的云三层(IaaS、PaaS、SaaS),使得应用落地更加灵活高效。

        云原生的意义在于,它改变了应用程序的构建和运行方式,使应用能够更好地适应云环境,并充分利用云的资源。具体来说,云原生具有以下显著特点:

  1. 微服务:云原生应用采用微服务架构,使得服务内聚更强、更加敏捷。每个微服务都是一个独立的单元,可以独立部署、更新和扩展,从而提高了系统的灵活性和可维护性。
  2. 容器化:容器化技术为微服务提供了实施保障,通过轻量级的虚拟化技术,使得每个服务都能被无差别的封装到容器中,从而实现了应用隔离和资源的灵活调度。
  3. DevOps:云原生强调开发和运维的紧密合作,实现了运维合一。这种协作方式使得团队能够更快速地响应需求变化,提高开发效率,同时确保系统的稳定性和安全性。
  4. 持续交付:云原生应用通过持续交付的方式,不断将新功能发布给用户,从而提高了用户体验和满意度。同时,持续交付也有助于团队及时发现问题并进行修复,确保系统的持续稳定运行。

总的来说,云原生代表了未来应用程序开发和运行的趋势和方向。它不仅能够提高应用程序的性能和可靠性,还能够降低运维成本和提高开发效率。因此,对于希望充分利用云计算优势的企业和组织来说,掌握云原生技术将具有重要意义。

二、云原生目前发展

        坦白了,一句话讲如果你一点云原生的知识都不知道,你的大厂面试机会将非常渺茫。上大学时,老师和我们说“云原生、SpringCloud都不知道,毕业肯定找不到工作”。如今看来,云原生确实是发展之道。目前,国内外众多企业都在积极采用云原生技术。在国内,主要的综合服务商如阿里、腾讯、华为等大厂都拥有完整的云原生“家族产品”,并在实际业务中广泛应用。这些大厂通过提供丰富的云原生产品和服务,帮助企业实现业务的快速部署、弹性伸缩和高效管理。

        在海外,微软、谷歌、亚马逊等科技巨头也较早开始云原生的研究,并在全球范围内为众多企业提供云原生解决方案。这些公司凭借其在云计算领域的深厚积累和技术优势,推动了云原生技术的快速发展和普及。

        除此之外,还有一些专注于云原生平台的创新厂商,如时速云、灵雀云、博云、道客云、精灵云、安捷澜澈等。这些厂商注重技术自主研发,侧重云原生产品和服务的差异化和本地化服务,以满足不同企业的个性化需求。

DevOps代表性技术

容器化技术:Docker

        Docker是一种开源的容器化平台,它允许开发人员将应用程序及其依赖项打包成一个独立的容器。通过使用Docker,团队可以确保应用程序在不同环境中具有一致的运行表现,减少“在我的机器上可以运行”这类问题的发生。Docker还提供了强大的镜像管理和版本控制功能,使得应用程序的部署和回滚变得简单快捷。

        使用Dockerfile创建一个简单的Docker镜像:

# 使用官方Python运行时作为父镜像  
FROM python:3.8  
  
# 设置工作目录为/app  
WORKDIR /app  
  
# 将当前目录内容复制到容器的/app内  
COPY . /app  
  
# 安装任何需要的包  
RUN pip install --no-cache-dir -r requirements.txt  
  
# 对外暴露的端口号  
EXPOSE 8000  
  
# 定义环境变量  
ENV NAME World  
  
# 当容器启动时运行python app.py  
CMD ["python", "app.py"]

假设app.py是一个简单的Python Flask应用程序:

# app.py  
from flask import Flask  
app = Flask(__name__)  
  
@app.route('/')  
def hello():  
    return 'Hello, %s!' % os.environ.get('NAME', 'stranger')  
  
if __name__ == '__main__':  
    app.run(host='0.0.0.0', port=8000)

构建和运行Docker容器的命令:

docker build -t my-python-app .  
docker run -p 4000:8000 my-python-app

配置管理工具:Ansible

Ansible是一个开源的自动化平台,它允许开发人员使用简单的YAML语法编写自动化脚本,以实现对系统、网络和应用程序的配置管理。Ansible具有强大的模块库,可以覆盖大多数常见的IT任务,如安装软件包、配置网络设置、启动服务等。通过Ansible,团队可以快速地部署和更新系统配置,减少手动操作带来的错误和延时。

持续交付代表性技术

CI/CD工具:Jenkins

        Jenkins是一个开源的自动化服务器,它支持持续集成和持续交付。通过Jenkins,团队可以自动化构建、测试和部署应用程序的过程。Jenkins具有丰富的插件生态系统,可以与各种版本控制系统、构建工具和测试框架集成,实现端到端的自动化流程。此外,Jenkins还提供了强大的管道功能,允许团队定义复杂的构建和部署流程。

 

使用Jenkinsfile定义一个简单的持续集成/持续交付管道:

pipeline {  
    agent any  
  
    stages {  
        stage('Checkout') {  
            steps {  
                git('https://github.com/user/my-repo.git')  
            }  
        }  
        stage('Build') {  
            steps {  
                // 假设有一个构建脚本build.sh  
                sh './build.sh'  
            }  
        }  
        stage('Test') {  
            steps {  
                // 假设有一个测试脚本test.sh  
                sh './test.sh'  
            }  
        }  
        stage('Deploy') {  
            when {  
                branch 'master'  
            }  
            steps {  
                // 假设有一个部署脚本deploy.sh  
                sh './deploy.sh'  
            }  
        }  
    }  
}

监控与日志管理技术:Prometheus + Grafana

        Prometheus是一个开源的系统监控和告警工具,它可以收集各种系统的运行指标,并提供查询和告警功能。Grafana则是一个开源的数据可视化平台,它可以与Prometheus集成,将收集到的数据进行可视化展示。通过这两个工具的结合使用,团队可以实时地监控应用程序的性能和健康状况,及时发现和解决潜在问题。此部分不做过多介绍,详细步骤可看我的第一篇文章。

微服务代表性技术

服务框架:Spring Cloud

        Spring Cloud是一个基于Spring Boot的微服务框架,它提供了一系列的服务治理和微服务开发所需的组件,如服务发现、配置管理、负载均衡、熔断器等。通过使用Spring Cloud,团队可以快速地构建和管理微服务应用,提高系统的可伸缩性和可维护性。

使用Spring Cloud Eureka作为服务发现:

Eureka Server配置 (application.yml):

server:  
  port: 8761  
  
eureka:  
  instance:  
    hostname: localhost  
  client:  
    registerWithEureka: false  
    fetchRegistry: false  
    serviceUrl:  
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

Eureka Client配置 (application.yml):

spring:  
  application:  
    name: my-microservice  
  
eureka:  
  client:  
    serviceUrl:  
      defaultZone: http://localhost:8761/eureka/

 在Spring Boot应用程序中启用Eureka客户端发现:

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication  
@EnableEurekaClient  
public class MyMicroserviceApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(MyMicroserviceApplication.class, args);  
    }  
}

API网关:Kong

        Kong是一个开源的API网关,它提供了API路由、认证、限流、监控等功能。通过Kong,团队可以统一地管理微服务之间的通信,实现API的安全访问和流量控制。此外,Kong还支持插件机制,可以根据需求扩展新的功能。

容器代表性技术

容器编排工具:Kubernetes(K8s)

        Kubernetes是一个开源的容器编排平台,它可以自动化管理大量的容器化应用程序。Kubernetes提供了强大的容器编排和调度功能,可以根据需求自动扩展或缩减容器的数量。此外,Kubernetes还支持滚动更新、自动恢复等功能,确保应用程序的高可用性和稳定性。

定义一个简单的Kubernetes部署(Deployment)文件:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: my-app-deployment  
spec:  
  replicas: 3  
  selector:  
    matchLabels:  
      app: my-app  
  template:  
    metadata:  
      labels:  
        app: my-app  
    spec:  
      containers:  
      - name: my-app-container  
        image: my-app-image  
        ports:  
        - containerPort: 8080

创建一个服务(Service)以暴露Pod:

apiVersion: v1  
kind: Service  
metadata:  
  name: my-app-service  
spec:  
  selector:  
    app: my-app  
  ports:  
    - protocol: TCP  
      port: 80  
      targetPort: 80

容器仓库:Harbor

        Harbor是一个开源的容器镜像仓库,它提供了镜像的存储、管理、安全等功能。通过Harbor,团队可以方便地共享和管理容器镜像,确保镜像的安全性和一致性。此外,Harbor还支持多租户、访问控制等功能,满足团队之间的协作需求。

感兴趣的小伙伴可以关注我的公众号:JTY的打工日记,会不定时在里面更新文章。

标签:原生,容器,服务,my,什么,应用程序,番外篇,app
From: https://blog.csdn.net/qq_53567504/article/details/136662906

相关文章

  • 哇!什么情况?这么好看的个人博客首页,还这么简单,这简直就是为呆呆的我学习量身准备的
    在这个万物vue的年代,网页设计越来越框架化。上网搜个资料学习学习吧,咵咵咵,“游泳健身,vue了解一下”我只是想简单地学个html,js啊!怎么就这么复杂!曾几何时,在网上找个网页模板,纯纯的html不带一点儿复杂的东西,最多加点儿jquery。我上面加个头就能当jsp的课后作业了。虽然这种东西......
  • 为什么数据库连接很消耗资源?
    开发应用程序久了,总想刨根问底,尤其对一些有公共答案的问题。大家都能解释,但是追根究底,都解释不清。凡是都有为什么,而且用数字说明问题是最直观的。本文主要想探究一下连接数据库的细节,尤其是在Web应用中要使用数据库来连接池,以免每次发送一次请求就重新建立一次连接。对于这个问题......
  • 什么是服务器端广告插入(server side ad insertion - SSAI)- 为什么说采用IAB技术实验室
    服务器端广告插入(SSAI-serversideadinsertion)是在联网(有线)电视上广告竞标行动中的最流行的技术解决方案之一。SSAI是一种在视频流加载到用户设备之前将广告植入在一起的技术。它可以用于任何连接或超顶级(overthetop-OTT)视频环境,包括社交环境,但大部分需求来自CTV的爆......
  • 面试官:Spring Boot 微服务中你使用了哪些 starter maven 依赖项?这些 starter 到底是什
    该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点面试官:SpringBoot微服务中你使用了哪些startermaven依赖项在SpringBoot微服务中,可以使用大量的StarterMaven依赖项来简化项目配置和快速集成各种功能,包括......
  • 在Linux中,文件系统层次结构是什么?以及目录作用是什么?
    在Linux操作系统中,文件系统层次结构是一种树状结构,也称为目录层级结构,它的顶部是根目录/。这个结构遵循FilesystemHierarchyStandard(FHS),它是一套规范,用来指导Linux及其他类Unix系统中文件和目录应该如何布局以保持一致性。下面是Linux文件系统层次结构的主要组成部分以及各目......
  • 在Linux中,内核主要功能及作用是什么?
    在Linux操作系统中,内核作为其核心组件,承担着系统底层服务和关键管理职责。以下是Linux内核主要功能及作用的详细说明:进程管理:进程调度:内核通过调度算法控制进程对CPU的使用权,确保多个进程公平地分享计算资源。它负责创建、终止进程,以及在进程状态改变时进行上下文切换。进程......
  • 什么叫运行时的Java程序?
    Java程序的运行包含编写、编译和运行三个主要步骤。1.在编写阶段:开发人员在Java开发环境中输入程序代码,形成后缀名为.java的Java源文件。2.在编译阶段:使用Java编译器对源文件进行错误排查,并生成后缀名为.class的字节码文件。3.最后,在运行阶段:JRE中的Java解释器将字节码文件......
  • 为什么weak_ptr可以解决循环引用问题
    weak_ptr可以解决循环引用问题的主要原因在于它不会增加对象的引用计数,从而不会导致对象无法被销毁。在循环引用中,两个或多个对象相互持有对方的shared_ptr,导致对象的引用计数始终不为零,即使程序不再使用这些对象,它们也无法被销毁,从而造成内存泄漏。weak_ptr的引入可以打破这......
  • 本地化部署跟SaaS云部署有什么区别?
    在数字化时代,企业对于部署软件的方式有着多种选择,其中最为常见的两种方式便是本地化部署和SaaS云部署。这两种方式各有优劣,适用于不同的业务场景和需求。那么,它们之间究竟有哪些区别呢?  一、技术架构与实现方式 本地化部署是将软件安装在客户自己的服务器上,客户需要自行......
  • 为什么要学网络安全?详解3大理由!
    网络安全人才一将难求,缺口高达95%在以前,很多政企单位在进行IT部门及岗位划分时,只有研发和运维部门,安全人员直接归属到基础运维部;而现在,越来越多单位为了满足国家安全法律法规的要求,必须成立独立的网络安全部门,拉拢各方安全人才、组建SRC(安全响应中心),为自己的产品、应用......