商業技術
商業技術主要有以下幾個特點:穩定性、可擴展、兼容性和可運營性等,這里我們重點說可運營性這個特點。
又拍云的 CDN 服務在純粹技術上理解,是內容分發的緩存系統,一款 CDN 產品。但是需要完成大量的工作,才有實現商業化的可能。
比如需要加入多個子系統,計費系統用于查詢客戶流量、帶寬使用情況;運維系統負責節點、服務器等管理;日志系統負責在使用過程中排查系統問題。
過去圍繞又拍云 CDN 系統,就有十多個子系統。去年又拍云增加了直播云功能,意味著又增加了五六個子系統。現在子系統已經有二三十個了。
另外兩點是商業價值和市場價值。商業價值主要體現在如何為客戶創造價值。
純技
純技的特點則主要集中在技術創新方面。
比如近期十分流行的 OpenResty 開源產品,技術創新性強、性能優異。與現在的 Node.JS、PHP 等相比,是占優勢的。
純技另一個特點是有趣,炫酷。純技產品,本身技術性強,它誕生的原因也正是因為開發者覺得它的 idea 有趣。
我在 2010 年時,開發了一個 aLiLua 的開發框架,與 OpenResty 相同,只是我沒有基于Nginx 編寫。獨立編寫了 server,將其嵌入進去,形成 aLiLua 。
這是兩種不同的方法。我認為我的方法更加酷炫、簡單。因為我不需要依賴于 Nginx 和配置文件。后來我編寫了一個更加簡單的,性能更強勁的。
這個東西具備了炫酷、有意思的特點,但是由于它純粹是按我的個人興趣制作的,沒有考慮商業技術方面的內容,不具備穩定性、擴展性、兼容性等。
我的初衷是希望為自身、業界創造價值,但到現在還只是我自己在用來寫寫網頁、和做些數據統計分析的事,不過這取得了非常好的效果,省去了很多麻煩。在又拍云團隊中有不少雜活要做的,大家一般都會使用 Go、Python,而我則使用 aLiLua 。
△ 商業技術與純技區別
商業技術與純技的代表類型
簡單介紹幾類商業技術與純技的代表性產品。
第一類產品——操作系統
商業技術中有 Microsoft Windows 和 iOS ,純技的有 Linux。
Windows 無論是操作還是硬件兼容性都十分優秀。但是 Linux 有時候甚至連驅動都很難找到。Linux 的優勢在于標準的硬件,將服務器構建于 Linux 系統上則十分便捷安全,性能非常好。
第二類產品——數據庫
商業的 Oracle 或 MS DB 的市場前景十分優秀。過去二三十年中,幾乎所有國內金融機構都是用這兩種產品。
為什么國內金融機構不使用純技領域的 MySQL 或 Redis 的產品呢?
商業場景,數據安全性最為重要,其次是穩定性保障,MySQL 或 Redis 雖然也能做到,但是用戶顯然對專業的 Oracle 和 MS DB 更為信任。
第三類——語言類
商業語言包括:C#、Swift、Java 等,純技領域有 PHP、Python,Perl 等。
國內技術人追求比較高,使用 PHP、Python 者較多,但是國外仍然有較多人使用 C# 和 Swift 。因為后兩者的版本歷史兼容性比 PHP、Python 強大很多,有利于版本迭代。
我從 2001 年開始使用 PHP,一直使用到現在的PHP7。每次 PHP 的大版本更新中均不會以兼容性為前提。如果原來的這套場景是基于 PHP4.3 開發的,那么很可能無法直接使用 PHP5、PHP6 升級。版本升級時,需要使用 PHP5、PHP6 重新編寫不兼容的地方。
第四類——Web server
Java 有比較多的 Web server 使用場景,這里以微軟的 IIS 為例。在 IIS 上可以運行 ASP、C#,盡管 IIS 運行量不多,但是它是一個商業服務的例子。在商業服務中, Web server最重要的是性能,但是近幾年,它已經落后于純技領域的 Nginx 和 Apache了。
第五類——硬件
技術領域不僅有軟件,硬件也相當重要。比如商業領域常會使用 F5 負責負載均衡,但是在純技領域則多用到 LVS 。盡管 LVS 在使用過程中會存在產生不穩定性,消耗 CPU和內存資源等問題,但是很多公司還是會選擇 LVS,主要原因是因為 F5 成本過于高昂。
以上,便是我列舉的在商業技術和純技領域大家較多接觸到的部分產品。商業技術與純技有穩定性、性能等極端性的差異。我們需要根據自己的需求,以滿足業務需求為最終目標,在技術選型、產品選型中做好決策。
如何進行技術選型?
創新
前段時間熱議的支付寶生活圈與微信理財。這兩個就是明顯的錯誤創新。首先很多人不希望朋友知道他的存款數額和購買了哪些物品,所以支付寶和淘寶天然不適合做社交。在微信方面,由于通訊錄中絕大部分是朋友,人們只習慣于把零錢存在微信,用于發紅包等之類的。
創新需要考慮到客戶真實需求,并且滿足客戶的需求。
性能
千萬不要殺雞用牛刀,比如有人用 C++ 寫 Web 應用,雖然性能非常好,但是研發難度大,實現周期長。再比如有人用最好的語言做大數據分析,但是其實性能并不好。每個語言都有自己的特點,C 語言性能強適用于大數據場景,但是對開發者技術要求高,開發周期長。又拍云的日志分析集群使用的就是 C 語言,雖然只有四臺機器,但是可以完全處理全網 50 個 TB 左右的日志,并且計算出 Top 1000 的訪問 URL、流量、訪問次數等。
同樣使用 Java 編寫的 ES 實時日志收集系統,系統性卻能要差很多,50 臺機器的集群,只能抽樣處理 10% 到 20% 。ES 實時日志收集系統的優勢在于比起C語言的系統要靈活,可以針對業務需求,選擇不同的技術方案。
穩定性
OpenStack 中的 Ceph 存儲集群的穩定性非常差,把它搭建起來,對外出售公有云服務是完全不可能的。企業級公有云的使命是創造商業價值,在做技術選型的時候,首先要考慮系統穩定性,做到安全可靠。
總的來說,公司的 CTO 、技術總監、架構師等在進行技術選型的時候,要做到正確創新,以及權衡好性能與穩定性。
總結:“做適合的事”
第一階段:初創
這個階段團隊往往只有四五個人,產品還只是一個 idea ,這時我們不需要考慮產品的拓展性、開發難易度,只需要以最快方法將它以 demo 的形式實現,通過這個 demo 驗證產品是否存在商業價值。
第二階段:爆發
這個階段我們需要頂住產品發展帶來的技術壓力,考慮分布式、熱備容災等問題。
第三階段:穩定
在穩定階段,需要完善前兩個階段的技術問題,以及開始技術迭代,從長遠角度考慮公司、產品未來的發展。
又拍云初創的時候,團隊管理后臺、云存儲 API 等大量底層都是使用PHP 編寫的,底層存儲系統是使用 Erlang 編寫的,CDN 系統使用 Nginx+C 編寫的。
當時選擇 PHP 語言的是因為開發周期短,產品可以實現快速上線。僅僅半年的時間,產品 demo 就編寫完成了。
到了 2014、2015 年爆發階段,我們開始考慮分布式、熱備容災等問題。并且使用 Java 和 Erlang 語言重新編寫了 API 系統。在測試權衡后,又選擇使用 Nginx+Lua 編寫的 API 系統。
現在又拍云的技術發展已經處于一個穩定階段,我們更多考慮的是怎么償還技術債務,開始思考如何節省資源、提高性能。以及從長遠的角度思考未來的市場需要,應對新的變化。