一、定义

将App做成壳容器,业务形成独立的业务库,集成到壳容器里面,从而屏蔽了多App的问题,提高了业务的复用度。在RN混合式架构里面,我们引入了RN容器,通过这个容器,使得业务屏蔽了Android和iOS的平台差异。借助这些成功的经验,我们进一步思考,如果我们尝试进一步的细分外卖的业务场景,将不同场景下的基础能力建设成壳容器,业务集成到容器内,是否可以更好的支撑我们多App复用、单页面多业务团队的当前现状呢?

容器化架构的愿景是:

  • 希望将前端呈现业务的环境抽象出来,将能力进行标准化,形成统一的容器,通过容器去屏蔽平台和端的差异。容器提供上层标准统一的能力接口,使得业务开发人员专注于容器内的业务逻辑的实现,最大复用已有的能力,而不用关注现在的环境是Android还是iOS,现在的端是美团App还是大众点评App。
  • 容器和远端达成呈现协议,使得端上的内容具备随时可变化的能力。容器化架构的实现是存在一定前提的,如果业务的发展本身处在一个探索阶段,还有较多可变的因素,是无法形成稳定的能力层的,这时候建设容器化架构反而使得架构偏向复杂。但对于外卖业务场景来说,经过多年的沉淀固定,外卖业务逐渐形成了一套稳定的业务形态,已经进入到场景细分和快速迭代业务模块的阶段。在这样的阶段下,容器化架构才有可实施的前提。

二、优势

当我们把承载业务的环境进行了抽象和标准化后,就可以获得以下若干点好处。

首先动态化属性提升,我们可以把原有必须在客户端上写的业务放到了远端,业务的动态性得到很大的提升,具备随时上线业务的可能。对于开发过程而言,编译部署的速度也得到了极大提升。如果涉及到客户端的代码改动,那客户端的编译打包,即使是增量的编译,也至少是秒级的编译速度。而容器化后,我们只打包必要的业务,把业务动态下发到容器呈现,客户端代码本身不会有变化,这样就可以从秒级的编译减少到毫秒级的编译。同样,业务动态下发,对减少客户端的包大小也有很大的帮助。

然后,容器位于应用之内,我们向应用中引入相同的容器SDK,容器屏蔽了应用之间的差异,对于Android和iOS平台,在设计上,通过容器这一层去尽可能屏蔽平台之间的差异,使业务开发人员只需要认识容器,不需要花费大量的精力去关注应用和平台之间的差异,从而使得开发效率得到了极大的提升。

其次,容器化后,容器对承载的内容是有接口协议要求的,承载的内容只有满足容器定义的协议才能得到容器带来的好处,这促使业务得到了更细粒度的细分,业务开发时候,对模块化的意识得到了保障。另外,容器这一层提供的接口在Android和iOS上是标准化的,业务的开发也因为依赖的标准化,而趋向标准化,双端的业务一致性得到了提升。这些潜在的架构好处,对未来的业务维护和扩展都打下了比较好的地基。