Skip to content

zh

將 AppMon 從版本 6.5 升級到 7.1

我正在將Dynatrace AppMon從版本6.5升級到7.1。AppMon是許多客戶信任的效能數據收集工具;它幫助開發者在應用系統中解決問題。此版本升級包括新功能和新的UI儀表板。以下是指導你完成此過程的步驟:

首先,重要的是要諮詢硬體和作業系統的系統需求2018年4月系統需求。例如,如果你在運行一個過時的Java虛擬機(JVM),幫助台可能無法協助你解決問題。確保你有一個64位的客戶端和足夠的磁盤空間。

此外,在開始之前,將會話存儲位置移出安裝目錄。建議備份會話存儲和配置數據。務必在此之前諮詢元件兼容性矩陣元件兼容性

其次,安裝新的AppMon 7.1版本。對於Linux,運行命令:

java -jar dynatrace-full-7.1.0.1803-linux-x86–64.jar

然後停用並升級許可證。這將在關閉它之前把你的服務器放在一個寬限期內。

點擊許可證的“升級”按鈕。

以及優惠券的升級按鈕:

第三,關閉舊版6.5的收集器、服務器和前端服務器。這將是創建備份的理想時機,包括性能倉庫數據庫和會話存儲的備份。

第四,使用這裡下載的移植工具。

運行命令:

java -jar dynatrace-migration.jar -migration -sourceDTHome "<DT_HOME_OLD>" -targetArchiveDir "<ARCHIVE_DIR>"

此處,DT_HOME_OLD是舊版AppMon的安裝路徑,ARCHIVE_DIR是備份目錄。請注意,在Windows機器上,需要管理員權限才能執行此步驟。

接著,使用以下的命令將備份檔案移動到新的7.1安裝版:

java -jar dynatrace-migration.jar -migration -sourceArchive "<ARCHIVE_DIR>/<MIGRATION_ARCHIVE>" -targetDTHome "<DT_HOME_NEW>"

其中,ARCHIVE_DIR/MIGRATION_ARCHIVE./dtma檔案的位置,DT_HOME_NEW則是新Dynatrace 7.1安裝的路徑。

然後註冊並自動啟動任何額外的收集器實例。

第五,啟動新的元件,例如收集器和前端服務器。

客戶端移植步驟通常可以跳過,並且您可以為新的伺服器啟動許可證:

最後,再次檢查伺服器上的設定以確保性能倉庫和會話存儲已被遷移並連接。

還建議重新啟動並更新代理。最後但並非最不重要的,檢查並確認所有的東西都按預期運行。

如有任何問題,請告訴我。

使用自訂挑戰的AWS Cognito用戶池與iOS的Mobile SDK

我最近將一個AWS Cognito用戶池整合到一個iOS應用程式中。登入功能使用自訂挑戰進行認證。然而,關於如何使用iOS SDK達到此目的的文件資料很有限。在多次嘗試和失敗後,我終於成功登入。以下是達成此目的的步驟:

步驟1:建立一個CognitoUserPool

AppDelegate中,完成didFinishLaunchingWithOptions後,用戶池如下所示初始化:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  // Set up service configuration
  let serviceConfiguration = AWSServiceConfiguration(region: CognitoIdentityUserPoolRegion, credentialsProvider: nil)

  // Create pool configuration
  let poolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: CognitoIdentityUserPoolAppClientId, clientSecret: nil, poolId: CognitoIdentityUserPoolId)

  // Initialize user pool client
  AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: poolConfiguration, forKey: AWSCognitoUserPoolsSignInProviderKey)

  // Fetch the user pool client we initialized in the above step
  let pool = AWSCognitoIdentityUserPool(forKey: AWSCognitoUserPoolsSignInProviderKey)

  self.storyboard = UIStoryboard(name: "Main", bundle: nil)

  pool.delegate = self

  return true
}

步驟2:執行協定代表

extension AppDelegate: AWSCognitoIdentityCustomAuthentication {

  func didCompleteStepWithError(_ error: Error?) {

  }

  func getCustomChallengeDetails(_ authenticationInput: AWSCognitoIdentityCustomAuthenticationInput, customAuthCompletionSource: AWSTaskCompletionSource<AWSCognitoIdentityCustomChallengeDetails>) {

  }

