很開心能有機會參與申請阿里雲 MVP 的活動。而後就開始了絞盡腦汁的自我介紹歷程。git
做爲在 Node.js 圈內小有名氣的開發者,也是 Node.js 項目的核心貢獻者之一,講通俗點就是我快成爲 Node.js 核心貢獻者了。有興趣的童鞋能夠上個人 GitHub 圍觀(https://github.com/XadillaX)。github
因此毋庸置疑,我如今是一名 Node.js 工程師,就任於大搜車。沒錯,那個最近鋪天蓋地薛之謙廣告洗腦的彈個車就是咱們公司的產品。我是大搜車無線架構部中間件團隊的 Leader,主要負責先後端進行交互的那一層各種產品的研發,好比一個簡單易用而且靈活性高的網關係統、用於先後端分離的模板服務端渲染系統等。講真,大家看到的彈個車頁面就是基於我設計的渲染系統 Vanille 進行渲染的。算法
在大搜車以前,也就是我大學期間,曾經以 Remote 形式供職於一家遊戲公司,給韓國的外包客戶寫過一款老虎機類型的網遊(基於一款小而美的 HGE 遊戲引擎)。還曾赴西班牙一家類二維碼產品的公司(aquaMobile)實習,當時技術棧仍是 PHP(PHP 是世界上最好的語言)。後來也跟大多數大學生同樣創過業,以技術負責人的崗位搞一款叫汽族網的汽車團購的 O2O 產品,固然也跟大多數大學生同樣好景不長。再後來研究生階段的實習就開始步入正軌,進入了一家小而美的互聯網公司,不少人應該都據說過——花瓣網,自此個人 Node.js 技能點正式開始發光發熱。數據庫
除此以外,我我的仍是一個開源的愛好者。雖然不溫不火,可是自身仍是兢兢業業,研發並維護着一套高效的 Node.js ORM 庫(Toshihiko),以及目前的阿里雲 ONS 服務 Node.js SDK 也是我開發的,而且我的認爲比阿里雲後來出的官方 SDK 要流行。編程
在入坑 Node.js 以前,我有着相較於同齡人來講長不少的編程歷程。怎麼說呢,在我小學時期(2002 年左右),憑藉個人第一本計算機啓蒙讀物《在網上安個家》習得了 FrontPage 和 Flash 兩項技能,今後一發不可收拾。一直到高中接觸了 OI 後,便入了算法的坑——我的認爲這是我較目前大多數從業者來講額外多出來的經歷,到大學繼續參加 ACM 續夢。一路算來,應該也有個十五六年的經歷了。要說個人技術棧是什麼,其實不上高大上的企業級的產品的話,桌面應用、遊戲開發、服務端開發什麼的都是有作過相關類的從業的。segmentfault
哦,對了,硬廣下,我目前正在寫一本暫定名爲《Node.js:來一打 C++ 擴展》的書,初稿大約在今年八月要完成(不過我不肯定本身會不會拖稿),而後到時候你們就能買到這本電子工業出版社出版的書了。本書會除了單單講 Node.js 的原生擴展開發以外,還會給讀者填充不少的前驅知識,例如 Google V八、libuv、NAN 等等。後端
第一次使用阿里雲應該是 2013 年,那時學校的實訓項目咱們作了一款基於校園強關係的 App,我負責服務端的開發。後來項目上線咱們就是使用了阿里雲的 ECS。不過學校的玩意兒都是小打小鬧,小孩子過家家鬧着玩的,但也算是初次嚐到了甜頭。架構
因而,在我研究生期間接的一些用於自給自足的外包項目都開始使用 ECS 了。其實緣由也很簡單,個人技術棧在那時已經再也不是 PHP 之類的了,而是 Node.js,老一代的那種網頁空間(PHP / ASP 之流)已經沒法知足我項目的部署了。負載均衡
後來其實有一段空白期——在我在花瓣實習的階段基本上沒再用過阿里雲,由於花瓣系的技術有着本身龐大的計算集羣,散落在世界的各大機房。可是有着這樣基礎的互聯網公司其實仍是在少數的。前後端分離
直到我到了如今供職的大搜車。我司是阿里雲的重度用戶,能不本身運維的系統所有使用阿里雲的產品。最基礎的就是 ECS 了,除此以外,還有 SLB、OSS、開放搜索、消息隊列、MySQL、ProgreSQL、Redis、Memcached、MongoDB、OTS、阿里大魚等等等等服務。總之能想到的,咱們能用的上的,都上了阿里雲全家桶。
不過,其實不少產品都是運維同窗對它的感知更深一點,好比 MySQL 等數據庫,對於咱們這種屁民開發來講,跟平時開發時候用本機 MySQL 沒什麼區別。我我的用得比較重度的比較有感知的服務就屬消息隊列(ONS)和開放搜索了。
對於 ONS 來講,當時我使用的時候官方只提供了 C++、C#、Java 和 PHP 四種 SDK。對於我司的 Node.js 技術棧來講,使用 ONS 有着很大的一道門檻。可是沒辦法,咱們的 Java 工程師們在用 ONS,做爲異構的其中一套系統來講,要與他們對接的咱們也必須上 ONS。
一開始我想了一個比較髒的辦法,在咱們的 Node.js 進程中啓動一個本身事先寫好的 PHP 腳本,經過管道與 Node.js 進行通訊,而 PHP 那邊負責與 ONS 進行交互。因而當時咱們的 Node.js 項目代碼庫中出現了很奇葩的一個 PHP 文件。
後來等特性上線了以後,我沉下心來開始着手 ONS 的 Node.js 版 SDK 研發。因爲 ONS 的 SDK 並無開源,而 RocketMQ 也沒有詳細的協議文檔,而且 ONS 是通過訂製的 RocketMQ,我不能照抄過去。因此最終我選擇了對 ONS 的 C++ SDK 進行封裝。在此期間,我並無中斷與阿里雲的技術支持的交流,一塊兒討論 C++ SDK 的各類不足,互相促進。到後來,我聯繫上了目前 ONS 的 C++ SDK 維護者天千,也一直和他保持聯繫,討論 SDK 的完善相關事宜。例如 SDK 在隊列內容過多的狀況下,內存會無限暴漲;SDK 是在 GCC 4.x 下編譯的,在較新的自帶 GCC 5.x 的 Ubuntu 版本中沒法適用等問題。也促進了他們將 boost 以靜態連接庫的形式編譯進他們的 SDK(能夠說這個特性當時是爲了 Node.js SDK 訂製的)。
如今雖然阿里巴巴官方團隊出了 ONS 的 Node.js SDK,不過我我的仍是認爲我版本的 SDK 功能更爲完善,而且我會一直維護下去——C++ SDK 在近期會有一次重構,這會讓個人 ONS SDK 之後走上更好的一個階梯。
其實要說還有對於阿里雲還有別的什麼貢獻,雖然不是個人,可是我團隊有人也給沒有 Node.js SDK 的 OTS 寫了一套 SDK。
咱們還比較重度用到的一款原創性的阿里雲服務就是 SLB 了。咱們全部的線上業務都會用到 SLB 來進行負載均衡。包括咱們團隊使用 Nginx + Lua 開發的網關係統,其實在它之上也接了 SLB。至關因而兩層負載均衡,阿里雲 SLB 是進行可用性的一個負載均衡,而咱們自研的網關係統則是進行路由的負載均衡和節點選擇,對於咱們目前有些系統的半微服務的架構、先後端分離服務的架構來講,是很是好的一個選擇。
其實成爲 MVP 無非就是想一塊兒共建和諧社會和諧阿里雲,雙方互贏。阿里雲自身的產品能更進一步,而咱們在使用更好的阿里雲產品就是建立更好的本身的產品。
因此,對於重度使用產品是必須的,在這個基礎上發現阿里雲產品的不足,以及能夠改進的地方,與阿里雲團隊多多交流。在力所能及的範圍內,爲阿里雲的生態也添磚加瓦,好比咱們先前作的各類 SDK。