最近在公司规划了插件渠道架构,我之前写的Rallie.js(源码解读文章烂尾了)也非常合适用来做插件架构,两次实践让我对该范畴略有心得,在此同享。
文章内容主要是聊规划准则,没有具体的代码完成
为什么需求插件架构
需求插件架构的往往是国内SaaS产品,国内SaaS企业做到必定规模,很难避开的一个场景便是客户定制。面向海外商场的SaaS,产品力比较重要,用户为了击中他们爽点的规划买单,本质上更像C端商场。而在国内,产品的灵活性比较重要,许多企业往往并不需求你供给一个规范简练的最佳实践,而是需求你的产品能协助他们处理内部已有体系的痛点,否则用户的续费概率往往很低。
海外SaaS为爽点买单,国内SaaS为痛点买单
正是由于这个差异,导致国内做SaaS的企业到了海外往往不服水土,很难生计。由于在客户定制的土壤下生长起来的产品很难不受定制企业的影响,从而充满了各种非标规划,使产品力直线下降。
假如有一个插件渠道专门用来承载客户企业的定制需求,那就能够将客户企业对规范产品的影响降到最低,有利于产品探索出最简练又有用的SaaS产品
规划的取舍
在插件架构规划中,我总结出一个不或许三角:
- 较低的规划与完成难度
- 较丰厚的功用
- 较好的安全性
最多只能完成两个。
举个例子,在规划前端插件渠道时,要相对容易地完成一个「让页面中的恣意一个方位都支撑注入插件代码进行定制」的体系,那么就只能运转受信赖的插件代码。假如要运转不受信赖的插件代码,只能放弃「让页面中的恣意一个方位都支撑注入插件代码进行定制」的诉求,规则一个或几个相对固定的区域安全地履行插件渲染逻辑。而假如想要完成安全性与丰厚性兼得,那就需求处理沙箱运转,渠道与插件之间数据的安全传递等问题,那么规划难度就会猛然飙升。
在这里,我说的「规划难度」是完成API友好的架构的规划难度,而非单纯「完成规划」的难度。由于要与阻隔环境交换数据往往有许多限制,所以要完成丰厚的功用要绕许多弯路,常常规划出让插件开发者使用起来非常费事的API,体系的杂乱度并没有被杰出的规划隐藏起来,而是外露给了插件开发者,这会影响插件生态的昌盛。
另外想格外聊一聊安全,谈到安全,其实只有「安全」和不「不安全」两种状况,由于「不肯定安全便是肯定不安全」,所以在前端插件规划中,要确保安全往往只能选用iframe或许其他worker线程的计划,现在很盛行的proxy沙箱计划在确保安全方面其实是比较鸡肋的。
许多架构规划者往往没有清晰自己规划的边界,什么都想要,但是这样的结果往往是什么都做得不够好,最终沦为平凡的规划。
插件生态的取舍
许多过错的规划源于过错的起点,许多程序员往往从技术视点出发去规划而非事务场景的视点。这是不对的。
在规划插件架构时,咱们要考虑的第一个问题应该是咱们的事务需求什么样的插件体系。
第一种状况,咱们期望插件体系协助咱们接住客户千奇百怪的定制需求,那咱们应该考虑建立面向内部开发者的插件生态,此刻能够以为插件代码是可信赖的,那么咱们的架构规划应该聚焦于供给丰厚的可定制功用,咱们称之为关闭插件生态
第二种状况,咱们期望的是体系中有一个插件商场,外部开发者能够在插件商场发布与售卖插件。那咱们就必须考虑安全问题,做出的妥协便是插件将无法随意定制咱们的体系,而是只能在咱们限定的有限范围内运转,一起由于js不供给同享内存机制,因此插件与体系的通讯也是受限的,不合适供给太杂乱的功用,咱们称之为敞开插件生态。
我以为,关闭插件生态更合适国内SaaS环境。在关闭插件生态中,产品的售卖形式将会是:
- 关于SaaS用户:交给core product,不接受定制
- 关于有定制需求的私有布置用户:
- 较低价格:由SaaS软件供给商供给插件,交给core product + plug injector + plugin
- 较高价格:由客户方自行编写插件,SaaS软件供给商交给core product + plugin injector (之所以价格更高是由于这种售卖模式下,客户将只会付费一次,而上一种售卖方法下,客户或许会屡次购买插件,这种定价策略有助于引导用户屡次付费)
需求澄清的是,即便咱们允许客户自行编写插件,也应该以为插件代码是可信的,由于此刻用户具有软件资产的所有权,应该由客户自行确保插件的安全性。而SaaS布置时,软件资产的所有者是SaaS服务供给商,客户仅有软件的使用权,此刻插件的安全性必须由咱们确保,在咱们的插件架构彻底信赖插件代码的前提下,不合适敞开插件功用,假如确实有敞开插件商场的需求,则必须有完善的插件审阅机制。
敞开插件生态往往需求产品自身满足强势,有满足用户量,这样才有或许构成昌盛的插件生态,比如Figma的插件生态。关于许多细分范畴的SaaS产品来说,这条道路或许并不合适。
总结
插件架构很合适国内SaaS供应商处理客户定制问题,在架构时需求根据事务场景做好权衡。
Rallie.js合适协助开发关闭插件生态的插件体系。
码字不易,欢迎转载,注明出处