  func startCustomAuthentication() -> AWSCognitoIdentityCustomAuthentication {
    if self.navigationController == nil {
      self.navigationController = self.storyboard?.instantiateViewController(withIdentifier: "signinController") as? UINavigationController
    }

    if self.signInViewController == nil {
      self.signInViewController = self.navigationController?.viewControllers[0] as? SignInViewController
    }

    DispatchQueue.main.async {
      self.navigationController!.popToRootViewController(animated: true)

      if !self.navigationController!.isViewLoaded || self.navigationController!.view.window == nil {
        self.window?.rootViewController?.present(self.navigationController!, animated: true, completion: nil)
      }
    }

    return self.signInViewController!
  }
}

步驟3:在登入視圖控制器中處理自訂挑戰

extension SignInViewController: AWSCognitoIdentityCustomAuthentication {

  func getCustomChallengeDetails(_ authenticationInput: AWSCognitoIdentityCustomAuthenticationInput, customAuthCompletionSource: AWSTaskCompletionSource<AWSCognitoIdentityCustomChallengeDetails>) {

    let authDetails = AWSCognitoIdentityCustomChallengeDetails(challengeResponses: ["USERNAME": "YourUserName", "ANSWER": "123456"])
    customAuthCompletionSource.set(result: authDetails)
  }

  public func didCompleteStepWithError(_ error: Error?) {
    DispatchQueue.main.async {
      if let error = error as? NSError {
        print("error")
      } else {
        print("success")
        self.dismiss(animated: true, completion: nil)
      }
    }
  }
}

步驟4:成功登入後存取用戶屬性

self.user?.getDetails().continueOnSuccessWith { (task) -> AnyObject? in
  DispatchQueue.main.async(execute: {
    self.response = task.result

    // Display user details
    print(response)
  })

  return nil
}

如果你有任何問題,請隨時提問。我希望AWS能更新文檔,並提供範例代碼,以便在不需要透過試驗和錯誤的情況下理解SDK。

管理你的老闆

在傳統的自上而下的組織中,管理你的老闆需要有意識地與上層管理合作以達到雙贏的結果。有效的管理者不僅需要花時間和資源管理他們的下屬,也需要管理他們的上級。不這樣做的代價可能會很高。

性格的衝突只是冰山一角。根據一項蓋洛普公司的調查,美國有一半的員工是因為與他們的老闆有問題而辭職。更令人擔心的是下屬對於他們的經理有著錯誤的假設和期望。有效地管理這種關係需要雙方互相依賴。

經理們經常需要他們的下屬的支持和合作才能有效地完成任務。有些人誤以為他們可以自給自足,忽視了他們的上級在組織整合中的作用。期望老闆會自動知道員工需要什麼支援是不切實際的。有效的經理人明白這一點,並主動參與他們自己的職業發展。

成功地管理這種相互依賴的關係需要深入理解你自己和你的老闆的優點,弱點,工作風格和需求。為了防止衝突和誤解,你應該理解你的老闆的目標,壓力和盲點。有效的經理會主動尋找這些信息並用來創建一個適應雙方的工作環境。

自我反思也可以加深你對於你和你的老闆之間的動態的理解。一般來說,下屬對於他們的上級的依賴程度比上級對下屬的依賴程度要大。這種依賴性可以導致負面的情緒甚至反叛行為,這被稱為反依賴。權力偏向老闆的不平衡往往是糟糕管理的主要原因。

相反,有些下屬會壓抑他們的挫折感並盲目地遵從他們老闆的錯誤決定。這同樣會造成很大的傷害,被文化神話如“父親最懂”(一個電視節目的名稱)所加強。認識到這些極端可以幫助你理解你與你的老闆的關係的影響,無論是反依賴還是過度依賴,並採取糾正行動。

一旦你對你自己和你的老闆的需求有了清楚的理解,你就可以發展一種互利的工作關係。研究顯示,增加各種形式的投入與一些正面的組織結果有關,包括個人的工作表現和顧客滿意度。下屬可以調整他們的溝通風格以匹配他們的老闆的偏好。

對於雙方期望的有效溝通也是至關重要的。下屬應該主動問老闆的期望,而不是假設老闆會清楚地表達他們的期望。同樣,他們應該讓老闆知道他們自己的期望。保持一個分享好消息和擔憂的開放渠道——即使老闆可能不願意聽到——有助於建立信任。

一貫性是關鍵。雖然短期內承諾樂觀的期限可能會讓你的老闆高興,但是未能達到期限會導致不滿。建立信任對於順利地委派任務和責任至關重要。

