第36章 開發壓縮算法
新世紀網吧里,啟航公司占用的包廂里,只剩下主機箱風扇嗡嗡的轉動聲,還有偶爾響起的幾聲脆咳。
白宇航把自己的黑色皮質筆記本攤開,放在鍵盤邊,時不時看一眼,上面密密麻麻地畫滿了重生幾個月來,他的思考和規劃。
這三個月,除了掙生活費、上課、吃飯睡覺,就是不斷思考,重生的他究竟能做些什麼,無數次想過搜尋引擎、社交軟體、電商平台、網路遊戲,這些個詞在腦袋裡蹦過多少次了,可都不現實。
他盯著屏幕,手裡沒停,直接把伺服器500G的大硬碟切了一刀狠的。
「老六,400?有點偏了吧?」張健湊過來,看著屏幕上的分區操作,「你這400G全劃給音樂站做緩存?萬一系統服務哪天崩了,怕連個日誌空間都不夠吧。」
「系統崩不了,除非硬碟物理壞道。」白宇航頭也沒回,手指在鍵盤上敲下一行指令,屏幕瞬間刷出一排綠色的字符,「而且這回咱們不用學校老師教的那套搭建web伺服器。」
「不用IIS?」張慶恆正捧著本《ASP動態網頁設計》啃呢,聞言把書一合,「那用啥?咱們這可是正經商業網站,總不能用微軟個人版PWS吧?」
白宇航從光碟盒裡抽出一張沒有任何標籤的盤,插進光碟機,讀取時的吱嘎聲在安靜的包廂里格外刺耳。
「用這個。」白宇航指了指屏幕上彈出的安裝界面,「Nginx,配PHP和MySQL。」
三個陌生的單詞把張健聽愣了,他撓了撓已經好幾天沒洗的油頭:「啥玩意?這東西我怎麼都沒見過?教科書上沒寫啊。」
「教科書上要是寫了,咱們還玩什麼玩?咱們那書里的東西,寫在書上就已經過時了,又是審過多少次再版多少次的,老師想講點新鮮的都難。」白宇航一邊配置環境變量一邊隨口解釋,「Nginx這是我在 ICQ找一俄羅斯哥們兒要的,還在測試階段。你就把它當成是一個不怎麼占內存、但是特別能抗揍的IIS就行。微軟那套IIS加ASP,那是給大戶人家用的,矯情,訪問的人一多,伺服器CPU直接飆到100%,搞不好還死機,就得瘋狂增加伺服器資源。咱們這窮家小業的剛起步,得用這種抗造的。」
「那資料庫呢?Access不行嗎?」張慶恆小聲問了一句,他最近剛學會用Access建表索引。
「Access存個咱們班級通訊錄還湊合。咱們這是要做全網音樂站,幾萬首甚至幾十萬首歌,要是用Access,查一首歌的時間,夠你吃半頓飯了。」白宇航調出MySQL的黑底白字界面,「用SQL Server倒是行,但這玩意兒正版授權兩千多塊錢一個CPU核心。咱們現在有了Mysql就沒那個必要,哪有錢給比爾·蓋茨送溫暖?」
聽到「兩千塊」一個 cpu的授權,屋裡幾個人都閉了嘴。現在的兩千塊,仍是巨款。
「這個MySQL,瑞典人搞的,免費,開源。哪怕咱們以後有一千萬用戶,優化優化,它也能跑得動。」白宇航敲下最後一行配置代碼,回車。
屏幕閃爍了一下,進入伺服器系統,原本那個熟悉的Windows遠程控制的窗口界面不見了,取而代之的是一行行跳動的命令行。
「這就……完事了?」張健看著那一片簡陋得甚至有點寒酸的界面,有點不敢信,「連個圖形界面都沒有,這能行嗎?」
「試試。」白宇航讓張健把他和宛良皓剛測好的抓取腳本掛上去。
原本在IIS環境下跑得磕磕絆絆、動不動就報錯的腳本,在這個新環境下,就像是吃了瀉藥一樣,進度條嗖嗖地往上漲。
「臥槽!」張健沒忍住爆了句粗口,整個人差點貼到顯示器上,「這速度?這PHP是個什麼神仙語言?比ASP快這麼多?」
「不是語言快,是架構輕。」白宇航沒多解釋,他知道這套「黃金組合」在後世意味著什麼。那是扛過光棍購物節、頂過春節搶票的鋼鐵長城,放在2000年對付這點流量,簡直就是拿加特林打蚊子。
「行了,別在那感嘆了。老三,給你們都開了對應的管理員權限,以後歌曲排序別傻乎乎地手動排,出靜態頁面。我在資料庫里寫了個觸發器,只要用戶點擊一次下載,熱度欄位自動加一,網站初期的榜單每半小時自動刷新一次。」
張慶恆聽得直點頭,手裡的爛筆頭在本子上記得飛快。
伺服器這事兒剛順手,白宇航眉頭又皺了起來。他盯著自己機器的帶寬監控圖,那根紅色的測試曲線已經頂到了天花板。
「個人電腦帶寬管道還是太小了。」白宇航點了根煙,看著那根直線,「咱們用網吧的專線還這麼慢,現在的家庭用戶網速普遍都是56K貓撥號,咱們伺服器這邊出口帶寬獨享,雖然夠,但用戶那邊水管細。要是幾千人同時下載,這400G的緩存就是個擺設,全都得卡死在傳輸上。」
「那咋整?咱們也不能去給用戶家拉光釺,專線入戶啊。」宛良皓攤手。
「拉不了光纖,就把東西變小。」白宇航把煙叼在嘴裡嘟囔著,把椅子拉近了些,新建了一個C++源文件。
「變小?MP3已經是壓縮格式了,再壓不就成電子音了?聽著跟滋哇亂叫似的。」張健是懂行的,音頻壓縮是有極限的。
「那是以前。」白宇航眼皮都沒抬,雙手放在鍵盤上,停頓了兩秒。
腦子裡,筆記本上那個直到2016年才會被谷歌發布的RAISR算法邏輯,清晰地浮現出來。
當然,受限於現在的硬體水平,完全照搬肯定跑不動,得做減法,得根據實際情況自適應。
「看好了。」
「基本邏輯,我要把一個壓縮文件斷點成多個部分之後再壓縮,這會極大減少文件大小。下載時的請求,也會同時將壓縮後的多段文件同時下載,加快下載速度。」
鍵盤聲驟然響起,密集得像暴雨打在鐵皮房頂上。
白宇航沒再說話,甚至連姿勢都沒變過。屏幕上那些複雜的數學函數,被拆解成一行行代碼:雙線性插值、哈希桶分類、殘差學習……
張健起初還想看看邏輯,看了五分鐘就放棄了,轉頭去看宛良皓,發現老四也是一臉「我是誰我在哪」的表情。
這已經不是在寫代碼了,這是在用代碼解數學題。
兩個小時。
包廂里誰也沒敢出聲,連喝水都小心翼翼。
直到白宇航敲下最後一個分號,重重地按了一下編譯器的F5編譯代碼。
「零報錯,零警告。通了!」
白宇航長出了一口氣,把已經燒到過濾嘴的菸頭按滅,感覺手指頭都在發燙。
「拿首歌試試。」
張健趕緊找了個剛才下載的《謝謝你的愛1999》,文件大小4.5MB。
拖進程序,運行。
進度條一閃而過。
生成新文件:1.1MB。
「壓了一多半還多?」張健嗓子有點發乾,「這還能聽嗎?」
「在線放放,指定沒問題。下載轉碼後重新拼接,恢復原來大小,在線聽也並不影響質量,只會更快。」
音箱裡傳出謝霆鋒那標誌性的嗓音,吉他掃弦的聲音清脆,鼓點沉穩,跟原版高碼率相比,聽不出區別。
包廂里死一般的寂靜。
過了好半天,宛良皓才結結巴巴地問:「老六……你這腦子裡裝的到底是啥?這算法……也是那個俄羅斯哥們兒教你的?」
白宇航揉了揉發酸的脖子,站起來活動了一下筋骨,沒接這個茬,只是指了指屏幕:「把這個算法封裝進下載和在線播放模塊。用戶點擊下載的時候,伺服器實時轉碼。這樣,原本能供一個人下載的帶寬,現在能供四五個人用,網站獨享的帶寬,可以支撐上萬人同時下載和訪問。」
張健看著那個只有六兆的算法核心文件,眼神像是在看個怪物,最後憋出一句:「你這哪是寫代碼,你這是在咱們這根細網線上,硬生生給擴成了八車道。老六,你這一手要是拿出去賣,估計比一整個京城牛逼軟體公司都值錢。」
「賣什麼賣,留著自己下蛋。」白宇航拿起桌上已經涼透的盒飯,扒拉了兩口,「趕緊幹活,有了這個,我看全網的音樂站,拿什麼跟咱們拼速度。」
白宇航把自己的黑色皮質筆記本攤開,放在鍵盤邊,時不時看一眼,上面密密麻麻地畫滿了重生幾個月來,他的思考和規劃。
這三個月,除了掙生活費、上課、吃飯睡覺,就是不斷思考,重生的他究竟能做些什麼,無數次想過搜尋引擎、社交軟體、電商平台、網路遊戲,這些個詞在腦袋裡蹦過多少次了,可都不現實。
他盯著屏幕,手裡沒停,直接把伺服器500G的大硬碟切了一刀狠的。
「老六,400?有點偏了吧?」張健湊過來,看著屏幕上的分區操作,「你這400G全劃給音樂站做緩存?萬一系統服務哪天崩了,怕連個日誌空間都不夠吧。」
「系統崩不了,除非硬碟物理壞道。」白宇航頭也沒回,手指在鍵盤上敲下一行指令,屏幕瞬間刷出一排綠色的字符,「而且這回咱們不用學校老師教的那套搭建web伺服器。」
「不用IIS?」張慶恆正捧著本《ASP動態網頁設計》啃呢,聞言把書一合,「那用啥?咱們這可是正經商業網站,總不能用微軟個人版PWS吧?」
白宇航從光碟盒裡抽出一張沒有任何標籤的盤,插進光碟機,讀取時的吱嘎聲在安靜的包廂里格外刺耳。
「用這個。」白宇航指了指屏幕上彈出的安裝界面,「Nginx,配PHP和MySQL。」
三個陌生的單詞把張健聽愣了,他撓了撓已經好幾天沒洗的油頭:「啥玩意?這東西我怎麼都沒見過?教科書上沒寫啊。」
「教科書上要是寫了,咱們還玩什麼玩?咱們那書里的東西,寫在書上就已經過時了,又是審過多少次再版多少次的,老師想講點新鮮的都難。」白宇航一邊配置環境變量一邊隨口解釋,「Nginx這是我在 ICQ找一俄羅斯哥們兒要的,還在測試階段。你就把它當成是一個不怎麼占內存、但是特別能抗揍的IIS就行。微軟那套IIS加ASP,那是給大戶人家用的,矯情,訪問的人一多,伺服器CPU直接飆到100%,搞不好還死機,就得瘋狂增加伺服器資源。咱們這窮家小業的剛起步,得用這種抗造的。」
「那資料庫呢?Access不行嗎?」張慶恆小聲問了一句,他最近剛學會用Access建表索引。
「Access存個咱們班級通訊錄還湊合。咱們這是要做全網音樂站,幾萬首甚至幾十萬首歌,要是用Access,查一首歌的時間,夠你吃半頓飯了。」白宇航調出MySQL的黑底白字界面,「用SQL Server倒是行,但這玩意兒正版授權兩千多塊錢一個CPU核心。咱們現在有了Mysql就沒那個必要,哪有錢給比爾·蓋茨送溫暖?」
聽到「兩千塊」一個 cpu的授權,屋裡幾個人都閉了嘴。現在的兩千塊,仍是巨款。
「這個MySQL,瑞典人搞的,免費,開源。哪怕咱們以後有一千萬用戶,優化優化,它也能跑得動。」白宇航敲下最後一行配置代碼,回車。
屏幕閃爍了一下,進入伺服器系統,原本那個熟悉的Windows遠程控制的窗口界面不見了,取而代之的是一行行跳動的命令行。
「這就……完事了?」張健看著那一片簡陋得甚至有點寒酸的界面,有點不敢信,「連個圖形界面都沒有,這能行嗎?」
「試試。」白宇航讓張健把他和宛良皓剛測好的抓取腳本掛上去。
原本在IIS環境下跑得磕磕絆絆、動不動就報錯的腳本,在這個新環境下,就像是吃了瀉藥一樣,進度條嗖嗖地往上漲。
「臥槽!」張健沒忍住爆了句粗口,整個人差點貼到顯示器上,「這速度?這PHP是個什麼神仙語言?比ASP快這麼多?」
「不是語言快,是架構輕。」白宇航沒多解釋,他知道這套「黃金組合」在後世意味著什麼。那是扛過光棍購物節、頂過春節搶票的鋼鐵長城,放在2000年對付這點流量,簡直就是拿加特林打蚊子。
「行了,別在那感嘆了。老三,給你們都開了對應的管理員權限,以後歌曲排序別傻乎乎地手動排,出靜態頁面。我在資料庫里寫了個觸發器,只要用戶點擊一次下載,熱度欄位自動加一,網站初期的榜單每半小時自動刷新一次。」
張慶恆聽得直點頭,手裡的爛筆頭在本子上記得飛快。
伺服器這事兒剛順手,白宇航眉頭又皺了起來。他盯著自己機器的帶寬監控圖,那根紅色的測試曲線已經頂到了天花板。
「個人電腦帶寬管道還是太小了。」白宇航點了根煙,看著那根直線,「咱們用網吧的專線還這麼慢,現在的家庭用戶網速普遍都是56K貓撥號,咱們伺服器這邊出口帶寬獨享,雖然夠,但用戶那邊水管細。要是幾千人同時下載,這400G的緩存就是個擺設,全都得卡死在傳輸上。」
「那咋整?咱們也不能去給用戶家拉光釺,專線入戶啊。」宛良皓攤手。
「拉不了光纖,就把東西變小。」白宇航把煙叼在嘴裡嘟囔著,把椅子拉近了些,新建了一個C++源文件。
「變小?MP3已經是壓縮格式了,再壓不就成電子音了?聽著跟滋哇亂叫似的。」張健是懂行的,音頻壓縮是有極限的。
「那是以前。」白宇航眼皮都沒抬,雙手放在鍵盤上,停頓了兩秒。
腦子裡,筆記本上那個直到2016年才會被谷歌發布的RAISR算法邏輯,清晰地浮現出來。
當然,受限於現在的硬體水平,完全照搬肯定跑不動,得做減法,得根據實際情況自適應。
「看好了。」
「基本邏輯,我要把一個壓縮文件斷點成多個部分之後再壓縮,這會極大減少文件大小。下載時的請求,也會同時將壓縮後的多段文件同時下載,加快下載速度。」
鍵盤聲驟然響起,密集得像暴雨打在鐵皮房頂上。
白宇航沒再說話,甚至連姿勢都沒變過。屏幕上那些複雜的數學函數,被拆解成一行行代碼:雙線性插值、哈希桶分類、殘差學習……
張健起初還想看看邏輯,看了五分鐘就放棄了,轉頭去看宛良皓,發現老四也是一臉「我是誰我在哪」的表情。
這已經不是在寫代碼了,這是在用代碼解數學題。
兩個小時。
包廂里誰也沒敢出聲,連喝水都小心翼翼。
直到白宇航敲下最後一個分號,重重地按了一下編譯器的F5編譯代碼。
「零報錯,零警告。通了!」
白宇航長出了一口氣,把已經燒到過濾嘴的菸頭按滅,感覺手指頭都在發燙。
「拿首歌試試。」
張健趕緊找了個剛才下載的《謝謝你的愛1999》,文件大小4.5MB。
拖進程序,運行。
進度條一閃而過。
生成新文件:1.1MB。
「壓了一多半還多?」張健嗓子有點發乾,「這還能聽嗎?」
「在線放放,指定沒問題。下載轉碼後重新拼接,恢復原來大小,在線聽也並不影響質量,只會更快。」
音箱裡傳出謝霆鋒那標誌性的嗓音,吉他掃弦的聲音清脆,鼓點沉穩,跟原版高碼率相比,聽不出區別。
包廂里死一般的寂靜。
過了好半天,宛良皓才結結巴巴地問:「老六……你這腦子裡裝的到底是啥?這算法……也是那個俄羅斯哥們兒教你的?」
白宇航揉了揉發酸的脖子,站起來活動了一下筋骨,沒接這個茬,只是指了指屏幕:「把這個算法封裝進下載和在線播放模塊。用戶點擊下載的時候,伺服器實時轉碼。這樣,原本能供一個人下載的帶寬,現在能供四五個人用,網站獨享的帶寬,可以支撐上萬人同時下載和訪問。」
張健看著那個只有六兆的算法核心文件,眼神像是在看個怪物,最後憋出一句:「你這哪是寫代碼,你這是在咱們這根細網線上,硬生生給擴成了八車道。老六,你這一手要是拿出去賣,估計比一整個京城牛逼軟體公司都值錢。」
「賣什麼賣,留著自己下蛋。」白宇航拿起桌上已經涼透的盒飯,扒拉了兩口,「趕緊幹活,有了這個,我看全網的音樂站,拿什麼跟咱們拼速度。」