精华内容
下载资源
问答
  • 云原生特点

    2021-07-29 23:57:17
    云原生应该具备以下特性: 存储与计算分离 节点对等 独立扩展 灵活扩容 快速容错

    云原生应该具备以下特性:

    存储与计算分离

    节点对等

    独立扩展

    灵活扩容

    快速容错

    展开全文
  • 云计算是信息技术发展和服务模式创新的集中体现,是信息化发展的重要变革和必然...云原生以其高效稳定、快速响应的特点极大地释放了云计算效能,成为企业数字业务应用创新的原动力,有效推动了国民经济的高质量发展。
  • 以CI/CD、DevOps、微服务架构为代表的云原生技术以其高效稳定、快速响应的特点驱动引领企业的业务发展,帮助企业构建更加适用于云上的应用服务。对企业而言,新旧IT 架构的转型与企业数字化的迫切需求也为云原生技术...
  • 以CI/CD、DevOps、微服务架构为代表的云原生技术以其高效稳定、快速响应的特点驱动引领企业的业务发展,帮助企业构建更加适用于云上的应用服务。对企业而言,新旧IT 架构的转型与企业数字化的迫切需求也为云原生技术...
  • 云原生概念介绍(一)

    千次阅读 2020-08-05 09:54:18
    云原生的概念起始于2015年,概念的准确性也不断随着时间演化,起初云原生的提出者Pivotal对云原生的定义如下: 云原生架构的几个主要特征: 符合12因素应用 面向微服务架构 自服务敏捷架构 基于API的...

    云原生的概念起始于2015年,概念的准确性也不断随着时间演化,起初云原生的提出者Pivotal对云原生的定义如下:
    云原生架构的几个主要特征:

    • 符合12因素应用
    • 面向微服务架构
    • 自服务敏捷架构
    • 基于API的协作
    • 抗脆弱性

    2015年谷歌主导下CNCF成立后,起初对云原生的定义包含以下三个方面:

    • 应用容器化
    • 面向微服务的架构
    • 应用支持容器的编排调度

    2018年重定义:
      
      云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
      
      这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。

    展开全文
  • 本人在学习云原生与微服务架构中的总结资料,参考书籍《Go语言高并发与微服务实战》 仅以此文记录学习过程。 云原生架构之前(即传统飞云原生应用),底层平台负责向上提供运行资源,而应用需要满足业务需求和非...

    在这里插入图片描述

    Hello,我是普通Gopher,00后男孩,极致的共享主义者,想要成为一个终身学习者。专注于做最通俗易懂的计算机基础知识类公众号。每天推送Golang技术干货,内容起于K8S而不止于K8S,涉及Docker、微服务、DevOps、数据库、虚拟化等云计算内容及SRE经验总结
    =======================
    初次见面,我为你准备了100G学习大礼包:
    1、《百余本最新计算机电子图书》
    2、《30G Golang学习视频》
    3、《20G Java学习视频》
    4、《90G Liunx高级学习视频》
    5、《10G 算法(含蓝桥杯真题)学习视频》
    6、《英语四级,周杰伦歌曲免费送!》
    路过麻烦动动小手,点个关注,持续更新技术文章与资料!
    本人在学习云原生与微服务架构中的总结资料,参考书籍《Go语言高并发与微服务实战》
    仅以此文记录学习过程。
    云原生架构之前(即传统飞云原生应用),底层平台负责向上提供运行资源,而应用需要满足业务需求和非业务需求。为了更好地使代码复用,通用性好的非业务需求的实现,往往会以类库和开发框架的方式提供。在SoA、 微服务时代,部分功能会以后端服务的方式存在,在应用中被简化为对其客户端的调用代码,然后应用将这些功能连同自身的业务实现代码一起打包。而云的出现,可以在提供各种资源之外,还提供各种能力(如基础设施,以及基础设施的中间件等),从而帮助应用,使得应用可以专注于业务需求的实现。随着云原生技术理念在行业内进一步实践发展,云原生架构完成了IT架构在云计算时代的进化升级。以CI/CD、DevOps和微服务架构为代表的云原生技术,以其高效稳定、快速响应的特点引领企业的业务发展,帮助企业构建更加适用于云上的应用服务。对企业而言,新旧IT架构的转型与企业数字化的迫切需求也为云原生技术提供了很好的契机,云原生技术在行业的应用持续深化。

    1.1 云计算的历史

    云计算的发展分为三个阶段:虚拟化的出现、虚拟化在云计算中的应用以及容器化的出现。云计算目前在高速发展。

    1.1.1 云计算的基础:虚拟化技术

    云计算的历史事实上需要追溯到60多年前的计算机远古历史:
    在这里插入图片描述

    1955年,John McCarthy(备注:John McCarthy是Artificial Intelligence/人工智能一词的提出者)创造了一种在用户群中共享计算时间的理论。

    1959年6月,在国际信息处理大会上克里斯托弗Christopher Strachey发表了《Time Sharing in Large Fast Computer》论文,提出了虚拟化概念。该文被公认为虚拟化技术的最早论述。

    1965年8月,IBM推出System/360 Model 67 和 TSS 分时共享系统(Time Sharing System),通过虚拟机监视器(Virtual Machine Monitor)虚拟所有的硬件接口,允许多个用户共享同一高性能计算设备的使用时间,也就是最原始的虚拟机技术。

    在20世纪60年代中期,美国计算机科学家 JCR Licklider 提出计算机互联系统(an interconnected system of computers)的想法。

    1969年,在 JCR Licklider 的革命性创意的帮助下,Bob Taylor 和 Larry Roberts 开发了互联网的前身 ARPANET(Advanced Research Projects Agency Network),允许不同物理位置的计算机进行网络连接和资源共享。

    1972年,IBM发布了名为VM(Virtual Machine)的操作系统。在90年代,虚拟机的使用开始流行

    1974年,Popek和Goldberg发表了《Formal Requirements for Virtualizable Third Generation Architectures》提出了虚拟化准备的充分条件,指出满足条件的控制程序可以被称为虚拟机监视器Virtual Machine Monitor (VMM):(1)一致性:一个运行于虚拟机上的程序,其行为应当与直接运行于物理机上的行为基本一致,只允许有细微的差异如系统时间方面;(2)可控性:VMM对系统资源有完全的控制能力和管理权限;(3)高效性:绝大部分的虚拟机指令应当由硬件直接执行而无需VMM的参与。

    1978年,IBM获得了独立磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID)概念的专利。该专利将物理设备组合为池,然后从池中切出一组逻辑单元号(Logical Unit Number,LUN)并将其提供给主机使用。虽然该技术直到1988年IBM才与加利福尼亚州立大学伯克利分校联合开发了第一个实用版本,但该专利第1次将虚拟化技术引入存储之中。

    “Time-Sharing”的背景:自20世纪50年代,人类使用大型计算机系统来处理数据。而在早期,大型计算机体积庞大而且价格高昂。为了提高投资回报率,购买大型机的组织开始实施“分时调度(time-sharing)”,然后从没有处理能力的终端访问大型计算机。“分时”理论可以充分利用可用的计算时间,可以用于为无力购买自己的大型机的小公司提供计算时间。

    这里便陆续出现了云计算的基本前提:共享计算能力和共享网络,并出现了虚拟机,虚拟网络和早期基础设施。

    但是在2000年前后虚拟化技术成熟之前,市场处于物理机时代。当时如果要启用一个新的应用,需要购买一台或者一个机架的新服务器。

    1.1.2 虚拟化技术成熟

    在2000年前后,虚拟化技术逐渐发展成熟:

    在这里插入图片描述

    1998年,VMware成立并首次引入X86的虚拟技术,通过运行在Windows NT上的VMware来启动Windows 95。

    1999年,VMWare推出可在X86平台上流畅运行的第一款VMware Workstation,从此虚拟化技术终于走下了大型机的神话。之后,研发人员和发烧友开始在普通PC和工作站上大量使用该虚拟化解决方案。

    1999年,IEEE颁布了用以标准化VLAN实现方案的802.1Q协议标准草案,从而可以将大型网络划分为多个小网络,使得广播和组播流量不会占据更多带宽的问题;同时,可以利用VLAN标签提供更高的网络段间的安全性。

    2000年,IEEE颁布了虚拟专用网(Virtual Private Network)VPN标准草案,从而使得私有网络可以跨公网进行建立。

    2000年,Citrix桌面虚拟化产品正式发布。

    2001年,VMware发布了第一个针对x86服务器的虚拟化产品ESX和GSX,即ESX-i的前身。

    2003年10月,Xen虚拟化项目首次面世推出了1.0版本,此时仅支持半虚拟化Para-Virtualization。之后,基于Xen虚拟化解决方案陆续被Redhat、Novell和Sun等的Linux发行版集成,作为默认的虚拟化解决方案。

    2003年,Microsoft收购Connectix获得虚拟化技术进入桌面虚拟化领域,之后很快推出了Virtual Server免费版。

    2005年,Xen 3.0发布,该版本可以在32位服务器上运行,同时该版本开始正式支持Intel的VT技术和IA64架构,从而使得Xen虚拟机可以运行完全没有修改的操作系统。该版本是Xen真正意义上可用的版本。

    2006年10月,以色列的创业公司Qumranet在完成了虚拟化Hypervisor基本功能、动态迁移以及主要的性能优化之后,正式对外宣布了KVM的诞生。同年10月,KVM模块的源代码被正式接纳进入Linux Kernel,成为内核源代码的一部分。备注:Qumranet在2008年被RedHat收购。

    2009年4月,VMware推出业界首款云操作系统VMware vSphere。

    云计算的重要里程碑之一是2001年VMWare带来的可用于X86的虚拟化计划。通过虚拟机,可以在同一台物理机器上运行多个虚拟机,这意味着可以降低服务器的数量,而且速度和弹性也远超物理机。

    1.1.3 基于虚拟机的云计算

    在虚拟化技术成熟之后,云计算市场才真正出现,此时基于虚拟机技术诞生了众多的云计算产品,也陆续出现了IaaS、PaaS等平台和公有云、私有云、混合云等形态:

    在这里插入图片描述

    2006年,AWS推出首批云产品Simple Storage Service (S3)和Elastic Compute Cloud(EC2),使企业可以利用AWS的基础设施构建自己的应用程序

    2008年4月,Google App Engine发布,是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。

    2009年,Heroku 推出第一款公有云 PaaS (Platform-as-a-Service)

    2010年1月,微软发布 Microsoft Azure云平台服务。备注:Microsoft Azure 于2008年宣布。

    2010年7月,Rackspace Hosting和NASA联合推出了一项名为OpenStack的开源云软件计划

    2011年,Pivotal推出了开源版PaaS Cloud Foundry,作为Heroku PaaS的开源替代品,并于2014年底推出了Cloud Foundry Foundation。

    2013年底,Google 推出 Google Compute Engine (GCE)正式版。备注:GCE的测试版本于2008年发布,预览版于2012年发布。

    2014年,AWS推出 Lambda,允许在AWS中运行代码而无需配置或管理服务器,即Faas/Serverless。
    在这期间,出现了云计算的多个重要里程碑:

    1. IaaS的出现:通过按时计费的方式租借服务器,将资本支出(Capex)转变为运营支出(Opex),这使得云计算得以大规模兴起和普及。
    2. PaaS的出现
    3. 开源IaaS的出现:云计算已经开始进入开源时代
    4. 开源PaaS的出现
    5. FaaS的出现

    补充术语介绍,Capex Vs. Opex:
    Capex = capital expenditure / 资本支出
    Opex = operational expenditure / 运营支出

    1.1.4 容器的兴起和编排大战

    2013年,在云计算领域发生了一件影响深广的技术变革:容器。

    容器技术可以说是过去十年间对软件开发行业改变最大的技术,而从虚拟机到容器,整个云计算市场发生了一次重大变革,甚至是洗牌。基于容器技术的容器编排市场,则经历了Mesos、Swarm、kubernetes三家的一场史诗大战,最终以kubernetes全面胜利而告终

    在这里插入图片描述

    2008年,LXC(Linux Container)容器发布,这是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。LXC是Docker最初使用的具体内核功能实现

    2013年,Docker发布,组合LXC,Union File System和cgroups等Linux技术创建容器化标准,docker风靡一时,container逐步替代VM,云计算进入容器时代

    2014年底,CoreOS正式发布了CoreOS的开源容器引擎Rocket(简称rkt)

    2014年10月,Google 开源 kubernetes,并在2015年捐赠给 CNCF

    2015年6月,OCI组织成立,旨在制定并维护容器镜像格式和容器运行时的正式规范,以便在不同的操作系统和平台之间移植

    2015年7月,Google联合Linux基金会成立了CNCF组织,kubernetes 成为 CNCF 管理的首个开源项目

    2015年,CNCF组织开始力推 Cloud Nativ ,完全基于开源软件技术栈,Cloud Native 的重要理念是:以微服务的方式部署应用,每个应用都打包为自己的容器并动态编排这些容器以优化资源利用

    2017年9月,Mesos宣布了对Kubernetes的支持

    2017年10月,Docker宣布将在下一版Docker,将同时支持自家调度引擎Swarm和来自Google的调度平台Kubernetes

    2018年3月,Kubernetes 从 CNCF 毕业,成为 CNCF 第一个毕业项目

    这里有两个重要的里程碑:

    1. 2013年,Docker发布,容器逐步替代VM,云计算进入容器时代
    2. 2017年底,Kubernetes 赢得容器编排的胜利,云计算进入 Kubernetes 时代
      在容器编排大战期间,以 kubernetes 为核心的CNCF Cloud Native生态系统也得以迅猛发展,云原生成为云计算市场的技术新热点。

    1.1.5云计算演进总结

    云计算的发展演进历史,有以下规律:

    • 核心构建块的变化:

    从早期的物理服务器,通过虚拟化技术演进为虚拟机,再摆脱机器的限制缩小为构建块,最后通过容器化技术演进为目前的container

    • 隔离单元:无论是启动时间还是单元大小,物理机、虚拟机、容器一路走来,实现了从重量级到轻量级的转变

    • 供应商:从闭源到开源,从单一供应商到跨越多个供应商

    下图形象的概述了这二十年云计算的演进过程:从传统预制IT、托管到云,以及云的不同形态如IaaS、PaaS、SaaS等。

    在这里插入图片描述

    对于XaaS的一路演进,可以简单归纳为:

    • 有了IaaS,客户不用关注物理机器
    • 有了PaaS,客户不用关注操作系统
    • 有了FaaS,客户不用关注应用程序

    在这过去的二十年间,云计算几乎重新定义了整个行业的格局,越来越多的企业开始降低对IT基础设施的直接资本投入,不再倾向于维护自建的数据中心,而是开始通过上云的方式来获取更强大的计算、存储能力,并实现按时按需付费。这不仅仅降低IT支出,同时也降低了整个行业的技术壁垒,使得更多的公司尤其是初创公司可以更快地实践业务想法并迅速推送到市场。

    1.2 云原生是什么

    云原生是云计算的下半场,是否上云已经很少被提及,因为它已经成为一个热门话题,渗透到各行各业。进入到2017年之后,云计算已经不再是“新兴行业”了,换句话说,对于企业用户来说,云云计算技术成为企业发展“战术”的一部分了。

    近几年,云原生火了起来,云元原生词已经被过度消费,很多软件都号称是云原生,云原生本身甚至不能称为是一种架构, 它首先是一种基础设施,运行在其上的应用称作云原生应用,只有符合云原生设计哲学的应用架构才叫云原生应用架构。在了解关于云历生的具体定义之前,我们首先介绍下云原生出现的背景和背后的诉求。

    1.2.1 云原生出现的背景

    移动互联网时代是业务高速发展的时期,不同于传统的应用,移动互联网提供了新的用户体验,即以移动端为中心,通过软件对各行各业的渗透和对世界的改变。移动互联网时代巨大的用户基数下快速变更和不断创新的需求对软件开发方式带来的巨大推动力,传统软件开发方式受到巨大挑战。面对业务的快速迭代,团队规模不断扩大降低沟通协作成本并加快产品的交付速度,为用户呈现更好的体验是各个互联网公司都在努力的方向。

    这样的背景下,微服务和云原生的概念开始流行。康威定律是微服务架构的理论基础组织沟通的方式会在系统设计上有所表达,通过服务的拆分,每个小团队服务一个服务,增加了内聚性,减少了频繁的开会,提高了沟通效率;快速交付意味着更新的频次也高了,更新也容易造成服务的故障问题,更新与高可用之间需要权衡。云原生通过工具和方法减少更新导致的故障问题,保证服务的高可用。

    企业在数字化转型中 普遍面临IT系统架构缺乏弹性,业务交付周期长,运维效率低,高可靠性低等痛点和挑战。将软件迁移到云上是应对这一挑战的 自然演化方式,在过去二十年间,从物理机到虚拟机到容器,从IaaS诞生到PaaS、SaaS、 Faas一路演进,应用的构建和部署变得越来越轻,越来越快,而底层基础设施和平台则越来越强大,以不同形态的云对,上层应用提供强力支撑。所以企业可以通过云原生的一系列技术,例如基于容器的敏捷基础设施、微服务架构等解决企业面临的这些IT痛点。

    1.2.2 云原生的定义

    自从云原生提出以来,云原生的定义就一直在持续地更新。这也说明了云原生的候念随着技术的发展而不断地被深刻认知。

    Pivotal是云原生应用的提出者,并推出了Pivotal Cloud Foundry 云原生应用平合有Spring开源Java开发框架,成为云原生应用架构中的先驱者和探路者。早在2015年,Pivotal公司的Matt Stine写了一本叫做(迁移到云原生应用架构》的小册子,其中探讨云原生应用架构的几个主要特征:符合12因素应用、面向微服务架构、敏捷架构、基于API的协作和抗脆弱性。而在Pivotal 的官方网站上,对云原生(Cloud Native)的介绍包括4个要点,包括: DevOps、 持续集成、微服务架构和容器化。
    在这里插入图片描述

    • DevOps
    • Continuous Delivery
    • Microservices
    • Containers
      2015年CNCF建立,开始围绕云原生的概念打造云原生生态体系,起初CNCF对云原生的定义包含以下三个方面:

    (1)应用容器化(software stack to be Containerized)
    (2)面向微服务架构(Microservices oriented)
    (3)应用支持容器的编排调度(Dynamically Orchestrated)

    云原生包含了一组应用的模式,用于帮助企业快速,持续,可靠,规模化地交付业务软件。云原生由微服务架构,DevOps 和以容器为代表的敏捷基础架构组成。援引宋净超同学的一张图片来描述云原生所需要的能力与特征:

    在这里插入图片描述

    在2018年,随着社区对云原生理念的广泛认可和云原生生态的不断扩大,还有CNCF项目和会员的大量增加,起初的定义已经不再适用,因此CNCF对云原生进行了重新定位。

    2018年6月,CNCF正式对外公布了更新之后的云原生的定义(包含中文版本)v1.0版本:
    Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
    云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
    These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
    这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
    The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.

    云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

    新的定义中,继续保持原有的核心内容:容器和微服务,但是非常特别的将服务网格单独列出来,而不是将服务网格作为微服务的一个子项或者实现模式,体现了云原生中服务网格这一个新生技术的重要性。而不可变基础设施和声明式API这两个设计指导理念的加入,则强调了这两个概念对云原生架构的影响和对未来发展的指导作用。

    在这里插入图片描述

    可以通过访问 https://github.com/cncf/toc/blob/master/DEFINITION.md 查看。

    1.2.3 云原生定义之外

    从上面可以看到,云原生的内容和具体形式随着时间的推移一直在变化,即便是CNCF最新推出的云原生定义也非常明确的标注为v1.0,相信未来我们很有机会看到v1.1、v2版本。而且云原生这个词汇最近被过度使用,混有各种营销色彩,容易发生偏离。因此,云原生的定义是什么并不重要,关键还是云原生定义后面的理念、文化、技术、工具、组织结构和行为方式。

    Joe Beda,Heptio 的CTO,指出:

    There is no hard and fast definition for what Cloud Native means. In fact there are other overlapping terms and ideologies. At its root, Cloud Native is structuring teams, culture and technology to utilize automation and architectures to manage complexity and unlock velocity.
    Cloud Native并没有硬性和牢靠的定义。实际上,还有其他重叠的术语和意识形态。从根本上说,Cloud Native正在构建团队,文化和技术,以利用自动化和架构来管理复杂性和解锁速度。
    We are still at the beginning of this journey.
    我们还处在这个旅程的开始阶段。
    Christian Posta 指出:
    “Cloud native” is an adjective that describes the applications, architectures, platforms/infrastructure, and processes, that together make it economical to work in a way that allows us to improve our ability to quickly respond to change and reduce unpredictability. This includes things like services architectures, self-service infrastructure, automation, continuous integration/delivery pipelines, observability tools, freedom/responsibility to experiment, teams held to outcomes not output, etc.

    “云原生”是一个形容词,用于描述应用,结构,平台/基础设施和流程,这些共同促使我们以比较经济的工作方式来提高能力,实现快速响应变化和减少不可预测性。包括服务架构,自助服务基础设施,自动化,持续集成/交付管道,可观察性工具,实验的自由/责任,坚持结果而不是产出的团队等。

    1.2.4 云原生和12因素

    介绍

    12-Factors 经常被翻译为12因素,符合12因素的应用则称为12因素应用。

    背景

    Heroku(HeroKu于2009年推出公有云PaaS)于2012年提出12因素,告诉开发者如何利用云平台提供的便利来开发更具可靠性和扩展性、更加易于维护的云原生应用。

    为此还有一个专门的12因素网站: https://12factor.net/ ,以及这个网站内容的中文版本: https://12factor.net/zh_cn/ 。

    援引12因素网站的介绍内容:

    如今,软件通常会作为服务来交付,被称为web app,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论:

    • 使用声明式格式来搭建自动化,从而使新的开发者花费最少的学习成本加入这个项目
    • 和底层操作系统保持简洁的契约,在各个系统中提供最大的可移植性
    • 适合在现代的云平台上部署,避免对服务器和系统管理的额外需求
    • 最小化开发和生产之间的分歧,实现持续部署以实现最大灵活性
    • 可以在工具、架构和开发实践不发生重大变化的前提下实现扩展
    • 12因素理论适用于以任意语言编写,并使用任意后端服务(数据库、消息队列、缓存等)的应用程序。

    援引12因素网站的给出的12因素产生的背景:

    本文的贡献者参与过数以百计的应用程序的开发和部署,并通过 Heroku 平台间接见证了数十万应用程序的开发,运作以及扩展的过程。
    本文综合了我们关于 SaaS 应用几乎所有的经验和智慧,是开发此类应用的理想实践标准,并特别关注于应用程序如何保持良性成长,开发者之间如何进行有效的代码协作,以及如何 避免软件污染 。
    我们的初衷是分享在现代软件开发过程中发现的一些系统性问题,并加深对这些问题的认识。我们提供了讨论这些问题时所需的共享词汇,同时使用相关术语给出一套针对这些问题的广义解决方案。

    12因素的局限性

    12因素创作于2012年左右,SaaS平台非常具有指导意义

    12-factor为Web应用程序或SaaS平台的建立非常有用的指导原则,但它在有些地方并不适合微服务体系。

    在标准的12个要素以外,还存在哪些因素, 正如Kevin Hoffmann 最近在 O’Reilly 出版的书上提到了超越 12 个因素的应用。

    内容

    12因素具体内容为:

    Factor描述
    Codebase 基准代码One codebase tracked in revision control, many deploys 一份基准代码,多份部署
    Dependencies 依赖Explicitly declare and isolate dependencies 显式声明依赖关系
    Config 配置Store config in the environment 在环境中存储配置
    Backing services 后端服务Treat backing services as attached resources 把后端服务当作附加资源
    Build, release, run 构建,发布,运行Strictly separate build and run stages 严格分离构建和运行
    Processes 进程Execute the app as one or more stateless processes 以一个或多个无状态进程运行应用
    Port binding 端口绑定Export services via port binding 通过端口绑定提供服务
    Concurrency 并发Scale out via the process model 通过进程模型进行扩展
    Disposability 易处理Maximize robustness with fast startup and graceful shutdown 快速启动和优雅终止可最大化健壮性
    Dev/prod parity 开发环境与线上环境等价Keep development, staging, and production as similar as possible 尽可能的保持开发,预发布,线上环境相同
    Logs 日志Treat logs as event streams 把日志当作事件流
    Admin processes 管理进程Run admin/management tasks as one-off processes 后台管理任务当作一次性进程运行

    在这里插入图片描述

    12因素在云原生架构中的体现:
    在这里插入图片描述

    1.3 云原生的基础架构

    云原生是一系列云计算技术体系和企业管理方法的集合,既包含了实现应用云原生化的方法论,也包含了落地实践的关键技术。云原生应用利用微服务、服务网格、容器、DevOps和声明式API等代表性技术,来构建容错性好、易于管理和便于观察的松耦合系统。下面具体介绍这几个关键技术。

    1.3.1微服务

    为了解决单体的复杂度问题,我们引入微服务架构。在单体应用(也称为巨石应用)的时代,虽然开发简单,但随着业务复杂度的提升,单体应用的益处逐渐减少。它们变得更难理解,而且失去了敏捷性,因为开发人员很难快速理解和修改代码。

    对付复杂性的最好方法之一是将明确定义的功能分成更小的服务,并让每个服务独立迭代。微服务是指将大型复杂软件应用拆分成多个简单应用,每个简单应用描述着一个小业务,系统中的各个简单应用可被独立部署。各个微微服务之问是松耦合的,这样就可以独立地对每个服务进行升级、部署、扩展和重新启动等,从而实现频繁更新而不会对最终用户产生任何影响。相比传统的单体架构,微服务架构具有降低系统复杂度、独立部署、独立扩展和跨语言编程等优点。

    但是,从另一个角度来看,微服务架构的灵话、开发的敏捷也带来了运维的挑战和分布式系统的复杂性。单体应用可能只需部署至小片应用服务器集群, 而微服务架构则需要构建/测试/部署/运行数十个独立的服务,并可能需要支持多种语言和环境;微服务还引入了分布式系统的复杂性,如网络延迟、容错性、消息序列化、不可靠的网络、异步机制、版本化和差异化的工作负载等,开发人员需要考虑以上这些分布式系统问题。其他的问题,如微服务的可测试性、异步机制、调用链过长等,也需要在架构设计时考虑。

    1.3.2 容器

    为了解决微服务架构下大量应用部署的问题,我们引入容器,容器是一种轻量级的虚报化技术,能够在单一主机上提供多个隔离的操作系统环境, 通过系列的Namespace进行进程隔离,每个容器都有唯一的可写文件系统和资源配额, 容器技术分为运行时和编持两层,运行时负责容器的计算、存储、网络等,编排层负责容器集群的调度、服务发现和资源管理。

    容器服务提供高性能、 可伸缩的容器应用管理能力,容器化应用的生命周期管理可以提供多种应用发布方式。容器服务简化了容器管理集群的搭建工作,整合了调度、配置、存储、网络等,打造云端最佳容器运行环境。

    Docker是一个开源的应用容器引擎,使用容器技术,用户可以将微服务及其所需的所有配置、依赖关系和环境变量打包成容器镜像,轻松移植到全新的服务器节点上,而无得重新配置环境,这使得容器成为部署单个微服务的最理想工具。

    仅仅有容器还是不够的,因为人力运维部署成本太大,为了解决容器的管理和调度问题,又引入了Kubernetes. Kubernetes 是Google 开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容和维护等功能。

    我们用Kubernetes去管理Docker集群,可以将Docker看成Kubernetes内部使用的低级别组件。另外,Kubermetes 不仅仅支持Docker,还支持Rocket等其他容器技术。

    1.3.3 服务网格

    微服务技术架构实践中主要有侵入式架构和非侵入式架构两种实现形式。侵入式架构是指服务框架嵌入程序代码,开发者组合各种组件,如RPC、负载均衡、熔断等,实现微服务架构。非侵入式架构则是以代理的形式,与应用程序部署在一起,接管应用程序的网络且对其透明,开发者只需要关注自身业务即可,以服务网格为代表。为了解决微服务框架的侵入性问题,引入Service Mesh。

    Service Mesh 产品的存在和具体工作模式,对于运行于其上的云原生应用来说是透明无感知的,但是在运行时这些能力都动态赋能给了应用,从而帮助应用在轻量化的同时依然可以继续提供原有的功能。

    Service Mesh 使得系统架构的技术栈下移,降低了整个微服务入门的门槛,对于开发者更加友好。Service Mesh提供了一一个方案,就是将整个服务间通信的解决方式以及整个中间件层的技术栈全部下移。从应用当中下移到底层的基础设施,通过加强基础设施的方式提供一个统一的解决方案。

    Serice Mesh处理服务问请求响应的可靠传递,并可用于服务治理、遗留系统的零侵入接入以及异构框架开发的微服务。Service Mesh作为服务间通信的基础设施层,是应用程序间通信的中间层,实现了轻量级网络代理,对应用程序透明,解隅了应用程序的重试/超时、监控、追踪和服务发现。

    除此之外,Serice Mesh提供了专业化的解决方案,其中所涉及的服务通信、容错、认证等功能,都是专业度极高的领城,这些领城应该出现工业级成熟度的制成品,这对于中小企业来说是一个降低成本的选择。

    Service Mesh的开源软件包括Istio、Linkerd、 Envoy、 Dubbo Mesh等。同时,为了让Service Mesh有更好的底层支撑,我们又将Service Mesh运行在Kubernetes上,

    1.3.4 DevOps

    DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、术运营和质量保障(QA)部门之间的沟通、协作与整合。目前对DevOps 有太多的说法和定义,不过它们都有一个共同的思想:解决开发者与运维者之间曾经不可逾越的鸿沟,增强开发者与运维者之间的沟通和交流。

    DevOps的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。市场瞬息万变,同时机会转瞬即逝。互联网公司要实现生存,必须拥有快速试错和迭代产品的能力。那我们有没有办法快速交付价值、灵活响应变化呢?答案就是DevOps, 它是面向业务目标,助力业务成功的最佳实践。DevOps其实包含了三个部分:开发、测试和运维。

    在这里插入图片描述
    与敏捷一样,DevOps将软件程序分解成更小的部分,以提高软件交付速度和质量。DevOp的一个标志是“持续”实践包括持续集成、持续测试、持续交付和持续部署,所有这些都有助于软件产品和软件相关实践的持续改进.DevOps的目标是缩短开发周期,增加部署频率,更可靠的发布。用户可通过完整的工具链,深度集成代码仓库、制品仓库、项目管理、自动化测试等类别中的主流工具,实现零成本迁移,快速实践DevOps.DevOps帮助开发者和运维人员打造了一个全新空间,构建了一种通过持续交付实践去优化资源和扩展应用程序的新方式微服务使DevOps团队能够并行开发独立的功能片段,跨功能团队协作构建、测试、发布、监控和维护应用程序。DevOps 和云原生架构的结合能够实现精益产品开发流程,适应快速变化的市场,更好地服务企业的商业目的。

    1.4 总结

    本文从云原生的发展史开始介绍云计算、虚报化、容器化等技术,随后结合云原生出现的背景介绍云原生的定义。云原生的定义也在不断变化,总得说来,云原生可以理解为应用原生被设计为在云上以最佳方式运行,充分发挥云的优势。最后介绍了云原生架构中涉及到的几个关键技术。

    云原生应用可充分利用云平台服务优势,并快速构建部署到平台上,平台提供了简单快捷的扩展能力并与硬件解耦,提供了更大的灵活性、弹性和跨云环境的可移植性。云原生将云计算作为竞争优势,原生云意味着将云目标从IT成本节约转向业务增长引擎。

    参考链接:https://skyao.io/learning-cloudnative/microservice/

    展开全文
  • 点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!云原生架构是什么回顾过去十年,数字化转型驱动着技术创新和商业元素的不断融合和重构,可以说,现在已经不是由商业...

    点击上方“程序猿技术大咖”,关注并选择“设为星标”

    回复“加群”获取入群讨论资格!

    云原生架构是什么


    回顾过去十年,数字化转型驱动着技术创新和商业元素的不断融合和重构,可以说,现在已经不是由商业模式决定采用何种技术架构,而是由技术架构决定企业的商业模式。所以无论是行业巨头还是中小微企业都面临着数字化转型带来的未知机遇和挑战。机遇是商业模式的创新,挑战来自对整体技术架构的变革。

    新一代的技术架构是什么?如何变革?是多互联网企业面临的问题。而云原生架构则是这个问题最好的答案,因为云原生架构对云计算服务方式与互联网架构进行整体性升级,深刻改变着整个商业世界的 IT 根基

    虽然云原生的概念由来已久,很多人并不理解什么是云原生。从技术的角度来讲,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、 可观测性、灰度等),使业务不再受非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。简单的说,就是帮助企业的业务功能迭代更快、系统能承受住各种量级的流量冲击的同时,构建系统的成本更低。

    传统架构与云原生架构的区别

    上图展示了在代码中通常包括的三部分内容,即业务代码、第三方软件、处理非功能特性的代码。其中“业务代码”指实现业务逻辑的代码。“三方软件”是业务代码中依赖的所有三方库,包括业务库和基础库。“处理非功能性的代码”指实现高可用、安全、可观测性等非功能性能力的代码。

    这三部分中只有业务代码是对业务真正带来价值的,另外两个部分都只算附属物,但随着软件规模的增大、业务模块规模变大、部署环境增多、分布式复杂性增强,使得今天的软件构建变得越来越复杂,对开发人员的技能要求也越来越高。云原生架构相比较传统架构前进了一大步,即从业务代码中剥离了大量非功能性特性到 IaaS 和 PaaS 中,从而减少业务代码开发人员的技术关注范围,通过云服务的专业性提升应用的非功能性能力。

    这便是云原生架构的核心思路。

    为什么需要云原生架构


    解释完什么是云原生架构后,大家可能会有进一步的思考,即当今互联网企业为什么需要云原生架构。分析下 SaaS 的市场规模可以发现,2019 年 SaaS 市场规模为 360 亿元,2020 年仍保持可观上涨趋势,2022 年 SaaS 市场规模预计破千亿。

    纵观中国企业级 SaaS 行业发展历程,大体分为四个阶段:2015 年之前,中国市场和绝大多数中国企业对“什么是 SaaS”缺乏基本认知,基于私有部署的传统软件形式仍为主流,企业级 SaaS 市场方兴未艾。到了 2015 年,随着云计算技术的进一步成熟,中国企业级 SaaS 行业进入快速成长阶段,这个慢赛道逐渐为公众所知。

    时至今日,在疫情、经济、社会环境的大背景下。互联网企业开始寻求新的商业模式,一些抓住机会的 SaaS 企业实现了快速响应,结果是其业务呈现成倍增长,比如:

    • 餐饮 SaaS 厂商帮助线下餐饮门店开发小程序点餐系统,实现无接触点餐。

    • 电商零售领域的 ERP 厂商帮助企业建立会员管理系统。

    • 营销 SaaS 厂商通过流量平台帮助企业在线营销,远程触达客户。

    所以,在“如何活下去”成为热门议题的背景下,快速响应能力成为企业之间的核心竞争优势,SaaS 企业需要及时满足市场的新需求。而这正是前几年中国 SaaS 企业为了快速占领市场、盲目跟风、一味借鉴国外产品所产生的天生缺陷。为弥补这些缺陷,SaaS 厂商需要根据市场的需求快速调整产品服务方向,业务功能要多元化,业务体系需要新的枝杈,在技术上也有更大的挑战。

    除了市场带来的压力,SaaS 企业自身也有诸多痛点:

    • 大多 SaaS 产品只做所谓的通用能力,或者只是一味模仿国外产品,一旦深入到行业属性比较重的场景时便无法满足需求,所以被贴上了“半成品”的标签,导致市场接受程度不如预期。

    • 产品模块单一、功能相似的 SaaS 产品很容易陷入价格竞争,最后只能以亏损获得网络效应,但会终食恶果。

    • 市场对 SaaS 产品的定制化需求过多,使得 SaaS 企业缺乏对产品打磨的精力,把一个 SaaS 型公司做成了项目型公司。

    SaaS 企业解决以上的外忧内患的核心就是专注在业务。要做好一款 SaaS 产品,对于业务渠道、竞争格局、用户体验等诸多方面都有更加严苛的要求,甚至从市场运营、产品经理到研发、运维都要专注在业务,所有这些角色的本职工作都应该为行业业务服务,行业的深度分析,快速响应市场,稳定的产品质量这些是必须要具备的。

    但这就要求技术具备更快的迭代速度,业务推出速度从按周提升到按小时,每月上线业务量从“几十 / 月”提升到“几百 / 天”,并且不可接受业务中断。

    另一个互联网企业需要云原生转型的原因是中国的刘易斯拐点已经到来。刘易斯拐点,即劳动力过剩向短缺的转折点,是指在工业化进程中,随着农村富余劳动力向非农产业的逐步转移,农村富余劳动力逐渐减少,最终达到瓶颈状态。用大白话说就是中国的人口红利已经逐渐消退,企业劳动力成本不断增加,加上 2020 年疫情的影响,成本因素越来越成为企业的重要考量。

    而 SaaS 产品订阅制付费、通用性强、低部署成本的特点,便成了企业降本增效的新选择。这是 SaaS 企业在市场中的机会,而且对于 SaaS 企业本身来说,同样有降本增效的需求,而且内部降本增效做得越好,SaaS 产品在市场上的竞争力会更加明显。

    以上这些现状的解法和云原生架构和核心能力不谋而合:

    • 云原生将三方软件和非功能性能力的完全兜底,可以极大程度解放企业研发、运维人员的精力,并使其可以专注在业务上。

    • 系统的横向扩展性、高可用性、健壮性、SLA 由云原生架构兜底,解决了 SaaS 产品最忌讳的稳定性问题。

    • 将一些自建的组件迁移至云原生架构中,对传统的部署方式和资源进行云原生化,GitOps 的落地,在资源成本和人力成本方面都有进一步的优化。

    如何落地云原生架构


    在聊如何落地云原生架构之前,我们先来看一看云原生架构成熟度模型(SESORA):

    云原生架构成熟度模型

    云原生架构成熟度模型有六个评判维度,可以将成熟度划分为 4 个级别。我会从自动化能力、无服务化能力、弹性能力、可观测性、韧性能力这五个维度,贯穿说明如何落地云原生架构。

    传统架构

    上图展示的是一个较传统的 Java+SpringCloud 架构应用服务侧的部署架构。除了 SLB,基本上所有的组件都部署在 ECS 上。下面我们来一起看看如何将这个架构转型为云原生架构。

    无服务化(Serverless)

    Serverless 的概念是什么在这篇文章不再赘述,可以参阅这篇文章进行了解。使用 ECS 集群部署服务的架构有两个显著的短板:

    • 运维成本高:ECS 的各项状态、高可用都需要运维同学维护。

    • 弹性能力不足:每次有大促活动时,都需要提前购买 ECS,扩展服务的节点数,然后再释放,并且这种情况只适用于定时定点的活动,如果是不定时的流量脉冲则无法应对。

    所以首先我们要将服务的部署方式 Serverless 化,我们可以选择 Serverless App Engine(SAE)作为服务应用的发布、部署平台。SAE 是面向应用的 Serverless PaaS 平台,能够帮助用户免运维 IaaS、按需使用、按量计费,做到低门槛服务应用云原生化,并且支持多种语言和高弹性能力。

    1、命名空间

    打开 SAE 控制台,我们首先创建命名空间,SAE 的命名空间可以将其下的应用进行网络和资源的逻辑隔离,通常我们可使用命名空间来区分开发环境、测试环境、预发环境、生产环境。

    2、创建应用

    创建好命名空间后,我们进入应用列表,即可选择不同的命名空间,看到其下的应用或者创建应用:

    选择对应的命名空间,然后创建应用:

    • 应用名称:服务名称,用户自行输入。

    • 专有网络配置:

      • 自动配置:自动帮用户配置 VPC、Vswitch、安全组。这些组件都会新创建。

      • 自定义配置:用户选择命名空间,VPC,VSwitch 以及安全组。一般选择自定义配置,因为咱们的服务所属的VPC肯定要和其他云资源的 VPC 是相同的,这样才能保证网络畅通。这里需要注意的一点是,当在新的命名空间下第一次创建好应用后,该命名空间就会和所选的 VPC 进行绑定,之后再创建应用时,该命名空间对应的 VPC 不可更改。如果需要更改,可以进入命名空间详情进行更改。

    • 应用实例数:应用(服务)节点数量,这里的节点数量按需设置,而且不是最终设定,因为后续可以手动或者自动的扩缩节点数。

    • VCPU/ 内存:该应用在运行过程中需要的CPU和内存的规格。这里的规格是单个实例数的规格。既如果选择了 2C4G,那么有 2 个实例的话,就是 4C8G。

    配置完基本信息后,下一步进入应用部署配置:

    • 技术栈语言:Java 语言支持镜像、War 包、Jar 包三种部署方式,其他语言支持镜像部署方式。以 Java Jar 包方式为例:

      • 应用运行环境:默认标准 Java 应用运行环境即可。

      • Java 环境:目前支持 JDK7 和 JDK8。

      • 文件上传方式:支持手动上传 Jar 包或者配置可以下载 Jar 包的地址。

    • 版本:支持时间戳和手动输入。

    • 启动命令设置:配置 JVM 参数。

    • 环境变量设置:设置容器环境中的一些变量,便于应用部署后灵活的变更容器配置。

    • Host 绑定设置:设置 Host 绑定,便于通过域名访问应用。

    • 应用健康检查设置:用于判断容器和用户业务是否正常运行。

    • 应用生命周期管理设置:容器侧的生命周期脚本定义,管理应用在容器在运行前和关闭前的一些动作,比如环境准备、优雅下线等。

    • 日志收集服务:和 SLS 日志服务集成,统一管理日志。

    • 持久化存储:绑定 NAS。

    • 配置管理:通过挂载配置文件的方式向容器中注入配置信息。

    我使用 Jar 包的方式部署完应用后,在对应命名空间下就可以看到刚刚创建的应用了:

    点击应用名称可以查看应用详情:

    3、绑定 SLB

    因为 ServiceA 在架构中是对外提供接口的服务,所以需要对该服务绑定公网 SLB 暴露 IP 和做负载均衡,在 SAE 中,绑定 SLB 非常简单,在详情页中,即可看到应用访问设置:

    添加 SLB 时可以选择新建也可以选择已经创建好的 SLB:

    4、服务/配置中心

    对于微服务架构,服务中心和配置中心是必不可少的,大家常用到一般是 Nacos、Eureka、ZooKeeper 三种。对于云原生架构来讲,根据不同的场景,服务/配置中心可以有以下几种选择:

    对于现状就是使用 Nacos 的客户而言,转型云原生架构,服务/配置中心如上面表格所示有两种选择:

    • 需要快速转型,对服务/配置中心高可用要求不是特别极致的情况下,建议直接使用 SAE 自带的 Nacos 即可,代码不需要做改动,直接在 SAE 中创建应用即可。SAE 控制台提供的配置管理在界面操作和功能上和开源 Nacos 的控制台基本一致。

    • 对服务/配置中心高可用要求比较高的情况下,建议使用 MSE Nacos,它的优势是独享集群,并且节点规格和节点数量可以根据实际情况动态的进行调整。唯一不足的一点就是需要修改 Nacos 的接入点,算是有一点代码侵入。

    对于现状是使用 Eureka 和 ZooKeeper 的客户而言,建议直接使用 MSE Eureka 和 MSE ZooKeeper。

    这里我简单介绍一下 MSE。微服务引擎 MSE(Microservice Engine)是一个面向业界主流开源微服务框架 Spring Cloud 和 Dubbo 一站式微服务平台,提供治理中心、托管的注册中心和托管的配置中心。这里我们用到的是 MSE 的托管注册中心和托管配置中心。

    MSE 有三块核心的功能点:

    • 支持三大主流服务中心,节点规格和数量灵活搭配,可在运行时动态调整节点规格/数量。

    • 通过命名空间逻辑隔离不同环境。

    • 配置变更实时推送并且可追踪。


    弹性能力(Elasticity)


    云原生架构成熟度模型中的弹性能力同样依托于 SAE 来实现,因为 Serverless 的底层实现原理,所以在 SAE 中的应用实例数(节点数)扩缩速度非常快,可达到秒级。

    进入应用详情页的实例部署信息,可以看到应用的具体实例:

    SAE 提供了两种扩缩应用实例数的方式,手动方式和自动方式。


    1、手动扩缩

    在控制台右上方有手动扩缩操作按钮,然后选择要扩缩到的实例数即可:

    当进行扩缩时,我们可以看到具体实例的变更状态:

    2、自动扩缩

    在控制台右上角有自动扩缩操作按钮,然后可以看到创建扩缩规则的界面。SAE 自动扩缩提供时间策略和指标策略两种。

    上图是时间策略,即设置好具体的时间节点,在这个时间节点要将应用的实例数扩到几个或者缩到几个。这种策略适合流量高峰期有相对明确时间节点的场景,比如在线教育的客户,通常流量高峰在晚上 8 点开始,11 点逐渐结束,这种情况下,通过定时策略在 7 点半左右把应用的实例数扩起来,然后 11 点之后逐渐把应用实例数缩回正常。

    上图是指标策略,目前提供 CPU 使用率、内存使用率、应用的 QPS 阈值、应用接口平均响应时间(RT)阈值四种指标,这四种指标可以配合使用。当这四种指标其中有一种达到阈值后就会触发扩容,会对应用实例进行逐渐扩容。当指标小于阈值后触发缩容。这种策略适合流量高峰时间不固定的场景,比如市场营销,游戏运营。

    3、成本优化

    对于弹性能力,大家可能更多的是关注它能让系统快速支撑流量脉冲,增加系统横向扩展的能力。其实因为SAE有极致的弹性能力,再加上按分钟、按量计费的模式,对整体的资源成本是有一定优化的。

    可观测性(Observability)

    应用侧的可观测性分两个维度,一是纵向的 Metrics 指标,比如主机的 CPU、内存、磁盘各项指标,Pod 的 CPU、内存各项指标,JVM 的 Full GC、堆内存、非堆内存各项指标。另一个维度是横向的请求调用链路监测,上游服务到下游服务的调用、上游接口到下游接口的调用。

    在监控微服务架构时,通常需要从三个角度来看:

    • 应用的整体健康状况。

    • 应用每个实例的健康状况。

    • 应用每个接口的健康状况。

    而SAE对应用的监控也都覆盖了上述这两个维度和三个角度。

    1、应用整体健康状况

    进入应用详情页,点击左侧菜单中的应用监控/应用总览,便可以看到应用的整体状况:

    • 总请求量:可以一目了然的看到请求量是否明显的异常,比如骤降或者陡升。

    • 平均响应时间:应用整体接口的平均响应时间,这个指标直接反映最真实的应用健康状况。

    • Full GC:JVM 里比较重要的指标,也是会直接影响系统性能的因素。

    • 慢 SQL:智能抓取执行时间大于 500ms 的 SQL。

    • 一些曲线视图:帮助我们掌握不同时段的应用情况。

    2、应用实例节点健康状况

    进入应用详情页,点击左侧菜单中的应用监控/应用详情,便可以看到应用每个节点的信息:

    从上图可以看到,左侧会列出当前应用的所有实例节点,包括该节点的平均响应时间、请求次数、错误数、异常数。如果我们按照影响时间降序排序,比较靠上的节点就是响应时间较慢的节点,然后我们就需要分析是什么原因导致这些节点的响应时间较慢。所以,右侧会提供了一些检查维度来帮助我们分析排查问题。

    比如查看 JVM 指标:

    3、应用接口健康状况

    进入应用详情页,点击左侧菜单中的应用监控/接口调用,便可以看到应用每个接口的信息:

    接口监控和应用实例节点监控的思路一致,左侧会列出所有请求过的接口,同样显示了响应时间、请求数、错误数,右侧同样提供了一些检查维度来帮助我们分析接口 RT 高的原因。

    比如查看 SQL 调用分析:


    4、纵向 Metrics 指标

    在上述三个角度中,其实已经涵盖了绝大多数 Metrics 指标,比如有应用健康状态的指标、JVM 的指标、SQL 指标、NoSQL 指标等。


    5、横向调用链路

    在很多时候,我们单纯的看 Metrics 指标是无法确定问题的根本原因的,因为会涉及到不同服务之间的调用,不同接口之间的调用,所以需要查看服务和服务之间、接口和接口之间的调用关系以及具体的代码信息。在这个维度上,SAE 集成的 ARMS 的监控能力便可以实现。我们在应用监控/接口调用/接口快照中可以看到有请求的接口快照,通过 TraceID 便可以查看该接口的整体调用链路:

    从上面这个图我们可以看出很多信息:

    • 该接口在服务级别的完整请求链路,比如 ikf(前端)-> ikf-web(java 服务)-> ikf-blog(java 服务)-> ikf-blog(java 服务)。

    • 每个服务的状态情况,比如状态一列是红点,说明在这个环节是有异常出现的。

    • 在每个服务中请求的接口名称。

    • 每个服务的请求耗时。

    除了上述这些显性的信息以外,还有一些隐性的信息:

    • 上游服务 ikf-web 的总耗时是 2008ms,但下游服务 ikf-blog 的总耗时是 5052ms,而且耗时起点是一样的,说明 ikf-web 到 ikf-blog 是一个异步调用。

    • 既然 ikf-web 到 ikf-blog 是异步调用,然而 ikf-web 的耗时有 2s 之多,说明 ikf-web 服务中的接口也有问题。

    • 在 ikf-blog 服务中,又有内部接口被调用,因为从调用链上出现了两个 ikf-blog,并且这个内部调用是同步调用,而且问题出现在最后一个接口调用上。

    从以上这些信息可以帮我们缩小和圈定问题根因出现在哪个环节的范围,然后我们可以点击方法栈一列的放大镜,查看具体的方法栈代码信息:

    从方法栈这里我们又可以得到很多显性信息:

    • 具体的方法。

    • 每个方法的耗时。

    • 方法产生的具体异常信息。

    • 数据库操作的具体 SQL 语句,甚至 SQL 上的 Binding Value。

    当然除了显性信息外,还有一个比较重要的隐性信息,比如我们可以看到BlogController.findBlogByIsSelection(int isSelection)这个方法的耗时是 5s,但是该方法内部的数据库操作的耗时很少,只有 1ms,说明耗时是属于业务代码的,毕竟业务代码我们是抓不到也不会去抓取信息的。这时我们可以有两种方式去定位具体问题:

    • 从方法栈信息中已经知道了具体的服务和具体的方法,那么直接打开 IDE 查看、分析代码。

    • 查看方法栈页签旁边的线程剖析,也基本可以确定问题所在。比如上图这个情况,我们查看线程剖析后会发现他的耗时是因为java.lang.Thread.sleep( ):-2 [3000ms]


    韧性能力(Resilience)

    对于云原生架构的韧性能力,我会从优雅上下线、多AZ部署、限流降级三个方面来聊一聊。

    1、优雅上下线

    一个好的产品,要能快速应对用户对产品功能、能力具有普适性的反馈和意见,能快速响应市场需求的变化。那么产品的功能就需要快速的做迭代和优化,从 IT 层面来看,就是要有快速、高效、高质量的发布变更流程,能够随时进行生产环境的服务发布。

    但是这会带来一个核心问题,即频繁的服务发布,并且不能影响用户体验,用户的请求不能断流。所以这就要求我们的系统部署架构中有优雅上下线的能力。

    以微服务架构来说明,虽然开源的产品有能力和方案做到近似优雅上下线,但也是近似做到,当发布服务节点较多的情况下依然会有断流的情况。所以开源方案有诸多问题:

    • 注册中心不可靠、通知不及时。

    • 客户端轮训不实时、客户端缓存。

    • 自定义镜像非1号进程,Sigterm 信号无法传递。

    • 无默认优雅下线方案,需要添加 actuator 组建。

    在无服务化/服务配置中心章节中,我阐述了 SAE 自带的服务中心和 MSE 的服务中心,无论使用那种方案,我们都对优雅上下线做了进一步的优化。

    从上图可以看到,部署在 SAE 的应用具有主动通知服务中心和服务消费者的能力,再结合 Liveness 应用实例探活和 Readiness 应用业务探活的机制,能让我们的服务在进行部署和因为其他原因挂掉时不会影响用户的正常访问。


    2、多 AZ 部署

    本着鸡蛋不能放在一个篮子里的原则,一个应用的多个节点,应该分布在不同的可用区,这样整体应用的高可用和健壮性才是足够好的。SAE 支持设置多个交换机(VSwitch),每个交换机可以在不同的可用区,这样在部署、扩容应用的节点时会随机从可选的可用区拉起实例:

    这就避免了当某个可用区出现问题挂掉时,整体系统因为在一个可用区而挂掉,这也是最基本的同城多活的实践。


    3、限流降级

    限流降级是系统断臂求生的能力,在遇到突发的流量脉冲时,可以及时限制流量,避免整个系统被击穿,或者当流量超出预期时,及时切断非核心业务,释放资源来支撑核心业务。

    目前对于 Java 应用,SAE 也支持限流降级的能力,首先对应用的所有接口的请求指标进行抓取和监控:

    然后我们可以针对每一个接口设置流控、隔离、熔断的规则,比如我对 /checkHealth 接口设置一条流控规则:

    当该接口的 QPS 达到 50 后,单个机器超过 50 的请求将快速失败。比如我们对一个有 6 个节点的应用进行压测时,可以看到每个节点的 QPS 情况:

    当开启流控规则后,可以立即看到限流的效果:

    可以看到 QPS 被精准的控制到 50,超过 50 的请求直接返回失败。

    自动化能力(Automation)

    在自动化能力方面,我主要从 CICD 流程这个维度来聊一聊。大家从上面章节的截图可以看到,有很多是 SAE 控制台的截图,在实际应用中肯定不会通过控制台来一个一个发布应用,必然都是通过 CICD 流程来做自动化的应用打包和发布流程。

    SAE 在这个方面提供两种实现自动化运维的方式。


    1、基于 Gitlab 和 Jenkins

    目前很多企业的 CICD 流程都是基于 Gitlab 和 Jenkins 来做的,那么 SAE 也支持将发布的操作集成到这种方案里。这个方案的核心是 SAE 会提供一个 Maven 插件,同时对应有三个配置文件,Maven 插件通过这三个配置文件中的信息将打包好的 Jar/War 或者镜像发布到对应的 SAE 应用中。

    • toolkit_profile.yaml:配置 RegionID、AccessKey ID、AccessKey Secret。

    • toolkit_package.yaml:配置比如应用部署包类型、部署包地址、镜像地址。

    • toolkit_deploy.yaml:配置比如 SAE 应用的 ID、应用所属命名空间 ID、应用名称、发布方式等。

    更详细的配置信息可以参阅该文档。

    然后在 Jenkins 的任务中,对 Maven 设置如下的命令即可:

    clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml 
    
    
    

    这样就可以很容易的将 SAE 的部署流程集成到基于 Gitlab 和 Jenkins 的 CICD 方案里了。

    2、基于 Open API

    还有一些企业会自己研发运维平台,运维赋能研发,由研发同学在运维平台上进行运维操作。面对这种场景,SAE 提供了丰富的 Open API,可以将 SAE 控制台上 90% 的能力通过 Open API 集成到客户自己的运维平台中。详细的 OpenAPI 说明可以参与该文档。

    总结


    基于 SAE 武装过系统后,整体的部署架构会变成这样:

    云原生架构成熟度模型(SESORA)在我阐述的这五个维度一共是 15 分,基于 SAE 的云原生架构在这五个维度会达到 12 分:

    • 无服务化:3分

    • 弹性能力:3分

    • 可观测性:2分

    • 韧性能力:2分

    • 自动化能力:2分

    对于上手、实践、落地快捷简单,又能达到比较好的云原生架构成熟度的 SAE 方案,大家还在等什么呢?一起实践起来吧。


    感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!

    喜欢就点个"在看"呗,留言、转发朋友圈

    展开全文
  • 容器和云原生(一):初识容器化和云原生

    千次阅读 多人点赞 2021-01-29 15:49:45
    总聚焦于应用系统开发和建立在应用系统上的业务模型开发,很容易忽略基础资源重要性(包括裸金属服务器配置和优化、最优组网实践和网络拓扑优化、应用部署的持续集成和持续开发、云上资源分配和云原生),努力走出...
  • 今天我们不讲行业和商业,讲讲2019年最热的概念-云原生(Cloud Native)。 我认为云原生是未来10年IT发展最重要的趋势,但是它涵盖的概念非常多,需要花很多时间研究,同时浩如烟海的资料分散在网络上各个地方,...
  • 数字政府的加速落地,是我国数字经济发展的重要契机,随着政府数字化转型的深入推进,数字政府各产业...二是云原生基础设施催生数字政府新价值;三是协同开放的行业生态逐步建立;四是标准和评估体系推动行业健康发展。
  • 云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再...
  • 这里写目录标题云原生的基础架构1. 微服务2. 容器3. 服务网格5. 声明式 API云原生应用的特征:云原生与“12 因素”1. 方法论和核心思想2. 编码、部署和运维原则3. 具体内容小结参考 云原生的基础架构 云原生中既有...
  • 数字化转型的十年,也是云计算高速发展的十年,这期间新技术不断演进、优秀开源项目大量涌现,云原生领域进入“火箭式”发展阶段。通过树立技术标准与构建开发者生态,开源将云计算实施逐渐标准化,大幅降低了开发者...
  • 大家言必称云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云绕雾罩,一知半解,总之虚得很;甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于写文章的人太蠢,当然这...
  • 把应用迁移到云上就是云原生架构吗?什么才是云原生架构?为什么要作云原生架构?本文告诉你,除了把应用搬到云上,要实现云原生,你还要做很多。
  • 什么是云原生

    千次阅读 2020-03-06 13:16:33
    2015年7月21日Google主导成立了云原生计算基金会,其最初的口号是坚持和整合开源技术来让编排容器作为微服务架构的一部分,致力于云原生应用推广和普及。 CNCF作为一个厂商中立的基金会,致力于Github上的快速成长的...
  • 云原生与微服务

    2020-12-30 20:35:30
    一、什么是云原生? CNCF给出了云原生应用的三大特征: 面向微服务:明确服务间的依赖,互相解耦。 容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用...
  • 关注「开源Linux」,选择“设为星标” 回复「学习」,有我为您特别筛选的学习资料~ 1带你了解云原生技术图谱如果你研究过云原生应用程序和相关技术,大概率你遇到过 CNCF 的云原生全景...
  • hi, 大家好,如今几乎所有大厂都将容器和K8s列入未来的战略重心,K8s可能将成为下一代分布式操作系统,今天分享一篇很经典云原生文章(万字雄文),希望可以帮大家彻底了解到底什么是云原生。...
  • 什么是云原生?聊聊云原生的今生

    万次阅读 2020-03-02 10:46:49
    简介:什么是云原生云原生是在一个怎么样的背景下被提出来的,云原生和传统所说的云计算概念有什么不同?聊聊云原生的今生之事。 云原生这词在这几年突然火了,在很多人还不了解她是什么的时候频频被她刷屏。...
  • 云原生到底是什么?一文了解云原生四要素!

    千次阅读 多人点赞 2020-02-08 15:24:08
    所谓云原生,它不是一个产品,而是一套技术体系和一套方法论,而数字化转型是思想先行,从内到外的整体变革。更确切地说,它是一种文化,更是一种潮流,是云计算的一个必然导向。 随着虚拟化技术的成熟和分布式...
  • 什么是云原生云原生之前 云原生 云原生简介 微服务 DevOps 持续交付 容器化 云原生的发展历程 云原生技术生态现状 云原生基金会 —— CNCF 云原生技术社区 云原生技术产业 我们正处于时代的关键节点...
  • 云原生数据库可以说是当下最火的产品技术形态之一。火到什么程度?很多为了云而云的数据库产品也号称自己是云原生的。 概念大火的同时也让许多门外人打出了一串问号: 云原生数据库到底是怎么一回事儿? 它怎么就...
  • 简介:有幸作为阿里云MVP提前获得了阿里云云原生团队编写的《云原生架构白皮书》,希望通过自己对于云原生的理解为开发者提供一篇观后感或者是能够参考的博文 1 云原生与分布式系统架构的关系 1.1 云原生架构的...
  • 云原生基本介绍

    2021-07-29 10:56:45
    云原生定义 云原生是一条最佳路径或者最佳实践。更详细的说,云原生为用户指定了一条低心智负担的、敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。 因此,云原生其实是一套...
  • 前言9 月初给 BG 的新人开了一门课,专门来讲云原生技术,云原生技术从出现到现在按最早的时间出现来说也是有 10 多年了。尤其是这几年火热的不得了,但是 cloud native 这个外...
  • 云原生技术全面爆发之前,我们开发的应用可以被称为非云原生应用,非云原生应用并没有考虑到应用的弹性和规模性,甚至很多都不具备扩展性,当业务规模扩大时,特别依赖硬件的升级,进而带来了很多问题。云原生的...
  • 云原生的概念 云原生数据库的概念 两种主流技术路线分析 六种云原生数据库方案和功能介绍 云原生数据库的核心功能和价值 背景 随着云计算的蓬勃发展,IT 应用转向云端,云服务出现如下若干特点: 提供按需服务; ...
  • Rainbond 是云原生且易用的云原生应用管理平台,云原生应用交付的最佳实践,简单易用。专注于以应用为中心的理念。赋能企业搭建云原生开发云、云原生交付云。 对于企业: Rainbond 是开箱即用的云原生平台,借助 ...
  • 什么是云原生存储 云原生是一种开发和运行软件应用程序的新范式,它融合了云计算、容器化、Serverless 和微服务等技术趋势。云原生存储是一种旨在用于云原生环境的存储技术。 云原生存储平台可以存储管理有状态应用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,458
精华内容 8,583
关键字:

云原生特点