我造的這個"輪子"指的是集低程式碼開發與運維為一體的平臺,為什麼說它不是"圓"的,因為它有些與眾不同,甚至可以說是有些另類。至於為什麼造這個"輪子",以及另類在什麼地方且聽我慢慢道來。
一、痛苦的編碼歲月
我是一個70後碼農,開發過不計其數的系統,小到進銷存大到電商、物聯網甚至是省級平臺。每次專案開始都要經歷從技術選型、架構設計、開發、測試及最終生產環境部署運維等多個步驟。小專案還好隨便一個單體架構就可以搞定,大專案特別是資料量較大的不仔細設計並考慮效能與擴充套件,隨隨便便就能把系統玩死。日復一日年復一年的編碼,還得時時擔心繫統crash真是讓我身心疲憊。
二、靜下心來的思考
為什麼?為什麼碼農就需要這麼累?為什麼會沒有銀彈,哪怕是近似的東東?我又到底需要什麼?
天下武功唯快不破
- 我需要的是能夠快速的從無到有的開發出一套系統的工具,並且能夠快速部署。
簡單的才是最美的
- 我需要的是適用於中小規模的簡單架構,並且依賴的技術越少越好。
唯一不變的是變化
- 我需要的是能夠隨時適應需求變化,並且能夠按需擴充套件的分散式架構。
一切盡在掌握
- 我需要的是能夠輕鬆掌握的系統狀態,並且能儘早發現問題及時告警。
三、苦苦的尋找
經歷過痛苦與思考,才知道自己想要的是什麼,因而我開始了漫長的尋找與學習過程。先是瞭解各類開發語言(包括可能您都沒有聽過的Vala),熟悉其優勢、弱勢及適用場景。然後學習各種類庫及框架,只要覺得能加速開發過程便會研究一番並嘗試應用於專案中。最後開始接觸各類零程式碼低程式碼開發平臺,包括國外的OutSystems,國內的起點等。但這些開發平臺有些授權費用高,有些有各種各樣的限制只能適用於特定場景,且大都是單體架構無法擴充套件,效能一般般對硬體的要求又高。總之沒有我認為完美的技術或組合是我所需要的,難道真的應了“沒有銀彈”,只能繼續疲憊下去。可我偏偏是個比較偏執的人,沒有我們就來造一個,哪怕是隻提高10%的效率減少10%的成本那就有意義。
四、擼起袖子直接幹
一開始我只是想參照一些快速開發平臺實現類似的功能,並且遵循“物得其所”的原則支援不同的儲存技術(Sql, NoSql, 物件儲存)。在此基礎上我實現了一個版本(代號AppBox),但在實現過程中為了適配各類儲存技術及相應的api我煩不勝煩,另外這麼多技術疊加在一起對整個架構的部署與運維造成了不小的麻煩,總是覺得不完美太Low。
既然選擇了造輪子,何不造個大一點的。所以我又開始動起了儲存的念頭,在學習了NewSql與NoSql技術後,我決定基於Raft與RocksDB直接實現分散式的儲存整合在框架內,這樣的話關係型資料、半結構化資料、非結構化資料的儲存一併搞定。簡單!完美!
五、未來在招手
“路漫漫其修遠兮,吾將上下而求索”,目前原型總算是有點模樣了,雖開啟程式碼滿屏的TODO,但我抱著愚公移山的態度,相信只要每天碼一點,總有一天碼出一個近似完美的“巨輪”,也藉此尋求志同道合者來共同完成這個“輪子”,共同實現Enjoy coding! Enjoy life!