管理與你的老闆的關係需要時間和努力,但是投資的回報是預先防止可能的問題。明智的做法是有效地使用你的老闆的時間,專注於重要的事情而不是細節。最終,你與你的老闆的關係的質量將顯著影響你在組織中可以實現的成就。

產生成果的領導力

研究指出,有六種鮮明的領導風格直接影響工作環境和財務表現,尤其是收入增長和利潤性。這些風格是強迫、權威、親和、民主、設定節奏和教練。重要的是,最成功的領導者並不完全依賴一種風格,而是根據組織的情況進行調整。有效的管理者在不同的領導風格之間進行轉換,而這種影響在許多領域,包括靈活性、責任心、遵守標準和反饋的質量上都是可觀的。

首先,強迫型領導者要求立即服從。雖然在轉型期間很有效,但這種自上而下的決策方式可能會扼殺創新和阻礙團隊主動性。一位前蘋果員工指出,“當史提夫·喬布斯對任何事情感到不滿時,這個問題會以我從未見過的速度得到糾正;人們出於恐懼反應得非常快。”

其次,權威型領導者會圍繞共同的目標統一他們的團隊,這通常會導致更高的承諾度,因為人們明白他們的工作如何促進大局。然而,當團隊成員的經驗更豐富或對領導者的觀點持有更強烈的意見時,這種風格可能會失敗。投資者約翰·杜爾指出,“經典的創業者做的比所有人可能相信的還要多,用的比任何人可能想象的還要少。”

第三,親和型領導者將情感緊密的綱連合在一起,並將個人的感受置於任務和目標之上。雖然這樣可以促進公開的溝通和冒險,但如果過分依賴讚揚而不提供具有建設性的反饋,可能會有反效果。

第四,民主型領導者通過積極參與其團隊成員在決策中,建立共識。這種方法在與擁有專業技能並能提供有價值建議的人一起工作時最有效。然而,當沒有共識時,可能導致討論時間長,並在危機時讓團隊處於無領導狀態。

第五,設置節奏型領導者期望高績效和自我導向。雖然這種方式在激勵高風能團隊方面很有效,但如果破壞了信任並未能清楚地說明期望,可能會產生反效果。

最後,教練型領導者專注於通過幫助他們識別獨特技能並將其與職業目標相對應,來培養未來的領導者。當員工知道自己的弱點並願意改進時,這種方法尤其有影響力。

最有效的領導者在他們的方法上是多元的,他們調整自己的風格,以滿足他們的組織的特殊需求。很少有領導者擅長所有六種領導風格,但他們可以組建一個多元化的團隊或者擴展自己的技巧來彌補不足。提高情緒智力能力可以進一步細化領導能力。

總之,理解和適當地應用這些領導風格,可以為領導者提供一個全面的成功工具包,尤其是在不斷變化的企業景觀中。

如何在iPhone裝置上偵錯iOS流量

我負責為一款iOS行動應用程式提供產品支援,其中一個挑戰是偵錯iPhone和我們的伺服器之間的HTTPS流量。

在這篇文章中,我將解釋如何捕獲請求,響應,和HTTP頭部。

步驟1:

https://www.charlesproxy.com/download/下載並安裝Charles到你的筆記本電腦。安裝後,點擊"在移動設備或遠程瀏覽器上安裝Charles Root憑證"。

一個彈出詳細信息的視窗將出現。

步驟2:

將你的iPhone連接到與你的筆記本電腦相同的Wi-Fi網絡。在iPhone的Wi-Fi設置中,導航到HTTP代理,並選擇"配置代理",輸入手動細節。

輸入在筆記本電腦彈出視窗中顯示的伺服器和端口號。彈出視窗應該會更新以確認連接。

接著,打開你的iPhone上的Safari並導航到chls.pro/ssl。點擊"允許"下載並安裝憑證。

點擊"安裝"配置檔案。

在此時,你已經完成了這個步驟。

步驟3:

在你的iPhone上,前往設置 > 一般 > 關於 > 證書信任設定,並將"Charles Proxy CA"切換到"開啟"。

最後步驟:

重啟你筆記本電腦上的Charles。你現在應該可以看到流量,包括HTTPS內容。例如,可以捕獲來自iOS上的Medium應用程式的流量,如下所示:

如果你遇到任何問題,隨時聯繫我。祝你偵錯愉快!:)

處理問題人物 - 如何有效激勵你的團隊

