什么是云原生的应用?

简介: 什么是云原生的应用?

云原生应用的三个核心概念


a9f065a61fa64c3cba5811a4f4f37133.png

链接:https://pan.baidu.com/s/10ocbDCGsdS3i7hEzvUlatA?pwd=m9nr

提取码:m9nr

–来自百度网盘超级会员V5的分享

脑图大家可以下载使用并补充

微服务


什么是单体应用?


传统的单体应用架构都是三层模式:表示层(用户可见的交互页面,如Web页面)、业务层(核心业务逻辑处理)和数据访问层(将应用数据保存到后端存储,如数据库、磁盘等)。然后将它们打包编译后放到一个Web容器(如Tomcat、Jetty)里面运行,如图所示。


这种单体架构在面对小规模、简单的业务场景应用时得心应手,易于开发、测试和部署

90d1169e9152490a83fa36a48e6f0749.png

单体应用的问题


随着业务越来越复杂,用户数(并发数)不断增多,可维护性和可扩展性越来越低


惯用的解决方案是


  • 前端通过负载均衡分流
  • 后端分库分表,增加缓存等。


这些调整可以在一定范围内增加并发,但系统仍然是单体,仍然存在很多问题


(1)维护性差,业务是耦合在一个项目中,任何代码的变动都需要重新上线整个项目。试想几十人维护十几万行代码的场景,系统的任何变化都需要构建整个系统。而且需要开发人员非常熟悉整个系统的架构,否则很容易导致出现“修复一个bug,引发两个bug”的问题。一个典型的案例是Oracle的2500万行C代码,每次修复一个bug需要开发人员花两周时间理解bug,然后修复bug后提交测试,大约花20~30个小时测试bug是否修复


(2)扩展性差,单体的应用始终无法避免的问题是数据库的性能瓶颈,并且在资源扩容的时候很难做到精准控制,比如将一个计算密集型的业务和一个I/O密集型的业务放到一个单体服务中,那么部署该服务的机器就必须同时满足这两点需求,这会造成资源浪费。


(3)交付能力差,尤其在互联网企业,具备较强的交付能力是非常重要的。市场和需求不断变化,需要产品能随之变动。单体应用随着功能不断增多,多个团队需要严密配合,每个开发代码提交的窗口就需要严格被限制,这极大地降低了开发效率,并且单体应用的构建时间随着代码的增多也随之增加。

什么是微服务?


将一个单体服务按照业务逻辑拆解成独立运行的微小服务,服务之间使用轻量级的机制通信

微服务的特点


●业务划分


以业务边界确定服务边界,构建出若干个小而自治的微服务。由多个团队维护一个耦合性很高的系统是非常困难的。微服务可以很好地将架构与组织结构匹配。一个微服务由一个小团队独立完成,这也更符合康威定律。比如可以将产品、合同、订单拆分成三个微服务。


一个微服务就是一个SRP(Single Responsibility Principle**,单一职责)的独立个体**。根据业务边界来确定服务边界,避免与其他服务共用资源。


●轻量级通信

服务之间通过**轻量级的通信协议(**如HTTP、GRPC)互相通信,而无须关系具体的技术栈

一个Go语言的项目可以通过HTTP协议访问Java项目,只需要大家遵循共同的通信协议即可。


●独立部署

每一个服务都可以独立开发、构建、测试和部署。每一个服务只需要连接自己数据库,而不用担心与别的服务之间的耦合,部署更加简单。


●可复用可组合

在微服务的架构下,服务不再属于某一应用,而是可以为不同的应用提供相应的能力,这体现了微服务的最大价值,重用微服务避免了重新编写代码,大大降低了开发成本。在一个企业中,随着公共的微服务,如邮件、短信、OA等不断增多,每个新的项目只需要编写自己的业务逻辑,通过服务调用的方式接入各种外部系统

自动发现与注册机制


微服务将应用拆分后势必导致服务个数的暴增,传统的“写死”服务调用地址的方式已经不适用了,必须有一套服务自动发现与注册机制

如图所示,服务端首先将自己的访问地址注册到注册中心,当客户端通过Proxy访问服务端时,会先通过本地代理,本地代理通过注册中心获取服务端地址,并通过负载均衡策略,将请求转发到服务端,完成服务之间的调用。调用的方式包括HTTP、RPC等。

c96c020e1597442cb97c9e641f3c6896.png

网关的功能


(1)协议转化,将SOAP转化为Rest,将xml转化为json等;


(2)认证鉴权,统一拦截请求,校验权限;


(3)日志审计,记录每个请求的访问日志;


(4)流量管控,控制请求的并发数,防止恶意攻击。


