從架構實踐出發,深入剖析美團低代碼平臺-WOLF

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"作者 | 閆園園"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"採訪嘉賓 | 美團技術專家李勇"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"前段時間,有關低代碼的爭論一度刷爆了互聯網圈。雖然筆者認爲這種爭論可謂是“百家爭鳴”,對於低代碼本身的發展是大有裨益的,但在此過程中,筆者也注意到大家的關注點似乎有些偏頗。畢竟,低代碼在國外已經發展多年,功能非常完善,也形成了相當的市場規模;而其在國內也是愈演愈熱,更多企業加入到搶奪“低代碼”市場份額的拉鋸戰中,可以說低代碼的“大火”不是憑空出現的,正是市場的選擇。所以在筆者看來,大家應該將更多的關注點放在低代碼技術本身而並非其概念。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"低代碼平臺是工具的合集,這些工具可以通過建模和圖形界面來進行應用程序的可視化開發。低代碼使開發人員可以跳過手工編碼,從而大大縮短了應用程序的開發時間。所以對於更多的企業來說,選擇低代碼無疑是大勢所趨,那麼在此過程中低代碼究竟適用於哪些場景?低代碼平臺又怎樣與公司業務相契合?在搭建過程中到底如何平衡易用性和靈活性這一難題呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"爲了給大家詳細解讀這些問題,我們特別採訪了ArchSummit全球架構師峯會的講師——美團技術專家李勇,他將結合美團低代碼的實踐WOLF平臺跟我們聊聊這些話題,此外他也會在"},{"type":"link","attrs":{"href":"https:\/\/archsummit.infoq.cn\/2021\/shenzhen\/","title":null,"type":null},"content":[{"type":"text","text":"ArchSummit全球架構師峯會"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"中帶來主題爲《"},{"type":"link","attrs":{"href":"https:\/\/archsummit.infoq.cn\/2021\/shenzhen\/presentation\/3698","title":null,"type":null},"content":[{"type":"text","text":"美團低代碼方案的探索與實踐"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"》的演講,感興趣的同學們也可多多關注。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"深入淺出低代碼"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:從目前來看,低代碼被越來越多的人討論,請聊聊您是怎麼理解低代碼的?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"低代碼的概念出來已經很久了,但是最近才持續的火熱起來,一個很大的原因是國內互聯網的火熱,包括傳統企業的互聯網+的轉型。而應用主要包括C端活動營銷、B端CRM應用、內部各種管理平臺、數據分析等,這些應用需求量龐大,從功能上講類似但又有定製化的需求,用傳統方式的開發成本較高且門檻較高,所以催生了各種各樣的低代碼平臺。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一般低代碼平臺都有兩個作用:一個是提效,提效這個比較好理解,就是利用更少的代碼完成相同的功能;而另一個是賦能,能夠讓其他角色參與到非自己工作屬性的工作中,不僅能夠減少溝通成本,還能夠避免由於某一種角色的缺失或者人員不足導致項目無法展開的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"除低代碼外,另外一個概念是無代碼,低代碼跟無代碼往往在一起用來討論和比較,但是一般沒有比較清晰的區分。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我認爲一個比較簡單的區分是看用戶角色是誰,如果用戶角色是具有開發技能的,那毫無疑問是低代碼,因爲低代碼往往需要更強的擴展性和靈活性;而無代碼產品的用戶角色一般是非開發人員,想要在通用性的前提下做無代碼產品是非常困難的,所以現在無代碼發展得比較好的是一些細分市場,類似易企秀、婚禮紀等一些比較具有代表性的無代碼工具。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:結合美團來說,低代碼在哪些場景裏適用呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"目前就我瞭解到的美團內部的低代碼場景主要有三個:一是營銷活動場景,二是數據分析場景,三是中後臺場景。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這其實與業界使用的三個場景也有一些類似,關於這三個場景爲什麼更加適合低代碼,主要是因爲這三個場景較爲同質化,另外需求量也很大,所以更加適合。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"擁抱低代碼,美團WOLF 平臺實踐篇"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:如果與公司業務或通用業務模型不夠契合,低代碼平臺就會成爲“花架子”。那麼,WOLF 平臺是如何圍繞美團業務進行設計的?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我的思路是先對單個場景做深,然後再逐步擴大場景,像WOLF平臺最開始針對的是我們團隊自己的業務,我們團隊的業務以CRM爲主,所以我們以中後臺爲出發點,對當前業務進行提煉。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第一步:完成業務場景的組件化提煉。針對各個業務場景完成組件化的提煉,這裏的組件並不是純粹意義的業務組件,而是帶有業務屬性的通用組件,類似增刪改查這種業務組件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第二步:定義一種DSL,來描述組件之間的關係。將DSL用解釋器實現,通過定義通用的組件通信方式、事件機制等等,利用DSL來描述一張頁面,減少組件之間粘合的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第三步:由於需要將這些組件和能力開放給其他角色和部門,所以我們開始做包括可視化等低代碼開發平臺,逐步擴大生態。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"總結一下思路,先針對自己業務封裝滿足自己業務的東西,然後再逐步擴大影響力,這樣能夠逐步看到成果,也能夠增強團隊內部人員的信心。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:WOLF平臺是如何與美團其他系統平臺聯繫整合的,能爲我們舉一個例子說明嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這裏有兩點:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第一,集團提供的公共能力,類似錯誤監控、權限系統、用戶登錄等。這些公共能力是集團所有部門通用的,一方面我們會複用這些能力,另一方面我們需要把這些能力進行整合,因爲這些平臺是分散的,而我們是提供一個通用的解決方案,所以需要把這些能力進行比較好的整合,比如我們會去跟這些平臺聊合作,通過OpenAPI的形式,提供整合能力。這樣既減少用戶到各個平臺去申請各種APP的時間,也能夠在一個統一的地方進行管理,減少切換成本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第二,與業務系統的整合。比如已經有一個老系統了,如何平滑過渡到新的方案進行開發,我們給出的方案是提供類似自定義模板、自定義域名、微前端、自定義菜單、npm包等多種方式讓用戶根據自己系統的情況進行選擇,跟原有系統進行比較友好的結合。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:純代碼 ProCode 與低代碼 Low Code 如何實現互轉,是個討論熱度很高的難題。WOLF 平臺是如何解決的呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"首先來講ProCode轉化成LowCode,從需求上來說,傳統意義的ProCode一般是很少有需求需要轉化成LowCode的,而且從技術上來說也是非常複雜的。而我們換了種角度去考慮:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"ProCode開發的組件如何在LowCode中複用,這其實是相對比較容易也有比較多的需求的。如果從組件的維度來說,只要你是一個對上下文沒有依賴的組件,我們是可以通過CLI直接發佈到平臺進行復用的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"另外來說說LowCode到ProCode的轉化。一般的思路是將LowCode編譯成ProCode,這其實是比較容易且大部分都是這麼做的,但是這會帶來一個副作用,如剛剛所說,這種轉化後的ProCode很難再轉化成LowCode了,雖然有些團隊號稱自己的LowCode是圖靈完備的,但是如果是一個圖靈完備的語言,倒不如直接使用JS來的直接。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"所以我們的思路還是在配置化的基礎上進行更靈活的擴展,比如支持本地開發、支持JS、支持組件開發、全局狀態等等,基本上能夠滿足大部分需求了,而最後實在無法滿足才編譯成傳統意義的ProCode進行開發。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"之所以會用這種方式是因爲我們對一個頁面的複雜度是有預期的,雖然一個頁面會迭代,但是不會迭代到用低代碼完全無法滿足的地步,如果隨便一次迭代就將LowCode轉化成ProCode進行二次開發,那麼這個頁面享受到的開發提效只能是一次性的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:搭建低代碼平臺,對於UI的精確渲染還是有一定的必要的,那麼WOLF平臺採用了什麼策略來做到精確渲染呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"精確渲染在中後臺的場景其實佔比是相對比較低的,大部分是同質化較爲嚴重的,所以我們的重點應該放在跟UE和產品同學針對場景和規範的制定上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第一,常見場景的固定。跟UE和PM進行合作溝通,針對某些場景進行設計固定,PM和UE同學不能再隨便設計,減少PM、UE、FE三方的人力消耗;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第二,在組件之間的場景是有必要具備一定的靈活性的。比如組件之間的間距有大中小,字體有大中小等等,所以針對一些尺寸、間距、顏色等,我們是允許在規範內進行調整的;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第三,對於實在需要精細粒度的調整,我們也支持直接寫 CSS 來進行更精確的調整。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:對於低代碼平臺很難同時滿足易用性和靈活性這一點,您和團隊是怎麼平衡的呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"這確實是一個矛盾體,因爲越靈活就意味着越複雜,而我們主要從兩方面出發:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第一,我們在語法層面引入了預處理的機制,將語法進行了優化。因爲機器語言跟人的語言是不一致的,機器更看重的是規則,而人看重的是更少的配置;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第二,我們針對不同的角色提供不同的解決方案。比如後端就直接使用可視化的方式,而針對前端來說,提供本地化開發的方案,因爲不同的角色,不同的場景和角色對於平臺的訴求是不一樣的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:您覺得低代碼開發平臺有哪些安全隱患?針對這些隱患,WOLF 平臺做了哪些事情呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"安全隱患主要有兩類:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第一類是針對開發用戶的。由於低代碼本身也是代碼,代碼本身是存在不確定性的,如果用戶寫的代碼有死循環的話,容易造成機器宕機;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"第二類是針對實際的使用用戶的,這類的安全隱患除了傳統的安全漏洞外,還有就是試用用戶容易僞裝成開發者對集團內部服務造成攻擊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"下面我來說說針對以上兩類安全隱患我們的措施:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"針對第一類安全隱患,我們會給用戶一個沙箱環境去執行用戶的代碼,而避免開發用戶對平臺造成攻擊;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"針對第二類安全隱患,在傳統的安全漏洞方面,我們接入了集團公共的安全傘服務,能夠檢測包括XSS、SQL注入等各種常見的安全攻擊;而針對使用用戶僞裝開發者的問題,我們將平臺分成了開發端和預覽端,開發端是給開發者使用的,預覽端是給實際使用用戶使用的,這兩個端是物理隔離的,同時也是內外網隔離的,可以避免使用用戶潛入到開發端進行危險操作;"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"另外,無論是針對開發用戶還是實際使用用戶,我們都對其操作的過程進行記錄備份,能夠進行攻擊的溯源,這樣完成安全的兜底。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"站在風口的低代碼,機遇與挑戰共存"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:對於大家來說,低代碼已經不是個新概念了,目前來看您認爲低代碼還存在哪些技術難點?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"從我的經驗來講,技術難點倒並不是最主要的難點,因爲一般有了想法和方案,技術是最容易實現的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"我個人認爲低代碼最主要的難點還是產品跟技術的鴻溝。因爲低代碼產品是一個重技術側的產品,一般公司都是技術側發起,而沒有產品經理,這裏面就存在一定的問題:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"一般懂產品的人技術不太好,懂技術的人產品不太好,技術人更容易陷入技術的思維中去,覺得我可以給用戶提供什麼功能,但是很少去思考用戶到底需要什麼功能,所以導致很多低代碼平臺技術很厲害,但是並沒有什麼人用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"所以我覺得最大的難點還是產品思維,如何讓技術人員有產品思維,這是所有技術產品目前遇到的最大的問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"InfoQ:對於目前國內低代碼的發展現狀,您認爲低代碼的機遇和挑戰各是什麼呢?未來前景如何?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"低代碼的機遇是有目共睹的,由於互聯網進入到下半場,更多企業的互聯網化在線化,一方面招聘專業的IT人才成本較高,另一方面對於同質化較爲嚴重的項目對於IT人才來說也是一種資源浪費,而低代碼可以降低開發門檻,能夠讓更多的、沒那麼高水平開發技能的人蔘與到開發中來。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"而說到挑戰我覺得還是缺乏統一的標準。各個大廠有自己的解決方案,所以對於小公司來說,根本就不知道選擇哪一種方案。類似小程序一樣,各個公司都有小程序解決方案,導致開發者需要學習各種各樣的開發模式,也不能開發一套在各種地方使用。而作爲對比,瀏覽器就是最好的低代碼例子,我們提供一種規範,各個廠商去按照這個規範實現自己的瀏覽器,這對開發者是無感知的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"總的來說,因爲低代碼面向的是開發者,所以我認爲怎麼站在開發者的角度去思考問題纔是最大的挑戰。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong"}],"text":"採訪嘉賓:"},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"李勇,美團技術專家,曾在百度任職,負責貼吧智能版、PC 版的研發工作;目前在美團成都研發中心任職,主要負責基礎框架和研發工具的開發,主導開發低代碼平臺 WOLF。對前端組件化、低代碼領域有一定的研究和積累。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"李勇老師將在"},{"type":"link","attrs":{"href":"https:\/\/archsummit.infoq.cn\/2021\/shenzhen\/","title":null,"type":null},"content":[{"type":"text","text":"ArchSummit 全球架構師峯會"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"中結合自己的經驗和大家分享美團低代碼平臺的底層設計與實現經驗,希望能讓對低代碼感興趣的同學有所收穫,"},{"type":"link","attrs":{"href":"https:\/\/archsummit.infoq.cn\/2021\/shenzhen\/presentation\/3698?utm_source=wechat&utm_medium=archfront&utm_campaign=9&utm_term=0916&utm_content=yueduyuanwen","title":null,"type":null},"content":[{"type":"text","text":"點擊"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"link","attrs":{"href":"https:\/\/archsummit.infoq.cn\/2021\/shenzhen\/presentation\/3698?utm_source=wechat&utm_medium=archfront&utm_campaign=9&utm_term=0916&utm_content=yueduyuanwen","title":null,"type":null},"content":[{"type":"text","text":"查看更多專題"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"link","attrs":{"href":"https:\/\/archsummit.infoq.cn\/2021\/shenzhen\/presentation\/3698?utm_source=wechat&utm_medium=archfront&utm_campaign=9&utm_term=0916&utm_content=yueduyuanwen","title":null,"type":null},"content":[{"type":"text","text":"詳情"}],"marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/e6\/4a\/e68c3860cf770534c37a998af90f344a.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章