要讓人們跟隨你的領導,唯一的方法是激勵他們激發自身的動力。當試圖激勵有挑戰性的員工時,管理者最常犯的錯誤就是依賴邏輯論證和銷售語言。然而,人各有各的動機,價值觀和偏見,導致他們對什麼是可以接受的有不同的理解。考慮到管理的一個基本原則是你無法改變一個人的本質,這些差異觀點經常導致不滿意的結果。

與其強加解決方案,更有效的方法是從員工那裡得到答案,鼓勵他們克服自己的激勵障礙。對於即時解決問題,領導者必須改變他們的觀點:將員工視為一個需要理解的人,而不是一個需要解決的問題。這涉及到花費時間和精力真正了解對個人有何重要的事情。隨意的對話可以提供對員工世界的寶貴見解,揭示他們的期望,願望,和經驗。

在這次分析之後,管理者應該打破僵化的思維模式,考慮所有可能的解決方案。放棄先入為主的觀念,對各種結果保持開放。重新定義你的目標,找出不滿的根本原因,然後找到新的方式來與員工的核心利益相符。

例如,在一家 IT 諮詢機構,內在動機如成就感,認可,工作性質,責任感,和進步都是至關重要的。儘管由於項目管理的上級管理疏忽導致了很多不滿,但我和我的團隊仍然在深夜和周末加班,為香港的一家航空公司準時交付了一個移動應用項目。然而,項目結束後,團隊士氣低落。為什麼呢?我們的努力換來的是高層管理層的批評,而非認可。因此,許多團隊成員離職,去尋求提供更好金錢報酬的工作。

在我辭職後,公司的董事通過真正聆聽我的疑慮並認知我的職業野心(如大數據分析,機器學習和人工智能),說服我留下。他給我提供了一個與我的興趣完全符合的項目,我的動力恢復了。

在決定留下後,我負責激勵我的團隊也做出同樣的決定。我與每個成員見面,了解他們的疑慮,並提供實質的激勵,如免費的午餐和小吃。神經科學認為,獎勵比懲罰更能激勵行為。研究顯示,有條件的獎金可以使銷售量增加24%,而積極的反饋鼓勵員工超越他們平常的職責。這個額外的努力使公司更加有效和高效。

因此,採用一種僕人領導者的方法,讓我的團隊的熱情和貢獻變得至關重要。

一份2014年的德勤報告透露,多達87%的美國勞動力由於對他們的工作缺乏熱情而無法發揮全部的能力。現在,領導者必須采用能夠激發個體團隊成員和整個團隊的策略。處理低效能並清楚地傳達差的結果不一定會導致立即解僱,可以顯著提升士氣。當人們看到一個解決問題的文化,結果會產生一個更健康,更有生產力的工作場所。

將自己轉變為他人希望追隨的領導者 - 學習魅力

魅力是一種可以學習的技能,即使並非每個人都是天生的魅力型領導者。通過理解魅力的原理,我們可將其神奇的品質融入我們的生活中。我們可以通過為我們的追隨者指引清晰的願景,來培養他們對我們的深厚信任。通過努力工作和正確的策略,我們可以成為被人們欽佩和尊重的領導者。

20世紀初期的德國著名社會學家馬克斯·韋伯首次使“魅力”這個詞廣為人知。魅力型領導者可以使用理性的論述來構建道德信譽,並點燃他們的追隨者的激情。這讓追隨者產生目標感,有靈感去完成偉大的事情,甚至有時會產生盲目的信念。研究確定了九種語言技巧和三種非言語技巧以實現這一目標。

首先,具有魅力的演說者可以通過比喻、擬人和類比讓聽眾理解、聯繫和記住他們的訊息。作為一名IT顧問,我經常需要將技術信息翻譯成高層管理人員可以理解的商業語言。例如,我將我們的敏捷開發團隊比作海豹突擊隊,來說明需要橫向協作的重要性。這樣的比喻清楚地傳達了敏捷團隊內部的適應性的重要性。

其次,使用故事和個人經驗可以使訊息更具吸引力和可關聯性。魅力型領導者有一種獨特的語言表達方式,能和他們的聽眾找到共同點。例如,史蒂夫·賈伯斯在2005年的斯坦福開學演講中,通過分享他人生中的關鍵時刻,與人們產生了強烈的關聯性。他的故事不僅觸動人心,而且激勵我去追求我所熱愛的事業。

