軟件可用性
盡管在過去的幾年中,Solaris仍然是一個小眾的操作系統(無論如何還是有許多其他平臺),但Sun和社區在將其推廣為開發人員的桌面替代品方面做得非常出色。 甚至為開發人員提供了一個特定的發行版 : Solaris Express Developer Edition 。 它已經停產了,無論如何如今確實沒有必要了。 較新的Solaris發行版(例如SXCE,OpenSolaris,OpenIndiana)包括(捆綁或在官方軟件包存儲庫中):
- 數據庫(MySQL,PostgreSQL)。
- Web服務器(Apache,Java Enterprise System Web服務器等)。
- 應用程序服務器(Glassfish)。
- SAMP堆棧(Solaris + Apache + MySQL + PHP)。
- IDE(NetBeans,Eclipse)。
- 支持其他流行語言(Ruby,Groovy等)。
- 身份管理(LDAP,Java Enterprise System身份服務器)。
Solaris還是企業選擇的平臺,因此支持常見的企業軟件包,作為Java開發人員或Java架構師,您將不會錯過構建開發環境所需的部分。 作為Java開發人員,我經常需要的非常基本的軟件包是:
- Oracle RDBMS。
- Oracle WebLogic應用服務器。
- IBM WebSphere Application Server。
- JBoss應用服務器。
Solaris的技術
Solaris獲得了一些獨特的技術,而其他UNIX(和類似UNIX的)系統可能缺少用作開發平臺的(或從Solaris移植過來的)。這里重要的不是“自身的技術”或僅在以下方面有用的技術:大型企業環境,但事實是:
- 它們已經很好地集成在Solaris中,并且可以相互利用。
- 在常見的使用案例中,這些技術確實對開發人員有幫助。
他們每個人都應該擁有幾個職位,但是,我將嘗試舉一些簡潔的例子。
Solaris服務管理工具
盡管該技術對于系統管理員來說可能是最有用的,但作為開發人員,我經常利用它。 SMF是為服務和服務管理提供統一模型的框架。 基本配方僅需要服務的XML描述符。 SMF可讓您:
- 定義服務:啟動腳本的位置,參數和語義。
- 建立服務之間的依賴關系:
- 服務和服務實例可能依賴于其他服務實例。
- 服務啟動是在并行考慮服務依賴關系的情況下執行的。
- 增強的安全性和基于角色的細粒度訪問控制:
- 只能為服務分配運行所需的最低特權集。
- 可以使用Solaris RBAC(基于角色的訪問控制)將服務管理委派給非root用戶。
- 服務健康控制:
- 服務自動重啟。
- 與Solaris Fault Manager的合作增強了服務的運行狀況,該功能可在發生硬件故障時防止服務降級。
- 自動inetd服務包裝器:SMF自動包裝inetd服務。
典型用例
我使用的每個軟件包都有自己的SMF描述符(隨軟件包一起提供或由我定義),它大大減少了我設置開發機器所需的時間。 例如,對于WebSphere Application Server,我具有以下單獨的服務實例:
- WebSphere IHS。
- WebSphere Application Server。
- WebSphere Application Server DMGR。
- WebSphere Application Server集群節點。
在它們之間定義了依賴關系,我可以僅用一行代碼來啟動所需的WebSphere服務:
svcadm enable [websphere-service-name]
SMF將負責一切。
SMF的使用模式可以進一步增強。 假設您正在一個或多個項目中工作,并且每個項目都需要一組獨特的運行服務。 通常發生以下情況之一:
- 您將它們全部安裝并運行。
- 您將它們全部安裝,并在切換工作項目時手動啟動和停止它們。
對于開發人員而言,資源總是很少,而對于節省資源卻有些偏執。 使用SMF,您可以:
- 為每個項目定義一個SMF服務。
- 對于每個項目,請定義與所需服務的依賴關系。
這樣,您至少可以使用一個命令啟動和關閉特定項目所需的每個服務。 不再:
- 每個服務的自定義外殼腳本。
- inetd服務(例如Subversion,Apache等)的定制配置條目
- 特定的操作系統定制。
- 當您不需要服務并浪費資源時可以運行它們,否則可以使用。
以下帖子中提供了SMF服務清單定制的示例:
- 向SMF注冊服務。
- Solaris 10 SMF管理的服務的憑證和項目 。
- 將Subversion設置為一個inetd服務 。
ZFS
就靈活性和易用性而言,ZFS文件系統是唯一的。 使用極其精簡的命令集,您可以:
- 動態創建文件系統。
- 動態快照文件系統。
- 動態復制文件系統,幾乎沒有使用空間。
關于ZFS的文獻很多,我將限制描述我最喜歡的用例。
用例:復用您的開發環境。
軟件安裝僅僅是用戶體驗的開始。 通常,我們花時間:
- 配置我們的環境。
- 對它們進行微調。
- 定義我們需要的其他庫集。
- 定義我們的應用程序使用的服務器資源集(JDBC,JMS等)。
等等。 列表是無止境的。
有時有必要為同一項目的不同項目或不同開發階段準備不同的環境。 為了避免浪費時間和資源來構建不同的環境,我通常將按以下步驟進行操作:
- 安裝和配置我的環境。
- 為它制作一個ZFS快照。
- 為我需要的所有其他設置制作一個ZFS克隆。
Oracle JDeveloper是我經常克隆的應用程序的一個很好的例子。 盡管采用了在用戶主目錄中使用按用戶配置目錄的通用方法,但JDeveloper基本上是一個單一用戶環境。 我只需要安裝一次,快照它的安裝目錄,然后創建一個ZFS克隆(每個環境一個),而不必擺弄腳本來設置每個用戶的配置參數。 我自己在用戶主目錄中使用了幾個JDeveloper環境的克隆。
ZFS克隆的功能可由Zones基礎結構使用,這將在下一節中看到,從而進一步增強了其功能。 在處理大型安裝(例如您喜歡的虛擬化技術的磁盤映像)時,克隆ZFS文件系統也很有利。
我寫的有關ZFS的其他文章可以闡明其一些用例:
- 設置開發人員環境時,使用ZFS克隆保留磁盤空間 。
- Sun xVM:克隆domU 。
容器和其他虛擬化技術
我認為Solaris是出色的桌面虛擬化平臺。 再次,用幾個命令。 您可以輕松創建半虛擬化的Solaris實例(區域)。 區域基礎結構支持ZFS,并且可以利用它。
可以使用其XML配置文件的命令行界面來配置區域。 創建區域非常簡單,并且由于它們是輕量級技術,因此您可以根據需要創建任意數量的區域。 如果您使用的是ZFS,則克隆區域的過程非常簡單,快捷。
用例:群集應用程序服務器
在開發Java EE應用程序期間,通常將需要以下一項(或多項)的實例:
- 應用服務器。
- Web服務器。
- 數據庫;
- 用戶注冊表。
還希望它們在隔離的環境中運行,以便您可以模擬預期的生產配置。 使用區域很容易:只需創建所需的多個區域,它們中的每一個將表現為一個單獨的Solaris實例:例如,每個區域都有:
- 自己的網卡和IP配置。
- 它自己的用戶,組,角色和安全策略。
- 自己的服務。
您無需準備多次安裝和配置環境,而是準備帶有所需服務的“主”區域。 對于以下每一項,我都有一個“主”區域:
- WebSphere Application Server。
- WebLogic應用服務器。
- Oracle數據庫。
- MySQL數據庫。
- LDAP目錄。
等等。 使用一個簡單的命令( zoneadm clone [-m復制] [-s zfs_snapshot] source_zone ),您將在幾分鐘之內得到一個全新的工作環境。
用例:VirtualBox和ZFS
有時,您寧愿使用其他操作系統的虛擬實例,例如GNU / Linux,FreeBSD和Windows。 Solaris是出色的VirtualBox主機,ZFS的強大功能將使您:
- 為您需要的每個操作系統或每個“操作系統角色”創建“主”映像。
- 即時對其進行克隆以創建全新的虛擬OS映像。
就我而言,我有:
- 具有Visual Studio for .NET開發的Windows 7主客戶端。
- 主Windows Server 2008。
- 帶有SQL Server 2008的Windows Server 2008的主版本(以前版本的克隆)。
- 熟練的Debian GNU / Linux。
每當我需要一個新實例時,我只需要克隆磁盤映像即可。 在短短的幾秒鐘內,我便有了所需的環境。 我不僅節省了寶貴的時間,而且還節省了大量的磁盤空間。 如果我不使用ZFS技術而存儲的所有映像(和區域),則至少需要4倍的磁盤。
用例:虛擬網絡堆棧
Solaris為您提供了非常強大的網絡虛擬化功能。 例如,您可以根據需要創建任意數量的虛擬NIC,并在Solaris Zones中或作為其他虛擬化技術(例如VirtualBox)的網卡獨立使用它們。網卡可以與虛擬交換機(etherstub)互連,并使您能夠創建“盒子中的網絡”。 您不僅可以使用虛擬化的實例來模擬您的生產環境,還可以創建一個虛擬化的網絡來模擬環境可能需要的復雜網絡策略。
如果您需要測試一個環境,如果沒有其他物理機器就無法復制其配置,則可以在其中使用虛擬化技術(例如Zones或VirtualBox)和虛擬化網絡堆棧。 我正在從事的項目的開發人員環境由以下組成:
- 具有兩個負載平衡的IBM IHS實例的兩個區域。
- 具有LDAP目錄的區域。
- 兩個區域具有IBM WebSphere Application Server的兩個集群實例。
- 具有IBM WebSphere DMGR實例的區域。
使用Solaris,我可以在生產環境中復制生產環境,并尊重我們使用的每個網絡配置。 沒有這些技術,要實現這個目標將變得更加困難,否則我將獲得自定義配置(例如,避免端口沖突)。 在所有情況下,如果區域不是那么容易使用,我將在管理和配置此類環境上浪費更多時間。
DTrace
DTrace功能非常容易向開發人員解釋。 同時,不親自嘗試就很難掌握其有用性。 Solaris上的DTrace提供了數以萬計的探針,其他探針可以即時創建。 此“探針”為您提供了一種非常有效的方法來解決應用程序和底層操作系統中的問題。 要使用探針,您必須使用D語言編寫的腳本。 幸運的是,這種語言在設計上非常簡單,您可以用幾行代碼編寫功能強大的D腳本。
DTrace毫不費力,即使在生產環境中,您也可以立即解決問題,而無需修改應用程序。 一些IDE(例如NetBeans)具有功能強大的插件,可讓您編寫D腳本并以精美的圖形查看探針收集的數據。
作為開發人員,我不止一次地重視DTrace的實用性。 我不必使用故障診斷程序來深入研究源代碼并引入其他代碼(即使在方便的情況下),我可以使用D腳本從外部觀察應用程序并快速收集數據,以幫助我確定問題可能出在哪里。
此外,在某些情況下,您會發現自己正在處理沒有可用代碼的情況。 我可以快速解決帶有D腳本的WebSphere Application Server所遇到的問題,而不是依賴于WebSphere跟蹤工具和解釋日志文件的任務。
結論
介紹性文章就這么多。 對于任何開發平臺,都必須“盡可能”地構建與目標環境盡可能接近的開發環境。 此外,我認為在盡可能接近生產環境的環境中工作不僅在應用程序開發階段為您提供了額外的價值和見解,而且還應視為我們參與的每個項目的強制性要求。 Solaris提供了開發人員實現此目標所需的所有工具。
Solaris是一個復雜的企業操作系統,具有許多您可能永遠不會使用的功能。 不過,正如我在本文中試圖指出的那樣,其中許多其他情況都有一個用例。 由于其中一些技術是使用開放源代碼許可證開發的,因此它們也可以在其他操作系統上使用:ZFS在FreeBSD上可用,并且需要社區的努力將其移植到OSX。 DTrace在OS X,Linux和FreeBSD上可用。
“ Solaris優勢”是所有這些技術都是高度集成的,并且可以相互利用。 結果比它們的總和還有價值。 這些技術具有非常完善且易于使用的管理界面:當時間很重要時,“您的工作方式”至關重要。
我希望這些見解可以幫助您了解Solaris操作系統是否以及何時對您有用。 即使您認為并非如此,我還是建議您嘗試一下:在工具箱中添加新技術總是很好的。
參考: The Gray Blog上的 JCG合作伙伴提供了Solaris之所以成為Solaris 出色 Java開發平臺的一些原因 。
- Java最佳實踐
- 使用VirtualBox在PC上安裝Android OS
- Java內存模型–快速概述和注意事項
- 適用于Mac OS X的官方Java 7 –狀態
- Java初學者指南
翻譯自: https://www.javacodegeeks.com/2011/05/solaris-java-development-platform.html