【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者"

在云原生时代,其实Java程序是有很大的劣势的,以最流行的spring boot/spring cloud微服务框架为例,启动一个已经优化好,很多bean需要lazy load的application至少需要3-4秒时间,内存需要几百M,业务逻辑稍微复杂一点点,没有1G以上的内存是很难满足业务的需要呢?

在讨论夸克斯(Quarkus)之前,我们先了解一下什么是云原生。为什么说下一代Java云原生服务就是Quarkus?

云原生架构简介

Cloud Native(云原生),这是一个既陌生又熟悉的名词,它是 Matt Stine提出的一个概念,它是一个思想的集合,包括: DevOps、持续交付(Continuous Delivery)、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等

Cloud Native(云原生)准确来说也是一种文化,更是一种潮流,它是云计算的一个必然导向,意义在于让云成为云化战略成功的基石,而不是障碍。

Cloud Native(云原生)的特点和方面:

  • 技术(微服务,敏捷基础设施)
  • 管理(DevOps,持续交付,康威定律,重组等)

Cloud Native也可以说是一系列Cloud技术、企业管理方法的集合。

Cloud Native(云原生)的定义和概念

Cloud Native(云原生)是更好的工具、自我修复系统、和自动化系统的集合,可以让应用和基础设施的部署和故障修复更加快速和敏捷,极大的降低企业在云计算方面的部署成本。

目前业界公认的云原生主要包括以下几个层面的内容。

  • 容器,服务网格,微服务,不可变的基础设施,公开的API都接近云原生相关概念。
  • 云原生技术可以让系统松耦合,支持弹性伸缩、可管理的、清晰的。

随着容器、kubernetes、Serverless、FaaS技术的演进,CNCF(Cloud Native Computing Foundation ,云原生计算基金会)把云原生的概念更广泛地定义为"让应用更有弹性、容错性、观测性的基础技术,让应用更容易部署、管理的基础软件、让应用更容易编写、编排的运行框架等",希望能够让开发者最好的利用云的资源、产品和交付能力。

云原生的发展历程

  • 2004 年 ~ 2007 年,Google 已在内部大规模地使用像 Cgroups 这样的容器技术;
  • 2008 年,Google 将 Cgroups 合并进入了 Linux 内核主干。
  • 2013 年,Docker 项目正式发布。
  • 2014 年,Kubernetes 项目也正式发布。
    • Kubernetes项目发布的原因也非常容易理解,因为有了容器和 Docker 之后,就需要有一种方式去帮助大家方便、快速、优雅地管理这些容器,这就是 Kubernetes 项目的初衷。在 Google 和 Redhat 发布了 Kubernetes 之后,这个项目的发展速度非常之快。
  • 2015 年,CNCF 成立。
    • 由 Google、Redhat 以及微软等大型云计算厂商以及一些开源公司共同牵头成立了 CNCF 云原生基金会。CNCF 成立之初,就有 22 个创始会员,而且 Kubernetes 也成为了 CNCF 托管的第一个开源项目。
  • 2017 年,CNCF 达到 170 个成员和 14 个基金项目。
  • 2018 年,CNCF 成立三周年有了 195 个成员,19 个基金会项目和 11 个孵化项目,如此之快的发展速度在整个云计算领域都是非常罕见的。

云原生技术生态现状