第三,對比是一種簡單明了的方法,可把邏輯和情感結合在一起,使你的立場更加令人瞩目。約翰·F·肯尼迪的名言:“不要問你的國家能為你做什麼,而應該問你能為你的國家做什麼”,就是有效使用對比的一個深刻的例子。

第四,修辭問句能夠引發聽眾的參與。馬丁·路德·金恩的“I Have a Dream”演講就是一個使用了這種技巧的典範,激勵了數以十萬計的民權支持者。

第五,“三段法”是一種讓任何信息變得簡單的可靠說服技巧。亞伯拉罕·林肯的葛底斯堡演說就是有效運用了這種策略的例子。

第六,發表道德陳述或表達集體情感可以提升領導者的信譽。這些表達展現了領導者的品格,說服聽眾跟隨他們。

第七,設定高度的期望和展現激情可以進一步激勵追隨者。只有領導者真誠地相信自己的願景並對自己的團隊有信心,這種激情才能顯現出來。

除了語言技巧外,非語言暗示,如生動的言語,面部表情和手勢,也可以產生影響。雖然這些非語言暗示可能不適合每一個人,但他們使訊息更容易被聽眾接收。

最近,我在我的IT諮詢公司被提升為團隊領導,使我能夠在一個涉及香港航空公司手機應用程序的複雜項目中應用這些技巧。通過掌握超越公眾演講的技巧,我可以與團隊成員建立更強烈的情感聯繫,並贏得他們的尊重。

掌握這些技巧的最佳方式是通過準備和練習。這些技巧讓我無論在公共演講還是個別對話中都能讓我具有說服力且自然流暢。例如,每三個星期,我必須展示我們團隊的最新產品。使用言語和非語言技巧的平衡組合,顯著提高了我演示的接受度。認為我不能提高,因為我不是天生的魅力型人物,這是一種謬論。通過訓練和練習,我成功地縮小了魅力差距,使我成為我們項目中更有效的領導者。

以證據為基礎的管理

生活就是一連串的選擇。經理人頻繁面對從日常業務運營到關於公司未來方向的重大選擇的決策。對經理人來說,能夠做出明智決策的能力越來越關鍵。如果你是亞馬遜的首席執行官,你會怎麼做?你會如何應對來自競爭對手的挑戰?這些問題突顯了採用以證據為基礎的管理來提高決策能力的重要性,將討論從個人偏好和意見轉移到邏輯和數據驅動的見解。

以證據為基礎的管理是一個不斷發展的概念,旨在利用並分析高品質的實驗和研究以實現積極的結果。這些策略通常依賴於已被充分證實的事實,這些事實有很高的有效性,並有低風險的危害。

遺憾的是,許多經理人今天並未依據相關證據或最佳實踐來解決問題。沒有量化數據,任何倡議的成功都要靠猜測和假設。許多決定仍然由教條和信念驅動,而不是創新或創新。對失敗存在普遍的恐懼並缺乏新的思想,讓現狀無法受到挑戰,問題無法得到解決。

在今天的VUCA(波動性、不確定性、複雜性和模糊性)世界中,數據充足。經理人和企業家應該採用像福爾摩斯般的思維方式,制定可以後續進行測試和驗證的理論。在您的組織中實施科學方法並將其視為持續的原型,培養試錯的文化。以證據為基礎的實踐是一個應用研究領域,結合了過去兩個世紀的最佳智慧成果。

當觀察到許多醫療治療雖然數據顯示效果,但實際上無效時,人們的焦點就轉向以證據為基礎的實踐。例如,醫學專業人員在手術前定期洗手近40年。最近的研究顯示,醫生只有三分之一會經常洗手,只有約15%的醫療決策基於證據。有效的變革需要利用已證實的心理學理論,而不僅僅是指導個體行為的變異。

在專業棒球中,傳統的信念經常決定對最好的球員和球隊組成的看法。總經理必須戰略性地思考如何贏得比賽。邁克爾·劉易斯的書《Moneyball》就生動地描繪了如何在甚至抗拒變革的行業裡,用以證據為基礎的方法進行球員的選擇。

同樣的,企業界充斥著過時的誤解。先行者優勢的迷思主要是由於意識形態,即使經驗數據顯示執行品質超越時機。亞馬遜不是第一個在線書店,Google也不是第一個搜索引擎。首先並不如夠好重要。

