雲計算時代 Java 運作時不止 JRE
前言
Java 語言于 1995 年由 Sun 公司首次釋出,次年釋出了 Java 開發工具包也就是常說 Java Development Kit 簡稱 JDK1.0,截止到目前為止最新的版本為 JDK13.0。JRE(Java Running Environment)即 Java 運作環境,包括 JVM、核心類庫、核心配置工具庫等。
在雲計算時代,部分開發者對 Java 運作環境的了解還局限在比較早期的基礎設施角度,限制了很多架構設計,也造成了很多不必要研發投入。
本文嘗試基于自己的見聞梳理一下,在當下的技術條件下,Java 的運作環境有哪些?以便于開發者可以選擇一個相對更合理的基礎設施上,開展研發工作。
1.0 單機時代
單機時代也是 Java 語言誕生的年度,标準的 JRE 是比較好的選擇,有些開發者喜歡用 JDK 做運作環境,有其合理性。
在這個時代或者這種模式下,依然有很多選擇,包括 JRE、JDK 的不同發行商的不同版本,主流的包括 Oracle、Sun 的版本,以及由 IBM、SAP、微軟等釋出基于OpenJDK的版本。整體基本相容,但受一些商業版權、安全、發行商環境等原因,還是略有一些差别。另外,還有一支流是國産 CPU 廠商及作業系統廠商釋出的 JDK。
Java 開發者都熟悉 JVM(Java Virtual Machine),但很多人不了解的是不同發行版中的 JVM 核心可能是不同的。有興趣的同學可以閱讀一下《深入了解Java虛拟機:JVM進階特性與最佳實踐》。
在這裡推薦大家試用下一下阿裡釋出的 OpenJDK :
Alibaba Dragonwell。它是一款免費的, 生産就緒型Open JDK 發行版,提供長期支援,包括性能增強和安全修複。Alibaba Dragonwell作為Java應用的基石,支撐了阿裡經濟體内所有的Java業務,完全相容 Java SE 标準,可以在任何常用作業系統(包括 Linux、Windows 和 macOS)上開發 Java 應用程式, 運作時生産環境選擇Alibaba Dragonwell。
GitHub位址2.0 Web 時代
Web 時代最知名就是那隻叫 Tomcat 的貓,屬于 Apache 基金會的項目。Tomcat 伺服器是一個免費的開放源代碼的Web 應用伺服器,屬于輕量級應用伺服器。雖然它具有處理HTML頁面的功能,但大家更多是将其作為Servlet和JSP容器。(
http://tomcat.apache.org/index.html)
這一次進步的意義在于:開發者可以專注于應用邏輯開發,而不用關心網絡通訊以及如何讓應用作為一個服務來運作,相關職責轉交給了 Tomcat。
對等的應用伺服器還有WebLogic、JBoss 等等。
3.0 大資料時代
大資料時代最知名的系統當推 Hadoop。其核心是借鑒Google的那篇MapReduce論文裡所說的思想:Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages。
Hadoop 架構是由 Java 開發的,雖然 MapReduce 應用程式不一定用 Java 開發,但血溶于水的 Java 是比較好的選擇。尤其那個著名的示例 WordCount 就是基于 Java 編寫。(
http://hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html這一次進步的意義在于:Java開發者可以不用關心資料處理架構,隻需要聚焦在如何用 MapReduce 的思想來拆解要做計算任務。
對等的還有Apache Spark及這兩年比較火的 Apache Flink。不過不同大資料架構的計算模型有差異。
4.0 雲計算時代
如今我們處在雲計算時代,面臨的可選方案就多了很多。善用這些新的 Java 運作環境,會讓開發者的效率有質的提升。
4.0.1 僞雲計算版
僞雲計算版就是買一台 ECS,在上面按照單機時代或者 web 時代的模式運作 Java 程式。這種模式的好處很明顯。
- 學習成本低,上手快。
- 線下遷移線上速度快,幾乎不需要多少改造。
- 初始化階段的貨币化投入少。
這種模式本質上是在利用雲計算的虛拟化特性+硬體運維服務外包,對于開發者而言沒有什麼質的變化,還得不斷的發明輪子。
4.2 真雲時代的運作時
如今公有雲廠商提供了很多更多封裝的Java 運作環境,以期讓開發者專注于更有價值的創造工作。下面以阿裡雲的産品為例來介紹,如何進一步将非核心業務的開發任務外包給運作環境。
4.2.1 企業級分布式應用服務 EDAS
企業級分布式應用服務(Enterprise Distributed Application Service, 簡稱 EDAS)以阿裡巴巴中間件團隊多款久經沙場的分布式産品作為核心基礎元件,面向企業級雲計算市場提供高可用分布式解決方案,是阿裡巴巴企業級網際網路架構解決方案的核心産品。EDAS 充分利用阿裡雲的資源管理和服務體系,引入阿裡巴巴中間件整套成熟的分布式産品,幫助企業級客戶輕松建構大型分布式應用服務系統。
EDAS是一個應用托管和微服務管理的 PaaS 平台,提供應用開發、部署、監控、運維等全棧式解決方案,同時支援 Spring Cloud、Dubbo 等微服務運作環境。開發者可以選擇WAR、JAR、鏡像等不同模式來部署引用。
這種模式的好處是:開發者在企業級平台上編寫業務代碼,代碼一經部署,整個系統即擁有了企業級的高可用能力,省去了自選、自學、自建、自管的行業标杆級方案的學費和時間。
4.2.2 Web應用托管服務(WEB+)
Web應用托管服務(Web+)是一款用來運作并管理Web類、移動類和API類應用程式的PaaS産品,可以使用Java編寫并建構應用程式。在無需管理底層基礎設施的情況下,即可簡單、高效、安全而又靈活的對應用進行部署、伸縮、調整和監控。
開發者隻需要關注應用代碼,即可在零伺服器管理和配置的情況下釋出一個應用部署環境。在團隊内部,可通過檔案共享或源代碼管理的方式快速分發配置描述檔案給所有成員進而快速拉起部署環境。若使用的是開源技術,可使用Web+官方或開源提供方分發的公共配置描述檔案來快速搭建測試或生産環境。
這種模式的好處是:開發者可以集中精力編寫代碼,将管理和配置伺服器、資料庫、負載均衡器、防火牆和網絡等工作交由Web+代勞,相對于 EDAS 會輕量一些。
5.0 函數即服務
函數即服務的核心是讓開發者進一步聚焦業務代碼,其中Serverless 應用引擎略重,函數計算至輕。
5.1 Serverless 應用引擎
Serverless 應用引擎(Serverless App Engine,簡稱 SAE)是面向應用的 Serverless PaaS 平台,幫助 PaaS 層使用者免運維 IaaS,按需使用,按量計費,實作低門檻微服務應用上雲,有效解決成本及效率問題。支援 Spring Cloud、Dubbo 和 HSF 等流行的開發架構,真正實作了 Serverless 架構和微服務架構的完美融合。除了微服務應用外,後續還會支援更多其它類型的應用。
差別于其它 Serverless 産品,SAE 支援 Spring Cloud、Dubbo 等開發架構,真正實作了 Serverless 架構 + 微服務架構的完美結合。支援 WAR、JAR、鏡像三種方式部署,讓零容器基礎的初級使用者也能享受 Kubernetes 的技術紅利。
5.2 函數計算
函數計算(Function Compute)是一個事件驅動的全托管 Serverless 計算服務。開發者無需管理伺服器等基礎設施,隻需編寫代碼并上傳。函數計算會為開發者準備好計算資源,并以彈性、可靠的方式運作代碼。
目前雲計算的抽象粒度大多在機器級别,要管理和使用這些計算資源仍然有不小的門檻和成本。阿裡雲函數計算為解決計算成本和效率問題而生,将計算服務的抽象粒度提高到了函數級别,打造無伺服器概念的應用設計模式。
使用函數計算,開發者将業務代碼部署到函數計算,并以事件驅動的方式觸發函數執行,服務就可以平穩運作。開發者無需再為環境部署、伺服器擴容、伺服器當機等問題煩惱,函數計算提供彈性的擴容機制,并按量計費。此外,函數計算提供日志查詢、性能監控和報警等功能,幫助快速定位問題、排查故障。
這種模式的意義在于:讓開發者回歸到函數層面,關注入參、出參、業務邏輯。當然額外的代價是,需要開發者重新基于新的基礎設施,來構思服務架構,很多既有的經驗都需要重構。
示例如下:
package example;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.StreamRequestHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class HelloFC implements StreamRequestHandler {
@Override
public void handleRequest(
InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
// 在此編寫業務代碼
outputStream.write(new String("hello world").getBytes());
}
}'
// pom.xml
<dependency>
<groupId>com.aliyun.fc.runtime</groupId>
<artifactId>fc-java-core</artifactId>
<version>1.0.0</version>
</dependency>
雲頂雲(yundingyun.com)
國内首批專注于雲計算的雲服務提供商,緻力于“讓雲計算更簡單”。
作為阿裡雲五星授權服務中心,為企業和政府提供“4S”級公有雲、混合雲、私有雲、容器等定制化服務。
為助力企業上雲,雲頂雲技術團隊擁有從方案咨詢、架構設計、部署實施、系統定制、運維托管、技術教育訓練等全方位的服務能力。