【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集群中

分享資源

資源分享
獲取以上資源請訪問開源項目 點擊跳轉

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

廣西一公司泄露22萬個人信息,被罰23萬

近日,廣西北海公安網安部門發現,北海某公司網站存在嚴重數據泄露問題,約22萬個人信息數據已掛在暗網售賣。 經查,涉案公司主要提供網上咨詢服務,在日常工作中收集了個人和企業等大量公民信息,但公司存放數…

【算法題】2547. 拆分數組的最小代價

題目: 給你一個整數數組 nums 和一個整數 k 。 將數組拆分成一些非空子數組。拆分的 代價 是每個子數組中的 重要性 之和。 令 trimmed(subarray) 作為子數組的一個特征,其中所有僅出現一次的數字將會被移除。 例如,trimmed([3,1,2,4,3,4…

一站式自動化測試平臺-Autotestplat

3.1 自動化平臺開發方案 3.1.1 功能需求 3.1.3 開發時間計劃 如果是剛入門、但有一點代碼基礎的測試人員,大概 3 個月能做出演示版(Demo)進行自動化測試,6 個月內勝任開展工作中項目的自動化測試。 如果是有自動化測試基礎的測試人員,大概 …

python序列化反序列化和異常處理筆記

迭代器 迭代是訪問集合元素的一種方式。迭代器是一個可以記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。 1. 可迭代對象 我們已經知道可以對list、tuple、str等類型的數據使用for...in...的…

面試熱題(數組中的第K個最大元素)

給定整數數組 nums 和整數 k,請返回數組中第 k 個最大的元素。 請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。 輸入: [3,2,1,5,6,4] 和 k 2 輸出: 5提到數組中最大元素,我們往往想到就是先給數組…

判斷自己網絡所在的NAT類型

文章目錄 各NAT類型介紹軟件準備流程 各NAT類型介紹 NAT0: OpenInternet,沒有經過NAT地址轉換,公網IP NAT1: Full Cone NAT,動態家寬可以達到最優的狀態,外網設備可以主動發信息給NAT1網絡內的設備。 NAT2: Address-Restricted C…

什么是JavaScript中的柯里化(Currying)和偏函數應用(Partial Application)?它們在JavaScript中有哪些應用場景?

1、什么是JavaScript中的柯里化(Currying)和偏函數應用(Partial Application)?它們在JavaScript中有哪些應用場景? 柯里化(Currying)和偏函數應用(Partial Application)是函數式編程中的兩個重要概念&…

Mybatis 源碼 ④ :TypeHandler

文章目錄 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定義 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…

K8S系列二:實戰入門

寫在前面 本文是K8S系列第二篇,主要面向對K8S新手同學,閱讀本文需要讀者對K8S的基本概念,比如Pod、Deployment、Service、Namespace等基礎概念有所了解。尚且不熟悉的同學推薦先閱讀本系列的第一篇文章:《K8S系列一:概…

遠程控制醫療行業應用解析:如何滿足醫院合規需求?

遠程控制醫療行業應用解析:如何滿足醫院合規需求? 作為一個起源于IT行業的技術,以遠程桌面為基礎的遠程控制技術目前在醫療領域也已經有了比較廣闊的應用前景,尤其是在醫療數字化系統/設備的遠程運維場景,已經有了一些…

如何正確下載tomcat???

親愛的小伙伴,千萬別再去找下網站下載啦,這樣詪容易攜帶病毒。 我們去官方網址下載。 Apache Tomcat - Welcome! 最后下載解壓即可。。。

正則表達式學習詳解

正則表達式 正則表達式(Regular Expression),通常簡稱為正則或正則表達式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進行字符串匹配、替換、提取等操作。 正則表…

2024軟考系統架構設計師論文寫作要點

一、寫作注意事項 系統架構設計師的論文題目對于考生來說,是相對較難的題目。一方面,考生需要掌握論文題目中的系統架構設計的專業知識;另一方面,論文的撰寫需要結合考生自身的項目經歷。因此,如何將自己的項目經歷和專業知識有機…

SQL server中substring 的用法

一:substring函數是SQL中截取字段數據中的其中一部分 --列:提取abdcsef中的abc數據,使用substring實現select substring(abdcsef,1,3) --‘1’表示截取的起始位置是從第一個字符開始,‘3’表示截取后得到的字符串長度為3個字符 二&#xff1…

React源碼解析18(7)------ 實現事件機制(onClick事件)

摘要 在上一篇中,我們實現了useState的hook,但由于沒有實現事件機制,所以我們只能將setState掛載在window上。 而這一篇主要就是來實現事件系統,從而實現通過點擊事件進行setState。 而在React中,雖然我們是將事件綁…

前后端分離------后端創建筆記(07)表單驗證

1、我輸入數據,然后關閉,重新打開會發現殘存的數據仍然保留著 2、點了這個x號,數據就全部被清理了 3、點這三個地方,數據全部都清理掉 4、這里先寫一個方法 4.1 定義一個方法 4.2 這里表單的數據在哪里,就是這個 4.3 …

在 Linux 中使用 cp 命令

cp 命令是 Linux 中一個重要的命令,你可能經常會用到它。 正如名稱所示,cp 代表 復制copy,它被用于 在 Linux 命令行中復制文件和目錄。 這是一個相對簡單的命令,只有幾個選項,但你仍有必要深入了解它。 在展示 cp …

VLLM推理流程梳理

0x0. 前言 本文在對VLLM進行解析時只關注單卡情況,忽略基于ray做分布式推理的所有代碼。 0x1. 運行流程梳理 先從使用VLLM調用opt-125M模型進行推理的腳本看起: from vllm import LLM, SamplingParams# Sample prompts. prompts ["Hello, my n…

二次封裝element-plus上傳組件,提供校驗、回顯等功能

二次封裝element-plus上傳組件 0 相關介紹1 效果展示2 組件主體3 視頻組件4 Demo 0 相關介紹 基于element-plus框架,視頻播放器使用西瓜視頻播放器組件 相關能力 提供圖片、音頻、視頻的預覽功能提供是否為空、文件類型、文件大小、文件數量、圖片寬高校驗提供圖片…

el-table實現懶加載(el-table-infinite-scroll)

2023.8.15今天我學習了用el-table對大量的數據進行懶加載。 效果如下: 1.首先安裝: npm install --save el-table-infinite-scroll2 2.全局引入: import ElTableInfiniteScroll from "el-table-infinite-scroll";// 懶加載 V…