另一種誤解圍繞著對公司成功最重要的因素的貢獻。調查顯示,17%的人沒有目標,而75%的人有明確的目標與強大的表現相關聯。創新和新的倡議為總體成功貢獻了25%,而領導力和CEO佔了10%。因此,設定目標是一項寶貴的管理實踐。如果領導者利用最新的研究發現,組織將受益。

與曾經流行的觀念相反,批評員工會提高生產力,負面情緒實際上會損害績效。批評創造了對失敗的恐懼並使員工失去動力。似乎愉快的口吻與銷售增長有關。如果不依賴研究,可能會推出一個確保員工微笑的運動,但這可能會產生反效果,因為員工可能過於專注於其他任務,以至於忘記微笑。此外,並未有充足的證據顯示,例如股票期權等資本獎勵可以提高組織績效。

總結而言,經理人需要通過更大程度依賴科學證據來改變他們的思想和行為。收集優質數據以避免未經測試的理論。這對您的組織至關重要,因為遵循最佳實踐可以提高績效並給您帶來競爭優勢。利用技術進行數據和分析可以幫助決策,評估結果可以提供更清晰的透視當前策略的途徑。這種證據的基礎支持了更為明確,以數據驅動的方式進行組織變革和努力。

面對規模化敏捷團隊的挑戰

我曾在一個使用了Nexus框架和規模化Scrum的項目上工作。一個Nexus被視為規模化Scrum中的開發單位,形成人與人之間的關聯或聯繫。軟件開發本身就是一個困難的任務,當多個團隊正在開發同一產品,並且有許多相依性時,這項任務變得更加困難。除了要面對各種角色,文物和事件,我在日常工作中遇到了三大挑戰:

  1. 唯一產品擁有者和Nexus衝刺規劃 - 根據Scrum指南,最終的決策權屬於一個單一的產品擁有者。多個團隊在Nexus衝刺規劃後進行自己的衝刺規劃。這使得產品擁有者在每個團隊的規劃中參與,如果他們同時進行,會面臨挑戰。產品擁有者不能在同一時間回答關於領域知識的問題,或為多個團隊做優先決定。如果會議時間不同步,產品擁有者就會浪費很多時間。此外,像Scrum Master,資深架構師或設計師等資源可能需要在不同的團隊之間共享。有些組織甚至設計一組產品擁有者,使決策變得複雜,因為沒有人對規模化產品具有絕對權威。

  2. 將產品待辦事項清單精煉可視化的挑戰 - 可能出現新的依賴性,需要識別並盡量減少。不幸的是,像JIRA和Trello這樣的工具並未提供簡單的方式以視覺化這些依賴性的進度或解決方法。Scrum Master可能無法充分理解複雜的技術含義,因此難以有效管理依賴性。

  3. 通過速度的角度審核Nexus Sprint - 整合工作是不可避免的,可能會影響團隊的速度。由於每個團隊都有自己的估計基準和議程,因此不清楚誰應該對重疊的工作負責。像設定伺服器、自動化測試和解決git代碼合併問題等耗時的整合任務都至關重要,但可能會拖慢團隊的進展。這些任務可能不在故事點數中完全列入,並可能在高級管理層看到速度下降時產生誤解。此外,即使每個團隊根據完成定義完成他們的故事,但在實證世界中的後期整合可能會引入新的問題,需要進行額外的跨團隊討論。

Nexus整合團隊的思維模式是答案 - 管理軟體開發的複雜性和不可預測性的最重要因素是具有正確的思維模式。會議、工具和共享工作只是更基本挑戰的症狀:讓團隊中的每一個人,包括組織領導者,理解並擁抱敏捷性。

你以前是否在規模化Scrum環境中工作過,比如SAFe或LeSS?歡迎你的評論,並期待從你的經驗中學習。

網際網路邊界閘道協定(BGP)

本文章探討網際網路邊界閘道協定(BGP),這是一種標準化的外部閘道協定,設計用於在互聯網上的不同自治系統(ASes)或網際網路服務提供商(ISP)之間交換路由和可達性資訊。以下,我們詳細介紹了與此協定相關的重要性、能力、挑戰和解決方案。

1. 邊界閘道協定及其功能

1989年1月,在第12次網際網路工程任務組(IETF)會議上,Len Bosack、Kirk Lougheed和Yakov Rekhter創造了BGP,其設計目標是開發一種能夠提供政策控制、迴路檢測以及通過地址聚合技術支持數十萬個網路的協定。