在生产环境中,通常微服务网关会部署多套,分别是内部网关、无线网关、第三方网关等多个网关,并且每个网关都是高可用部署,防止单台故障造成整个服务不可用。

1fb5b3d52d9c42fb887f40a56ce1c265.png

微服务注意事项


应用从单体到微服务,对底层框架的技术要求更高,分布式系统排查问题的难度也会加大,


所以,应用是否需要微服务还得根据实际的生产场景判断,如果只是几个人维护的一个简单应用,是没有必要折腾微服务的,毕竟“适合自己的才是最好的”。

DevOps


随着软件发布迭代频次越来越高,传统“瀑布式”(开发—测试—发布)软件开发流程已经不能满足需求,即传统的开发人员只负责代码开发,而运维人员只负责运行环境的维护,并且研发通常关注功能开发,总是想尽快上线新业务,不断满足新的客户需求,而运维总是想使环境稳定,少出故障,“稳定压倒一切”。任何差错都有可能对生产环境中的用户造成直接影响。开发人员和运维人员的KPI考核指标不同,也导致他们对于软件的侧重点不同,这样造成了很大的隔阂。开发人员不清楚代码在生产环境如何运行,而运维人员也不清楚代码是如何构建出来的。线上环境出了问题只能反馈研发,然后运维人员还得给研发人员讲解一下生产环境如何部署,沟通成本非常高,部门之间合作解决问题导致故障的响应时间较长。

DevOps本质


DevOps本质上是一个开发人员干完所有的活,从代码开发到服务上线,DevOps最先都是一些硅谷的初创公司的大牛们为了节省成本,艺高人胆大,自己干完了所有事,后来发现这样办事的效率很高,然后各个互联网公司也都争相效仿,才慢慢普及的。

DevOps工具链


DevOps是一种方法论,或者是一种软件开发文化。它的具体实现方式和实现工具有很多,按照开发流程,这些工具主要分为以下几个大类。


代码库:Gitlab、GitHub、gogs、svn、BitBucket;


自动构建:Ant、Maven、Gradle;


CI/CD: Jenkins、Travis CI、Fabric、Gitlab CI、buildbot; 、argocd

配置管理:puppet、chef、saltstack、ansible


部署平台:Kubernetes、OpenShift、Mesos

DevOps 领导者


AWS和Netflix

容器化


应用迁移到容器的大前提


将应用迁移到容器最主要的改造是将应用变成“无状态”


什么是“状态”?

状态指的是应用里面的数据状态,具体来说,就是应用的会话、用户数据、中间变量、文件等。


“无状态”就是将应用的状态信息从应用中剥离出去,保存到对应的存储中间件中,


  • 通过Redis保存会话和Token,
  • 通过MySQL保存关系型数据,通过对象存储保存图片。bc771ddf0aef448ca9874f69328c346b.png

微服务和容器的关系


容器的使用方式是允许随意重启,当应用出现问题时,可以通过重启解决。将应用变成无状态,就是为了解决重启带来的数据丢失和不一致问题。


这需要对之前单体的有状态的应用进行微服务改造,容器化和微服务是相辅相成的。


只有通过微服务才能将复杂的业务逻辑拆分、去状态,独立管理。而微服务最好的载体便是容器,容器对应用的要求也是无状态,容器的快速启停、快速部署正适合微服务快速迭代的要求。

CNCF


CNCF维护的项包括了基础云设施、配置管理、运行时、编排,以及应用管理等多方面全栈项目

4723102cee1c44e1b55003e0528c1c54.png