因此,如今我们所讨论的云原生技术生态是一个庞大的技术集合。CNCF 有一张云原生全景图(github.com/cncf/landsc… 200 多个项目和产品了,这些项目和产品也都是和 CNCF 的观点所契合的。所以如果以这张全景图作为背景,加以思考就会发现,我们今天所讨论的云原生其实主要谈论了以下几点:

云原生基金会 —— CNCF

CNCF是目前云计算领域最成功的开源基金会之一,是 Kubernetes、 etcd、Envoy 等知名开源项目的托管基金会。

云原生技术社区

比如像 CNCF 目前正式托管的多个项目共同构成了现代云计算生态的基石,其中像 Kubernetes这样的项目已经成为了世界首屈一指,非常活跃的开源项目;目前从 CNCF 毕业的项目有很多,例如Kubernetes 、Prometheus、Envoy、CoreDNS、containerd、Fluentd 。

云原生服务架构的原则

高可用架构设计的原则

  • 可观测:可以通过运行状态和数据分析,实现可观测模式下的运行状态和运行数据分析。
  • 可灰度:可以实现蓝绿发布、AB测试、金丝雀发布机制等,实现数据服务的流量控制。
  • 可回滚:可以实现服务的fallback和reback回滚方式。

提高架构可用性的设计原则

  • 解耦:消息队列、分布式队列、服务拆分
  • 冗余:异地容灾、多点部署、主从切换
  • 异构:sidercar模式进行分析和实现
  • 异步:消息队列、异步调用、响应式编程

微服务设计原则

盗用官方图片一个:

原则一:完整性

功能完整性:功能内部逻辑独立,外部依赖较少。

微服务完整性:服务里面的每个微服务都应能独立完成具体的业务操作或者流程,都有明确的输入、输出和处理逻辑。

原则二:技术限制

需要使用事务一致性的功能需要放在一个微服务内,尽量避免分布式事务问题。

原则三:性能扩展

对于用户使用频率较高,性能要求较高的功能可单独作为一个微服务,以便做多节点扩展提升性能。

原则四:耦合性

微服务和微服务之间尽量避免相互调用依赖。可以通过 RPC 远程调用接口的方式,对于关联性较高的功能,应放在同一个微服务内。

公共使用的功能可设计在一个公共微服务。比如日志功能,文件上传功能以及一些底层技术组件等,可设计在一个微服务中。

回到Quarkus上面来

Quarkus云原生的标准

Quarkus可与常用Java标准、框架和库协同工作,例如 Eclipse MicroProfile、Spring(作为 2020 年红帽峰会追踪的一个环节一起演示)、Apache Kafka、RESTEasy (JAX-RS)、Hibernate ORM (JPA)、Spring、Infinispan、Camel 等。

Quarkus上下文和依赖注入

Quarkus 的依赖注入解决方案基于 CDI(上下文和依赖注入),且包含一个扩展框架来扩展功能并将其配置、引导并集成到您的应用中。添加扩展就像添加依赖项一样容易;或者,您可以使用 Quarkus 工具。

Quarkus多语言扩展支持

它还向 GraalVM(一种通用虚拟机,用于运行以多种语言(包括 Java 和 JavaScript)编写的应用)提供正确信息,以便对应用进行原生编译。

惊人的快速启动时间,极低的RSS内存(不仅是堆大小!)在容器编排平台(如Kubernetes)中提供了近乎即时的向上扩展和高密度的内存利用率

双模式进行运行方式

Quarkus的设计从一开始就立足于简单易用,其功能几乎不需要配置即可正常使用。

开发人员可以为其应用选择所需的Java框架,而这些应用可以在JVM模式下运行,也可以在原生模式下进行编译和运行。

为了方便开发人员的工作,Quarkus 还包含以下功能:

  • 实时编码,旨在让开发人员能够即时检查代码更改的影响并快速进行故障排除
  • 带有嵌入式托管事件总线的统一命令式和响应式编程
  • 统一配置
  • 简单的原生可执行文件生成

容器优先

无论是将应用托管在公共云上还是内部托管的Kubernetes集群中,快速启动和低内存消耗等特性对于降低总体主机成本来说都至关重要。

Quarkus 的开发遵从了容器优先的原则,这意味着它已通过以下方式针对降低内存使用和加快启动时间进行了优化:

  • 鼎力支持 Graal/SubstrateVM
  • 构建时元数据处理
  • 减少反射的使用
  • 本机映像预启动

因此,Quarkus 构建的应用其内存消耗只有传统 Java 的 1/10,而且启动时间更快(快了 300 倍),这些都大大降低了云资源的成本。

夸克斯六步

  • 快速搭建属于Quarkus的应用微服务骨架(为构建应用服务奠定基础)
  • Quarkus微服务应用的(开发模式)实现实时热部署能力(改动实时生效)
  • 通过集成多个开源库以及相关业务需求进行开发相关的程序代码
  • 当开发编码完成之后建立版本,进行开发层面集成化测试阶段
  • 建立CLI程序以及创建云原生可执行包文件,并建立对应的容器服务
  • 将对应的云原生文件包直接集成部署到Kubernetes集群中

分享资源

资源分享
获取以上资源请访问开源项目 点击跳转

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/74387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言快速回顾(二)

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…

【Github】SourceTree技巧汇总

sourceTree登录github账户 会跳转到浏览器端 按照Git Flow 初始化仓库分支 克隆远程仓库到本地 推送变更到远程仓库 合并分支 可以看到目前的本地分支(main、iOS_JS)和远程分支(origin/main、origin/HEAD、origin/iOS_JS)目前所处…

C++多线程场景中的变量提前释放导致栈内存异常

多线程场景中的栈内存异常 在子线程中尝试使用当前函数的资源&#xff0c;是非常危险的&#xff0c;但是C支持这么做。因此C这么做可能会造成栈内存异常。 正常代码 #include <iostream> #include <thread> #include <windows.h>// 线程函数&#xff0c;用…

消防态势标绘工具,为消防基层工作助力

背景介绍 无人机测绘技术在消防领域的应用越来越普及&#xff0c;高清的二维正射影像和倾斜摄影实景三维模型能为消防态势标绘提供高质量的素材&#xff0c;消防队急需一个简便易用的、能够基于这些二三维的高清地图成果进行态势标绘的工具软件&#xff0c;使得消防“六熟悉”…

Rust 重载运算符|复数结构的“加减乘除”四则运算

复数 基本概念 复数定义 由实数部分和虚数部分所组成的数&#xff0c;形如a&#xff0b;bi 。 其中a、b为实数&#xff0c;i 为“虚数单位”&#xff0c;i -1&#xff0c;即虚数单位的平方等于-1。 a、b分别叫做复数a&#xff0b;bi的实部和虚部。 当b0时&#xff0c;a&…

(二)结构型模式:2、桥接模式(Bridge Pattern)(C++实现示例)

目录 1、桥接模式&#xff08;Bridge Pattern&#xff09;含义 2、桥接模式应用场景 3、桥接模式的UML图学习 4、C实现桥接模式的示例 1、桥接模式&#xff08;Bridge Pattern&#xff09;含义 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#…

解决ubantu驱动掉了的问题

这里写自定义目录标题 解决ubuntu驱动掉了的问题 解决ubuntu驱动掉了的问题 首先确定是否有驱动&#xff1a; ls /usr/src | grep nvidia若有&#xff0c;则大概率是驱动版本与内核版本对应不上&#xff0c;则把内核版本切换为初始版本即可。参照&#xff1a;https://blog.cs…

【小梦C嘎嘎——启航篇】string介绍以及日常使用的接口演示

【小梦C嘎嘎——启航篇】string 使用&#x1f60e; 前言&#x1f64c;C语言中的字符串标准库中的string类string 比较常使用的接口对上述函数和其他函数的测试代码演示&#xff1a; 总结撒花&#x1f49e; &#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右…

【Spring专题】Bean的生命周期流程图

目录 前言阅读指引 流程图一、之前推测的简单流程图&#xff08;一点点参考&#xff09;*二、Bean生命周期流程图&#xff08;根据Spring源码自结&#xff09;*三、阶段源码流程图&#xff08;不断更新&#xff09; 前言 我向来不主张【通过源码】理解业务&#xff0c;因为每个…

idea报错:java: 程序包org.springframework.web.bind.annotation不存在

这个错误通常都是maven仓库的问题&#xff0c;试了网上很多方法&#xff0c;都没有解决&#xff0c;如果大家有遇到这个问题&#xff0c;且试了很多方法之后都没有解决&#xff0c;不妨可以试试我这个方法 先编译一下已经写好的代码&#xff0c;这时候会出现以上报错&#xff…

ssm基于ssm的人才招聘网站源码和论文

ssm基于ssm的人才招聘网站源码和论文020 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 选题依据&#xff08;研究的背景、目的和意义等&#xff09; 在Internet飞速发展的今天&#xff0c;互联网成为人们快…

云安全攻防(十一)之 容器编排平台面临的风险

前言 容器技术和编排管理是云原生生态的两大核心部分——前者负责执行&#xff0c;后者负责控制和管理&#xff0c;共同构成云原生技术有机体&#xff0c;我们以 Kubernetes 为例&#xff0c;对容器编排平台可能面临的风险进行分析 容器编排平台面临的风险 作为最为流行的云…

c++11 标准模板(STL)(std::basic_stringbuf)(三)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…

【Git】 git push origin master Everything up-to-date报错

hello&#xff0c;我是索奇&#xff0c;可以叫我小奇 git push 出错&#xff1f;显示 Everything up-to-date 那么看看你是否提交了message 下面是提交的简单流程 git add . git commit -m "message" git push origin master 大多数伙伴是没写git commit -m "…

Rx.NET in Action 第三章学习笔记

3 C#函数式编程思想 本章内容包括 将 C# 与函数式技术相结合使用委托和 lambda 表达式使用 LINQ 查询集合 面向对象编程为程序开发提供了巨大的生产力。它将复杂的系统分解为类&#xff0c;使项目更易于管理&#xff0c;而对象则是一个个孤岛&#xff0c;你可以集中精力分别处理…

电脑屏幕闪烁?别慌!解决方法在这!

“我新买了一台电脑&#xff0c;还没用几天呢&#xff0c;就出现了电脑屏幕闪烁的情况&#xff0c;这让我感到很烦躁。有什么方法可以解决电脑屏幕闪烁的问题呢&#xff1f;” 使用电脑的过程中&#xff0c;我们不难发现电脑屏幕有时候会出现闪烁的情况&#xff0c;这会导致使用…

【考研数学】高等数学第三模块——积分学 | Part II 定积分(反常积分及定积分应用)

文章目录 前言三、广义积分3.1 敛散性概念&#xff08;一&#xff09;积分区间为无限的广义积分&#xff08;二&#xff09;积分区间有限但存在无穷间断点 3.2 敛散性判别法 四、定积分应用写在最后 前言 承接前文&#xff0c;梳理完定积分的定义及性质后&#xff0c;我们进入…

Datawhale Django后端开发入门Task01 Vscode配置环境

首先呢放一张运行成功的截图纪念一下&#xff0c;感谢众多小伙伴的帮助呀&#xff0c;之前没有配置这方面的经验 &#xff0c;但还是一步一步配置成功了&#xff0c;所以在此以一个纯小白的经验分享如何配置成功。 1.选择要建立项目的文件夹&#xff0c;打开文件找到目标文件夹…

论文阅读——Adversarial Eigen Attack on Black-Box Models

Adversarial Eigen Attack on Black-Box Models 作者&#xff1a;Linjun Zhou&#xff0c; Linjun Zhou 攻击类别&#xff1a;黑盒&#xff08;基于梯度信息&#xff09;&#xff0c;白盒模型的预训练模型可获得&#xff0c;但训练数据和微调预训练模型的数据不可得&#xff…

微信小程序data-item设置获取不到数据的问题

微信小程序data-item设置获取不到数据的问题 简单说明&#xff1a; 在微信小程序中&#xff0c;通过列表渲染使用wx:for根据数组中的每一项重复渲染组件。同时使用bindtap给每一项绑定点击事件clickItem&#xff0c;再通过data-item绑定数据。 **问题&#xff1a;**通过data-i…