BGP作為一種自治系統間的路由協定,便利了ISPs之間的連接。例如,和記黃埔和中國移動交換網路層可達性資訊(NLRI)。在互聯網缺乏集中控制的環境中,這些實體必須交換NLRI以整合他們的自治網路。每一個都控制自己的設備並使用不同的自治系統內部路由協定;他們需要合作來交換與他們的客戶相關的IP地址資訊。

一個使用 BGP 的系統的主要功能已演變為解決這個工程和研究問題:使自治網路之間能交換資訊,而無需集中式控制。發送到服務提供商的數據包需要進行查找才能決定下一個目的地,可能是中國另一邊的完全不同的網絡。BGP是全球 TCP/IP 網路的基本架構。

BGP的另一個重要角色是管理商業問題。例如,中國移動可能不希望和記黃埔發送過量的流量,因為這將增加額外的成本。這些自治網絡內部運行著不同的協定,「最佳路徑」可能會根據合同和政策而有所不同。BGP提供了靈活性,可以定義對不同方來說什麼是最佳路徑。

2. BGP的運作

BGP的當前版本是版本4,於2006年以RFC 4271的形式出版。BGP使用一種路徑向量算法,而不是純粹的距向量或連接狀態算法。它使用存儲在AS_PATH屬性中的路徑資訊來避免傳統路由問題。路由表被遍歷以到達目標網絡,從而提供迴路避免。BGP還支持地址聚合,從而大大減少了核心互聯網路由表的大小。

當一條互聯網路徑失效時,BGP提供了網路穩定性,使路由器能夠快速適應和重新路由數據包。每個BGP路由器都維護一個標準路由表,該表與路由資訊庫(RIB)一起使用,並在變化發生時不斷更新。

BGP只在變化發生時更新路由表資訊。它缺少自動發現機制,這意味著必須手動建立對等連接。該協定使用一種增量更新策略,以節省帶寬和處理能力,依賴TCP來提供可靠的傳輸。

3. 舉例說明ASes如何了解網際網路的可達性

可以假設我們有五個由唯一的32位自治系統號(ASN)標識的ASes,如下所示:

BGP允許這些ASes內的路由器通過內部和外部的BGP說明者來學習多條路徑。它選擇最佳路徑並將其安裝在RIB中。當AS104網絡中的一個客戶希望將數據發送到AS100網絡時,BGP幫助AS104內的路由器決定哪條路徑走,並相應地更新可達性資訊。

BGP還提供了對不同服務提供商之間的信任和不信任的管理,並且在RFC 4271中進行了描述。它允許具有共同路由政策的網絡能夠被唯一的標識,並且被廣泛地用在互聯網的骨幹網絡上。

BGP確定最佳路徑的決策依賴於當前的可達性、跳數和其他路徑屬性。它可以被配置為告知一個組織的路由偏好,並且有一個定義任意標簽(即社區)的機制,以控制經過對等體之間的共同協議的路由廣告行為。

4. BGP包格式和欄位函數

BGP消息通過TCP連接進行傳輸。只有在消息完全接收後才進行處理。消息的最大尺寸為4096字節,而最小允許的消息由一個19字節的頭部組成,而沒有任何數據。以下我們突出了一些欄位的功能:

4.1 消息頭部格式

標記:這是一個16字節的欄位,用於相容性,必須設置為全1。

長度:這是一個2字節的無符號整數,表示消息中包括頭部在內的總長度,以字節為單位。它有助於在TCP流中找到下一條消息的標記欄位。欄位值必須始終大於19並小於4096。消息後面不能填充額外的數據,因此該欄位必須包含最小的必需值。

類型:這是一個1字節的無符號整數,指定消息的類型代碼。類型代碼有:1-Open、2-Update、3-Notification、4-Keepalive。

4.2 Open消息格式

建立TCP連接後,雙方首先發送的消息是Open消息。如果Open消息是可以接受的,則回發送一個確認Open的Keepalive消息。

版本:這是一個1字節的無符號整數,表示消息的協定版本號。

我的自治系統:這是一個2字節的無符號整數,指定發件者的AS號碼。

保持時間:這是一個2字節的無符號整數,表明在秒中的保持計時器的值。在收到一條Open消息後,BGP講話者透過取其配置的保持時間和收到的保持時間中的較小者來計算保持計時器。此時間必須為0 或 至少為3秒。可能會根據此時間值拒絕連接。