目录
相关文章
|
22小时前
|
Cloud Native Java 关系型数据库
【阿里云云原生专栏】构建云原生应用:基于Spring Boot与阿里云服务的全栈指南
【5月更文挑战第21天】构建云原生应用是企业数字化转型的关键,本文提供了一份基于Spring Boot和阿里云的全栈指南。涵盖从阿里云账号注册、ECS与Docker搭建,到Spring Boot项目创建、业务代码编写和部署。此外,还介绍了如何集成阿里云OSS存储、RDS数据库服务以及ACK容器服务,助力打造高效、可扩展和易管理的云原生应用。
89 3
|
1天前
|
Cloud Native 安全 持续交付
构建未来应用:云原生架构的演进与实践
【5月更文挑战第20天】 在数字化转型的浪潮中,云原生技术以其独特的弹性、可扩展性和敏捷性成为推动企业IT架构现代化的关键力量。本文将深入探讨云原生的核心概念、关键技术以及如何在企业环境中实施云原生架构。我们将从容器化技术的基本原理出发,解析微服务架构的设计原则,并讨论如何通过持续集成和持续部署(CI/CD)实现快速迭代。此外,文章还将涉及如何利用云平台的资源和服务优化云原生应用的性能和安全性。通过对云原生生态的深度剖析,本文旨在为开发者和企业提供一条明晰的路径,以构建和维护在不断变化的市场环境中能够持续创新的应用程序。
|
1天前
|
Kubernetes Cloud Native API
构建未来:云原生技术在企业数字化转型中的应用
【5月更文挑战第20天】 随着企业加速其数字化转型的步伐,云原生技术已成为推动创新与效率的关键驱动力。本文将深入探讨云原生架构的核心组件、优势以及如何在组织中实施这些技术以促进敏捷性和可扩展性。通过分析案例研究和最佳实践,我们将揭示企业如何利用云原生工具和原则来优化资源分配、提高服务可靠性并加快市场响应速度。
|
1天前
|
监控 负载均衡 Java
【阿里云云原生专栏】微服务架构在阿里云云原生平台上的应用实例与优化策略
【5月更文挑战第20天】本文介绍了在阿里云云原生平台实现微服务架构的步骤,包括基于Spring Cloud的Docker化部署、使用ACK部署微服务,以及优化策略:服务发现与负载均衡(借助Istio)和监控日志管理。通过这种方式,企业能提升应用的可扩展性、可维护性和敏捷性。
170 5
|
2天前
|
运维 Kubernetes Cloud Native
构建未来:云原生技术在企业数字化转型中的应用
【5月更文挑战第20天】 随着企业加速迈向数字化时代,云原生技术作为支持快速、灵活开发的关键架构,已成为推动创新的重要力量。本文将深入探讨云原生技术的基本原理及其在企业转型过程中的实际应用,分析如何通过容器化、微服务、持续集成与持续部署(CI/CD)等策略,优化资源利用,提升业务敏捷性并保障系统的可扩展性和可靠性。此外,文章还将讨论面临的挑战和应对策略,为读者提供一个全面理解云原生技术在现代企业环境中所扮演角色的视角。
|
6天前
|
敏捷开发 Cloud Native 持续交付
构建未来应用:云原生技术在企业转型中的关键作用
【5月更文挑战第14天】 随着数字化转型的不断深入,企业对于敏捷性、可扩展性和成本效益的需求愈发显著。云原生技术以其独特的设计理念和架构模式,成为推动企业IT架构现代化的重要力量。本文将探讨云原生技术的基本原理及其如何助力企业在竞争激烈的市场环境中保持灵活性和创新能力,实现从传统IT向现代云基础设施的平滑过渡。
|
6天前
|
Kubernetes Cloud Native 持续交付
构建高效稳定的云原生应用:容器编排与微服务治理实践
【5月更文挑战第14天】 随着企业数字化转型的深入,云原生技术以其弹性、敏捷和可扩展的特性成为现代应用开发的首选模式。本文将探讨如何通过容器编排工具如Kubernetes以及微服务架构的有效治理,构建和维护高效且稳定的云原生应用。我们将分析容器化技术的优势,并结合案例讨论在多云环境下实现持续集成、持续部署(CI/CD)的最佳实践,同时解决微服务带来的分布式复杂性问题。通过本文的阐述,读者将获得一套提升系统可靠性和业务连续性的策略框架。
8 0
|
6天前
|
Cloud Native 安全 应用服务中间件
OpenNJet:新一代云原生应用引擎
OpenNJet:新一代云原生应用引擎
15 0
|
6天前
|
Cloud Native 安全 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第12天】 随着数字化转型的浪潮不断冲击传统IT架构,企业亟需灵活、高效且可扩展的技术解决方案以保持竞争力。云原生技术作为一种新兴的系统构建方式,以其独特的弹性、微服务和持续交付等特性,成为推动企业快速响应市场变化的关键因素。本文将深入探讨云原生架构的核心组件,分析其如何促进企业的敏捷性,以及在实施过程中可能遇到的挑战和解决策略,为企业采纳云原生技术提供参考。
|
6天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【5月更文挑战第11天】 随着数字化转型的深入,企业对技术的敏捷性、可扩展性和成本效益提出了更高的要求。云原生架构作为一种新兴的设计理念和实践方法,正逐渐成为推动企业技术革新的关键力量。本文将深入探讨云原生架构的核心组件,包括容器化、微服务、持续集成/持续交付(CI/CD)以及DevOps文化,并分析它们如何共同作用于企业的IT基础设施,实现灵活、高效的运营模式。同时,我们也将识别在采纳云原生技术时面临的主要挑战,并提出相应的解决策略,以帮助企业顺利过渡到云原生时代。

热门文章

最新文章