Github Enterprise負載調教之——LFS獨立服務器

1、前言

在平常的開發和協做工做中,隨着團隊規模的慢慢增大,不少人都會遇到Github Enterprise(簡稱GHE)服務器負載太高或者存儲空間不足的現象,尤爲是遊戲或者多媒體等相關行業的開發人員,處於保密和業務需求,在git推送的過程當中每每會有海量的的二進制媒體文件,若是讀過我以前的文章GIT工具簡單學習總結的話,就會發如今git默認的業務邏輯中,全部文件的每一次push或者merge都至關於從新向服務器上傳一次,這個邏輯雖然保證了分佈式開發的可用性和穩定性,可是事實上存在一個問題:對於大型文件,推送N次就會多佔用(N-1)倍的體積,尤爲是二進制媒體文件每每是更新率極低的。這樣就會致使一段時間以後,團隊在使用GHE時會發現系統負載動不動變高,尤爲是在大文件推送的時候。前端

2、LFS技術

這個時候,一個開源項目橫空出世了。大概是在2015年左右,git-lfs正式發佈,這個技術從根本上改變了大文件佔用所帶來的一切問題。全部的lfs標記的文件都會經過lfs系統進行單獨推送,而不會像普通的repo文件同樣,在每次mergepush的時候都被從新推送一次。這樣的改變大大節省了系統的負載和磁盤佔用,對無數團隊來講真的是救人於水火。git

但是,人是貪得無厭的。隨着項目體積的龐大和硬件技術的提高,尤爲是近幾年手機性能的飛速發展,移動項目的二進制文件的數量愈來愈多,同時體積也飛速變大,儘管LFS的業務邏輯依然可以承載這些推送的請求,可是在數千人的大型團隊裏,若是GHE的架設架構不是分佈式,或者說總性能不足的話,亦或者出現高併發集中推送的時候,會出現GHE自己的嚴重卡頓甚至掉線。這種掉線不少時候就是因爲過多的LFS推送致使的。所以,把LFS-serverGHE獨立出來的業務請求就出現。下面會詳細介紹配置的過程,總的來講仍是很是簡單的。github

3、搭設LFS-server服務器。

目前在Github上的git-lfs頁面中,開發組爲使用者提供了一個還處於測試狀態的LFS-test-server,可是通過測試,這個服務器功能基本已經可以負擔多數的LFS請求,事實上GHE內建的LFS服務自己也是基於這個開源頁面LFS-test-server。下面咱們會詳細說一下LFS server的搭建過程。數據庫

一、安裝環境和程序

## 首先安裝go環境並安裝軟件,由於`LFS server`使用go寫的,此處用CentOS爲例:
$ yum install -y go

## 而後編輯/etc/profile添加環境變量
$ vim /etc/profile
--------------------------
export GOROOT=$HOME/go # don't forget to create a go/ folder in your home folder
export PATH=$PATH:$GOROOT/bin
## 編輯完畢後wq保存並應用配置。
$ source /etc/profile

## 配置完成後,開始按步驟安裝軟件
$ go get github.com/github/lfs-test-server
$ cd ~
$ cd go/src/github.com/github/lfs-test-server
$ go build
複製代碼

到這一步位置,須要的環境和軟件已經安裝完畢,在下一節會介紹啓動配置文件的寫法。vim

二、配置文件run.sh

由於目前的LFS Server還處於未正式發佈階段,所以還須要用戶手動編輯啓動腳本去配置啓動選項。相信在將來能夠用更加舒服的參數配置模式來進行服務器的啓動。若是動手能力強的話咱們能夠直接作文件夾映射並把LFS-server運行在容器中,這也是一個很好的選擇。瀏覽器

不過本章仍是以直接運行服務爲例進行講解。咱們當前已經進入了~/go/src/github.com/github/lfs-test-server文件夾內,咱們須要配置一個run.sh來做爲啓動腳本。下面是啓動腳本參數的參考表:安全

LFS_LISTEN      # tcp監聽端口,默認爲: "tcp://:8080"
LFS_HOST        # 服務器地址,默認是: "localhost:8080"
LFS_METADB      # 服務器用來存儲lfs數據的數據庫文件,默認是: "lfs.db"
LFS_CONTENTPATH # 用來存儲lfs文件的路徑,默認是: "lfs-content",建議自定義配置
LFS_ADMINUSER   # 初始用戶名,必須建議自定義配置
LFS_ADMINPASS   # 初始密碼,必須建議自定義配置
LFS_CERT        # HTTPS限定,crt認證文件路徑
LFS_KEY         # HTTPS限定,key認證文件路徑
LFS_SCHEME      # 默認是http模式,暴露外網時建議使用https
LFS_USETUS      # 是否開啓TUSD服務的選項。
LFS_TUSHOST     # 用來啓動TUSD上傳服務的端口,默認"localhost:1080"
複製代碼

因爲咱們是內網服務器,所以對於安全的需求沒有這麼高,只要符合內部安全要求便可,所以通常推薦http模式進行配置。示例以下:bash

#!/bin/bash 
set -eu
set -o pipefail

LFS_LISTEN="tcp://:9999"
LFS_HOST="$HOSTNAME:9999"
LFS_CONTENTPATH="$HOME/lfs"
LFS_ADMINUSER="$USER"
LFS_ADMINPASS="$PASSWD"
LFS_SCHEME="http"

export LFS_LISTEN LFS_HOST LFS_CONTENTPATH LFS_ADMINUSER LFS_ADMINPASS LFS_SCHEME

./lfs-test-server
複製代碼

在一切配置完成後,後臺啓動run.sh便可:$ nohup bash run.sh &服務器

4、用戶端簡單配置

在服務端進行配置並啓動服務後,客戶端只須要很是簡單的設置,就能夠體驗LFS服務器分流帶來的流暢度提高和開發爽快感了。架構

前往客戶端服務器,進入須要使用LFSrepo目錄,在裏面新建一個.lfsconfig,在裏面設置相關的服務地址,而後保存便可:

$ vim ./.lfsconfig
------------------
[lfs]
    url = "http://$USER:$PASSWD@$HOSTNAME:9999/"
複製代碼

以後,咱們能夠直接像什麼都沒有變化同樣無感知使用LFS服務了,而事實上的上傳工做會交給剛纔配置的服務器來進行,減小了GHE主機的壓力。

5、前端

事實上服務器不只僅爲咱們提供了LFS上傳的分流服務,咱們其實也能夠經過網頁進行相關信息的查看,直接在瀏覽器裏面輸入http://$HOSTNAME:9999/mgmt,就能夠進入前端管理界面,咱們能夠看到咱們推送的LFS文件,而且添加新的用戶。相信這個功能在將來會更增強大。

相關文章
相關標籤/搜索