BGP標識符:這是一個4字節的無符號整數,標識發件人的BGP標識符。該值在啟動時確定,並在所有本地接口與BGP對等方保持一致。

Opt Param Len:這是一個1字節的無符號整數,顯示可選引數欄位的總長度,以字節為單位。零值表示沒有提供可選引數。

可選參數(變量):此欄位包含一個參數列表,每個參數分別編碼如下:

  • 參數類型:1字節欄位用於識別個別參數。
  • 參數長度:1字節欄位指定參數值欄位的長度,以字節為單位。
  • 參數值(變量):根據參數類型欄位的值來詮釋。

Open消息的最小長度(包括頭部)為29個字節。

4.3 Update消息格式

此格式用於在BGP對等體之間交換路由資訊,有助於構建表示各種自治系統(AS)之間關係的圖。它通過識別並消除路由迴路和其他的自治系統間路由異常。

Update消息可以用來廣告具有共同路徑屬性的可行路徑,或撤銷多條不可行的路徑。它可以在同時廣告一條可行路徑和撤銷多條不可行路徑。

撤銷的路徑長度(2個字節):指示撤銷路徑欄位的總長度;值為0表示沒有路徑被撤銷。

撤銷的路徑(變量):包含被撤銷路徑的IP地址前綴的列表。

長度(1個字節):以位為單位指定IP地址前綴的長度;值為0與所有IP地址的匹配。

前綴(變量):包含一個IP地址前綴,以及為在字節邊界上對齊欄位結尾需要的最少尾隨位數。

總路徑屬性長度(2個字節):指示以字節為單位的路徑屬性欄位的總長度。值為0表示沒有 NLRI 或 path 屬性欄位存在。

路經屬性(可變):由<屬性類型,屬性長度,屬性值>組成的 3 元組。 屬性類型是一個 2 字節的欄位,其中包括:

  • 屬性標誌:各種位用於不同的目的,如選擇位、轉移位、部分位和擴展長度位。
  • 屬性類型代碼:如原始碼、AS_PATH、NEXT_HOP、MULTI_EXIT_DISC、LOCAL_PREF、原子聚合和聚合器指定了不同類型的路徑屬性。

網路層可達性資訊(變量):包含一個 IP 地址前綴的列表。其長度並不直接編碼,但可以使用以下式子計算:

( \text{更新消息長度} - 23 - \text{路徑屬性長度總計} - \text{撤銷路徑長度} )

  • 「更新消息長度」是固定大小的BGP首部中編碼的值。
  • 「路徑屬性長度總計」和「撤銷路徑長度」是更新消息的變動部分。
  • 23是固定大小的BGP頭部、路徑屬性長度和撤銷路徑長度的總和。

達性資訊是以一個或多個2元組編碼,每個都有:

長度(1個字節):以位為單位指出 IP 地址前綴的長度。值為0與所有 IP 地址的匹配,自身前綴包含零個字節。

4. 在BGP中的包格式及突出一些欄位的功能

BGP消息通過TCP連線發送。僅在接收到整個消息後才進行處理。消息的最大尺寸為4096個八位組,而最小合理的消息由19個八位組的標頭組成,不含任何數據。以下,我們突出了某些欄位的功能:

4.1 消息標頭格式
  • 標記:這是一個16個八位組的欄位,為了與過去的協議版本相容,必須設定為全為一。

  • 長度:這是一個2個八位組的無號整數,表示包含標頭在內的消息的總長度,單位為八位組。須以此欄位的值間接找出TCP資料流中下一個消息的標記欄位。欄位值必須永遠大於19且小於4096。禁止在消息後面填充額外的數據,因此這個欄位的值必須只含最小所需的值。

  • 類型:這是一個單個八位組無號整數,指定了消息的類型碼。類型碼為:1-Open、2-Update、3-Notification、4-Keepalive。

4.2 Open消息格式

在建立TCP連線後,每一方首先發送的消息是一條open消息。如果收到的open消息可以被接受,就會回應一條確認接收open消息的keepalive消息。

  • 版本:這是一個單個八位組無號整數,顯示了消息的協議版本號。

  • 我的自治系統:這是一個2個八位組無號整數,表明了發送者的AS編號。

  • 保持時間:這是一個2個八位組無號整數,表示了保持計時器的值建議,單位為秒。在收到open消息時,一個BGP有聲人應當通過取配置的保持時間和已接收到的保持時間中的最小值來計算保持計時器。此時間必