使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【一】
使用AFS, Active Directory和SSSD搭建用于集成電路設計的分布式存儲系統 【一】
- 集成電路設計環境需要怎樣的存儲系統?
- 共享性
- 位置無關(路徑透明)
- 安全性
- 可靠性
- 可伸縮性
- 易用性
- 可維護性
- 高可訪問性
- 兼容性
- 低成本
- 足夠的讀寫速度
- 紀律性
- 兼容流行的集群任務調度軟件
- 集成電路設計環境需要怎樣的用戶系統?
- 統一賬戶管理
- 統一密碼管理
- 賬戶移交
- 強健的密碼校驗協議
集成電路設計環境需要怎樣的存儲系統?
在討論解決方案以前我們先聊一聊需求。對于一個典型的集成電路設計環境,我們需要怎樣的存儲和用戶系統? 我們先看存儲。
共享性
假如你是一位IC設計工程師,公司告訴你有30臺Linux設計服務器可以供你和你的同事使用,你最先想到的需要是什么?
我可不想管理30個Linux賬號!最好只用同一個賬號,最好只要管理一份自己的$HOME文件夾,對不對?
如果要訪問同事的設計庫單元,最好只要知道一個路徑,而不用管他的庫存在哪臺服務器上。
如果張三的庫只能通過服務器A訪問,李四的庫只能通過服務器B訪問,而你需要同時引用兩個庫里的設計單元,該使用哪臺服務器呢?
所以,最好所有的項目目錄可以從任何一個設計服務器上訪問。
你說,這不就好比一個公司內部的云文件夾嘛?你說對了。
與此相反,如果用戶在每一臺服務器上都要管理一個獨立的$HOME,當服務器增加時,一切很快就會失去控制。
同理,EDA軟件和PDK的安裝最好只有一份拷貝,無論從哪臺服務器上調用HSPICE,需要的PATH環境變量都一樣。這樣一來,你就不用擔心.cshrc文件在一臺機器上有效,換臺機器就沒用了。
維持統一的設計環境不僅對普通用戶有好處,對IT管理員而言也有巨大的吸引力:
IT只需要維護一份EDA安裝拷貝,無論是版本升級、用戶培訓還是二次開發,都比維護多份安裝并保持它們隨時同步要容易許多。
共享性是幾乎所有網絡文件系統都能實現的目標。Linux世界里流行的另一種文件系統,NFS (Network File System)也能做到。但是AFS在實現共享性的同時,還照顧到了其他幾樣對集成電路設計團隊很重要的需求。
位置無關(路徑透明)
硬盤總是會壞的,服務器總是要淘汰的,系統是需要擴容的。我們希望在進行系統維護時,用戶仍然可以訪問原有的文件。
你說,這不難,可以通過將文件數據搬到其他文件服務器上實現。
但是IC設計環境有一個很特殊的要求,絕大多數IC工程師不希望數據的騰挪操作影響文件的路徑。
以Virtuoso為代表的很多EDA軟件通過路徑來確定設計庫的位置。如果一個設計庫(Virtuoso library)的路徑從
/server1/path/a換成了
/server2/path/a那么所有使用它的用戶就不得不更改自己的環境配置文件(比如Virtuoso的cds.lib ),以避免引用關系失效。
當庫的引用關系變得復雜,用戶數量很大時,為了維護一臺文件服務器,要求相關用戶步調一致地臨時更改配置,幾乎是不可能的。
一種解決方案是虛擬化。用虛擬機來運行文件服務器。需要更換硬件時,利用虛擬平臺提供的轉移技術,將文件服務所在的虛擬機轉移到其他物理主機,并保持文件服務的網絡IP地址不變。然后就可以對原來的物理主機進行維護。
虛擬技術可以緩解路徑依賴問題,但是在系統需要擴容時,僅僅依靠虛擬化難以解決所有問題。無論是選擇擴充虛擬硬盤還是選擇增加虛擬機的個數,在擴展性和維護性方面都會分別遇到其他瓶頸。
另一種解決方案,是讓文件的路徑與文件服務器的位置無關。
舉個例子,同樣是在server1上存儲一個庫,我們將它的路徑設計成這樣的格式:
/afs/abc/path/libm/和之前的例子不同,server1這串字符(或者其IP地址)并不出現在路徑里。
這有什么好處呢?
當我們需要將server1斷電,而使用server2臨時存儲這個庫時,我們可以
于是對設計服務器的使用者而言,庫文件讀寫的感覺上和原來是完全一樣的,因為路徑沒有變化。
這時IT就可以在工作時間將server1斷電下線進行維護。等server1維護完成重新上線,IT將libm遷移回server1,并將路徑重新映射到server1的位置,就完成了無縫轉換。
在用戶看來,這一切似乎都沒有發生,因為庫文件一直可以訪問,而且它的路徑沒有變化。
這用文件系統的術語就叫路徑透明,或者位置無關性。用戶不需要關心文件的具體存儲位置,而只要知道其在文件系統里的路徑,感覺這些文件是存儲在云里。
當然上面例子里的server1和server2仍然可以是虛擬機。AFS可以和虛擬技術結合使用。這樣可以進一步提高文件服務器的靈活性。
避免文件路徑和服務器位置綁定,有很現實的意義。
如果做不到這一點,IT就只能等到所有人下班了才能對服務器進行維護操作??紤]到團隊可能分布于不同時區,有些人可能在通宵運行仿真,找到這樣的時間十分困難。也許是凌晨2點,也許是周末的凌晨2點,也許是節假日長周末的凌晨2點……
而如果路徑透明,那么IT就可以在正常工作時間完成這個工作,IC工程師也不用擔心舊的設計引用失效了。
我們將會看到,路徑透明是AFS系統實現高伸縮性、高可靠性和高訪問性的關鍵。
安全性
安全性對于IC設計企業至關重要。誰都不希望自己的RTL代碼或者設計原理圖因為未經授權的訪問而泄露。
有些企業或組織為了安全性不得不實行物理隔絕,以攝像頭監視服務器房間入口,以指紋或面部識別來控制房間的入口。然而當團隊擴展到多個地域時,物理隔絕就會影響工作效率。
現實情況下,因為要支持多地區多團隊的協作,或者因為單個服務器房間容量有限,所以設計服務器往往需要分散部署在多個樓層里或者多個分支辦公室里,有一些甚至從公共的數據中心租賃。
這就帶來了一個安全問題,如果惡意攻擊者在一臺服務器上獲得root權限以后就能訪問核心數據,那么安全性最差的設計服務器就決定了整個設計環境的安全。
我們并不希望這樣。
我們希望即使一臺設計服務器被攻陷,黑客也只能訪問這臺服務器本地的文件(比如VIM編輯器或者Python的可執行程序,這沒什么大不了的),而無法訪問通過網絡共享的核心IP文件。
這意味著什么呢?這意味著IC設計組織需要的網絡文件系統不應該信任任何一臺設計服務器。
如果一臺設計服務器告訴我們A是合法用戶,我們不加鑒別就相信了,那么如果這臺服務器被攻陷了,實際使用的人是B呢?
相反,如果我們從一開始就不信任任何一臺設計服務器本身的用戶系統,那么即使攻擊者將自己提升成了某臺設計服務器的本地管理員(root),在沒有得到文件系統授權的情況下,他將仍然無法訪問共享的核心設計數據。
采用這樣的系統設計,我們就不再需要無差別地保護分布在各地每一臺設計服務器,而可以集中資源保護和優化中央鑒權系統。
以上我們討論了安全性的一個例子。安全性還包括訪問控制和授權地設計。
在IC設計組織中,往往根據角色會定義不同的訪問權限。
比如負責項目A的成員不應該訪問項目B,或者為項目C雇傭的外包團隊不應該訪問項目D.
又比如,版圖工程師不應該改動仿真目錄,前端設計師不應該改寫版圖文件,等等。
我們希望系統在認清用戶身份以后,可以支持訪問控制。
不僅如此,我們還希望訪問控制的授權可以下放。為什么要下放控制權?
如果所有的訪問授權都必須由系統管理員進行,那么芯片設計項目和用戶增多后,系統管理員就會不堪重負,而且系統管理員并不一定能判斷用戶權限是否合理。能做出判斷的是各項目的實際領導者或者各部門的經理。
另一個明顯的事實是,每個用戶都應有權決定自己$HOME下的目錄分別可以被誰訪問。
所以我們希望系統可以支持權力下放。
系統管理員創建了項目目錄和存儲空間,然后就將目錄的管理權下放給一個或一組指定的用戶,由這些用戶決定誰能對目錄做什么操作。如此對安全責任分包,不僅可以實現更大的安全性,也能讓目錄的實際所有者得到更多的尊重,實現權責一致。
可靠性
IC設計企業的核心資產和競爭力是人才與設計數據。我們希望存儲的數據十分可靠。系統具備可以操作的災難備份方案。
在硬盤使用壽命將至時,管理者可以將數據騰挪到其他硬盤或服務器上,而不影響正常使用。
我們希望這個系統永遠在線,十年、二十年不掉鏈子,哪怕底層的文件服務器和網絡設備早已陸陸續續全部更換。
可伸縮性
我們希望這個系統在起步的時候不需要很大的投資,最好只要一臺文件服務器即可,甚至只要一臺虛擬機。
當數據增多時,我們希望這個系統可以支持很大的集群,比如,支持幾萬甚至幾十萬臺客戶端(文件服務的客戶端,即運行EDA軟件的設計服務器或個人Linux工作站)。
當使用量減少時,我們可以將數據集中到一起,關停部分文件服務器,不影響訪問。
易用性
我們不得不面對的一個現實是,不少IC工程師在啟動了Virtuoso以后,都不用再回到命令行界面進行操作。
很多有十幾甚至二十幾年經驗的IC設計工程師在Linux系統的操作上還是“小白”。對于母語不是英文的工程師,這種情況更為常見。
因此我們希望在絕大多數情況下,網絡存儲系統和IC設計工程師已經熟悉的Linux本地文件系統在體驗上沒有區別。訪問網絡文件時的感覺和訪問Linux本地硬盤下的感覺一樣。點下保存按鈕就彈出保存對話框,輸入文件路徑就能保存文件,就好像數據是存在本地的。
我們希望用戶在不得已需要掌握一些命令時,命令簡單易懂,具有完善的提示與在線幫助。
新手們只需要記住一到兩個主命令,就可以根據主命令 + help的方式,快速找到自己需要的所有子命令和它們的格式(對于AFS,這兩個主命令分別是fs和pts)。
可維護性
我們希望管理員不用因為會影響用戶訪問,而只能通過凌晨加班或者周末加班的方式維護文件系統。我們希望他們能和其他同事一樣按時上下班,在工作時間完成系統的維護、保養與升級,但同時不影響系統提供的服務。
我們希望管理員在大多數情況下只要以管理員身份登錄任何一臺客戶端(設計服務器),就能管理部署在所有分部的文件服務器,而不用逐一登錄到特定的文件服務器上進行維護操作。
我們希望系統具有完善友好且穩定的命令行支持,以便管理員根據需要開發相應的自動化腳本。
高可訪問性
我們希望在保證安全的情況下,系統里的文件可以被不同地域甚至不同時區的IC工程師訪問。
我們希望他們可以使用同一個路徑下的網表做 VCS 或者 HSPICE 仿真,用同一個路徑下的規則文件運行 Calibre DRC 或者寄生參數提取。
我們希望文件系統能夠支持多地區間的安全協作,哪怕網絡具有延時,通道存在擁堵,鏈路的中間存在防火長城。
另外,有一些程序和文件在高峰期會被大量用戶頻繁讀取,比如 PDK 庫文件或 EDA 軟件的執行程序。
當大量用戶需要同時讀取一個文件時,我們希望文件服務器和帶寬資源不會遭到擠兌。也就是說,我們希望存儲系統的魯棒性可以通過緩沖、鏡像等機制得到增強。
兼容性
雖然當前主流的EDA軟件供應商大多只會指定支持兩三個Linux發行版,由此導致大多數IC設計服務器會運行 RHEL (Red Hat Enterprise Linux) 或者 CentOS 操作系統,但我們希望文件服務可以支持所有主流的 Linux/Unix 發行版,兼容Solaris/AIX, FreeBSD,甚至支持Windows和MacOS。
我們希望主流的EDA軟件、開源程序和版本控制程序都能順利運行在這樣的網絡文件系統上。
低成本
我們希望這個系統不依賴于特定存儲供應商的特定硬件,而支持市面上能買到的最通用的服務器,甚至個人計算機或虛擬機。
我們甚至希望花幾十塊錢租用一個云服務器,就可以開始部署這個系統。
當我們資金充裕,需要擴展時,可以添加升級的通用硬件,進行和路徑無關的數據遷移,完成系統擴容以后再淘汰舊的服務器,而不需要從頭開始部署新的文件系統。
我們希望昂貴的SSD硬盤可以用于最需要的項目和客戶端的緩存,而廉價的HDD磁盤可以存儲已經完成的舊項目和大量不經常訪問的驗證數據。我們希望新舊轉換的過程不涉及文件路徑的改變,對用戶完全透明。
我們希望將盡量多的軟件和用戶數據都存放在這個系統里。
這有什么好處呢?
添置設計服務器時,因為不需要存儲軟件和項目數據,也不用存儲用戶個人數據,那么設計服務器的選型只需要考慮CPU與內存,其硬盤只要達到能夠裝下操作系統的容量即可,不需要昂貴的大容量硬盤或RAID組件。這樣可以最大限度減少對昂貴的企業級硬盤的重復投資,提高企業級硬盤的利用效率。
足夠的讀寫速度
和用作大規模機器學習、大數據分析、數據庫服務或郵件服務的集群不同,大多數集成電路設計工程對文件讀寫速度的需要并不非常高,而對身份驗證和安全性要求很高。即使如此,我們仍然希望有足夠的讀寫速度能夠支持波形文件的存儲和讀取。至少,讀過一遍的大型文件,在遭到修改或刪除之前不用再重新傳輸,而可以緩沖在本地。
紀律性
作為IC設計工程師,如果你對自己足夠誠實,應該會承認這樣一個事實: 如果公司給了你無限的存儲空間供你使用,你不會考慮刪除那些冗余的中間波形文件。你會用通配符或者 .save all 的形式保存所有節點的波形,以便”需要時”進行查詢。
你承認其實絕大多數情況下,這些波形文件躺在那里只是在浪費空間??墒菚r間一久,你也忘了哪些波形文件十分重要,哪些文件可以刪除。于是,干脆一起留存。
Linux的原生文件系統很少默認支持配額制。在沒有配額約束的情況下,每個人都按照以上方式工作的結果,是IC設計項目的數據迅速膨脹,硬盤很快就被占滿。
作為IC設計的老鳥,請你回憶一下,下面這種情況是否似曾相識?
你運行了一個周末的仿真,周一檢查結果的時候發現,另一個同事迅速膨脹的數據在周六早晨3點占滿了硬盤的最后一個字節,而你重要的波形結果沒有能夠保存下來。當你試圖聯系這個同事的時候,發現他去休假了。
我們希望共享的文件系統具有一定的約束力。在不影響效率的前提下,能通過配額的方式督促用戶有節制地使用存儲資源,鼓勵每個人以有紀律的方式工作,防止因為少數用戶的疏忽而導致大部分人無法工作,最終影響團隊的效率。
兼容流行的集群任務調度軟件
中小規模集成電路企業較少會使用LSF這樣的任務調度程序。但是如果企業很幸運地發展壯大,需要部署LSF時,我們希望這個系統可以兼容LSF和大規模集群計算環境。
討論完存儲,我們再來看看對于集成電路設計環境,我們又需要怎樣的用戶管理系統。
集成電路設計環境需要怎樣的用戶系統?
統一賬戶管理
我們希望用戶賬戶能夠統一管理,而不是分別存儲在每一臺設計服務器上。否則當組織有幾十臺設計服務器時,新人入職創建賬號和老人跳槽刪除賬號就會占滿系統管理員的工作時間。
統一密碼管理
作為IT系統管理員,最不希望接到的服務臺電話之一可能就是:
“喂,我忘記密碼了?!?/p>
作為公司新人,入職時最頭疼的手續之一就是創建各種賬號和密碼。
如果用戶必須為每一臺Linux設計服務器記憶一個單獨的密碼,忘記密碼的幾率就會大大提高。單是更改和重置密碼就可能占滿系統管理員的工作量。
賬戶移交
當員工離職或學生畢業時,他(她)的設計庫文件可能仍然被很多人使用。我們不希望注銷賬戶時這些數據也消失不見。最好,離職的IC設計師可以將個人目錄托付給另一個員工或一組員工,讓他們成為目錄的新主人。這對于項目的延續和技術的沉淀十分重要。
強健的密碼校驗協議
一個IC設計工程師一天可能要進行幾到幾十次身份密碼認證。當設計師進行身份認證時,我們希望她輸入的密碼不用經過網絡傳輸,就能和管理系統完成身份認證與授權的過程。因為無論是明文還是密文傳輸密碼,都存在可能的安全隱患。
能夠實現上述目的的是這個領域內公認的網絡認證協議,Kerberos
在希臘神話里,Kerberos(Cerberus) 是看守地下世界之門的三頭犬的名字。這個協議由 MIT 領導開發。無論是作為網絡安全協議的 Kerberos,還是作為看門犬的Cerberus,都在各自的世界大大有名。
也許你對Kerberos比較生疏,但是微軟的Windows Server,以及構成其基礎服務的Active Directory Domain Services (即中文Windows系統管理員經常掛在嘴邊的”域”)大概你聽說過。
Kerberos是Active Directory的基石之一。今天所有使用域來管理Windows計算機的企業,以及使用本地部署的Outlook Server管理郵件的企業,幾乎都在自覺或不自覺地依賴Kerberos的安全性完成用戶身份校驗。
與Linux將本地用戶密碼存儲于/etc/passwd文件不同,Kerberos協議將用戶密鑰存儲在一個中心數據庫里(Key Distribution Center, KDC)。用戶登錄設計服務器時,如果服務器支持Kerberos協議,則除了比較存儲在/etc/passwd里的用戶密碼,服務器還會與KDC通信,確認用戶是否是一個非本地的網絡賬戶。
采用Kerberos登錄用戶有什么好處呢?
- 密碼不需要存儲在分支節點,因此分支節點很難泄露用戶密碼。
- 密碼不需要通過網絡傳輸,因此也減少了監聽獲取密碼的可能。
在2000年以前,因為Kerberos協議使用了當時最強勁的加密算法之一(DES),該協議和軟件被美國政府作為輔助軍用設施禁止出口。解禁以后,該協議在世界范圍內得到廣泛使用。
今天的Kerberos支持更為安全的AES加密算法,DES已經不再被推薦為默認加密算法。
目前所有流行的Linux和Unix發行版,包括 MacOS 都支持Kerberos協議。
Kerberos協議最大的特點之一是身份驗證過程不會出現密碼的傳輸。因此即使客戶端和KDC之間不存在加密的VPN網絡鏈接,也不用擔心密碼在整個過程中泄露。
我們部署的系統對身份認證由很高的要求,所以希望以Kerberos為主要協議。
至此我們討論了一個典型的IC設計環境對存儲和用戶系統的需求。在下一篇文章里,我們聊一聊AFS文件系統的特點。
總結
以上是生活随笔為你收集整理的使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【一】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Istio组件以及架构
- 下一篇: 阿里巴巴难度系数五颗星的试题,小白竟然说