2009-04-22 70 views
6

這是我的情況...服務器維護何時應影響實施的決策?

我正在爲需要單一登錄過程的大型Web應用程序集合編寫.Net/C#安全系統(授權和身份驗證)。我使用Active Directory作爲數據存儲,並編寫了一個非常好的通過LDAP與AD通信的原型。此組件檢索有關我已存儲在AD中的已登錄用戶的信息,然後使用它在.Net表單身份驗證中設置其安全角色。

1)一切都很好。

不是系統管理員或網絡工程師,我不熟悉設置AD實例所涉及的系統管理數量。我並不知道對於每個域,我需要一個單獨的服務器和域控制器。事實證明,我的團隊需要針對我們要訪問AD的所有不同環境設置9個不同的域...

  • env1.dev.mycompany.com
  • env1.qa.mycompany.com
  • env1.stage.mycompany.com
  • env2.dev.mycompany.com

...所以,現在我已經把在上我自己som因爲我將不得不維護所有這些機器(或虛擬機),這是我不確定我想要做的事情。

2)一切都不好。

原型非常穩固,AD爲解決方案提供了一個非常好的數據庫,但現在我想知道是否應該廢棄代碼並編寫SQL Server數據提供程序(我知道.Net已經提供了一個,但它並不獨立適合我的業務需求授權)。

無論如何,所以我試圖從高層次角度考慮這個問題。總的來說,我一直絆倒這樣一個事實,即僅僅因爲某些服務器維護,我會拋出一個非常好的解決方案?我想知道這裏有沒有人遇到過這樣的情況,以及你決定做什麼。

不一定要針對AD,只是需要在良好的軟件解決方案和服務器維護限制之間進行評估的情況。

+0

最後一個標記有一個錯字:'programming-descisions' – 2009-04-22 22:55:28

+0

什麼是「編程決定」標記even * mean *?它似乎沒用... – 2009-04-22 23:45:04

回答

4

一般來說,產品的可用性是人們在它和類似產品之間進行選擇的原因。如果產品的可用性差,用戶不會關心其代碼的質量如何 - 所有對他們而言都很重要的是它的使用是多麼的簡單和有效,以及如何滿足他們的需求。

維護可以被認爲是可用性的一個方面。我會優先考慮擁有易於維護的產品。從長遠來看,這將節省管理員的許多小時工作。

首先從最終用戶/管理員的角度設計什麼是最可用的解決方案,然後將其作爲實際實施最佳解決方案的智能挑戰。它可能需要程序員更多的努力,但最終結果會更好。

例如ZFS是一種產品,其中維護得到了很好的照顧(儘管我沒有親自使用它)。設計時,通過使用ZFS的命令行工具輕鬆管理文件系統,以及這些設計決策影響所有ZFS級別(例如存儲池),都付出了很多努力。作爲另一個例子,我最近已經計劃過我的未來項目 - 分佈式數據庫和應用程序服務器如何維護。思考典型的管理任務將如何發生(安裝/升級應用程序,添加/刪除集羣中的服務器,解決硬件故障等),幫助我理清了一些設計決策。其中一些內容深入到系統的體系結構中(例如應用程序和擴展在運行時如何加載以及服務器如何在集羣中查找其他服務器)。

+1

+1關於思考「典型管理任務」的意見。顯然平均業務系統使用了7年。值得考慮維護。 – Karl 2009-04-22 22:56:20

1

如果在Windows系統上設置單點登錄系統,我非常喜歡使用AD。作爲系統管理員。我試圖遵循單一數據源的策略。 AD已經擁有我的Windows用戶/安全數據。我寧願擁有所有內容而不是第二個系統。我設法確保與產品一致,特別是在正在開發的區域(正在進行開發工作的地方等)。所以如果建立系統開發與AD的接口,我可能會有多個AD服務器。

什麼選項可以簡化管理?

您是否可以擁有1臺標準服務器,並使用類似VMware複製過程的方式來維護所有或大部分其他服務器?除了爲支持dev/test所做的更改之外,不要爲9臺服務器做一些事情,將其他8臺作爲鏡像副本保留在主服務器上?

你可以在1個AD服務器上運行多個開發或測試域嗎?

你能腳本動作嗎?

您是否可以減少環境的數量,特別是在測試的高端?例如。將多個開發環境和角色升級版本提供到一個測試版本中?

+0

>你能從1個AD服務器上運行多個開發或測試域嗎? 我不認爲你可以卡爾。這是我想要做的,但我一直在閱讀這個日子,我不知道如何。 – 2009-04-22 22:42:57

+0

我並沒有想到多國家/服務器;而是可以針對一個AD系統運行2個應用程序/代碼庫實例?我已經使用數據庫完成了這項工作,它是否適用於您的AD? – Karl 2009-04-22 22:54:05

1

爲什麼不在測試時簡單地使用OU而不是單獨的域?也就是說,只有一個域,但指定特定版本的用戶必須在該域內的特定OU中找到。你要做的是在搜索功能中查找用戶,你可以指定特定的OU作爲搜索根,而不是域的根。在每一個OU,你可以有ID,納入環境,使他們獨特的,例如,user_env1_devuser_env2_devuser_env1_qa,...

我用AD很多關於我的應用程序,並沒有設立針對開發/測試不同的域。

+0

它已經被考慮過了,但它不會起作用,因爲1)我們使用OU來表示其他對象,並且這兩種用法的結合可能會讓人困惑,2)安全邊界考慮;雖然這是真的,但您可以指定用戶所屬的是OU和OU下的組的成員,但他們仍然可以在技術上針對該域進行身份驗證。 – 2009-04-22 22:47:35

1

使用提供者模式並抽象數據源調用。

然後,您可以將其配置爲實時使用AD或SQL。

public abstract SSODataProvider { 
    public bool AuthenticateUser(string u, string p); 
} 

public ADSSODataProvider : SSODataProvider { 
    public override AutheticateUser(string u, string p) { 
     //do auth here 
    } 
} 

public SQLSSODataProvider : SSODataProvider { 
    public override AuthenticateUser(String u, string p) { 
     //call DB 
    } 
} 

public static SSODataProvider dataProvider; 

if (ConfigurationSettings.AppSettings["SSODataProvider"] == "SQL") 
    dataProvider = new SQLSSODataProvider(); 
else 
    dataProvider = new ADSSODataProvider(); 

.... 

dataProvider.AuthenticateUser("sss","sss"); 
+0

很好的建議,但我已經在做:-)我有一個JSONDataProvider,我用它來測試所有。我必須拋棄的工作是我爲構建「ActiveDirectoryDataProvider」庫所做的所有工作。 – 2009-04-23 15:56:25