前端微服务简单实践

2020-07-02 00:00:00 配置 模块 加载 导出 主程序

近看了字节跳动技术团队写的《前端微服务在字节跳动的打磨与应用》这一篇文章,对其中的服务注册和动态加载模块比较感兴趣,再加上之前做过一些类似的东西,所以就花了点时间做了一些简单的实践。

我对微服务的理解

我理解的微服务,本质上就是把一个大型的应用拆分为很多个独立的模块,每一个模块的可以单独的开发、调试并上线。这样的好处我理解主要有以下几个:

  • 每个模块都是一个独立的个体,如果有某个模块出现问题了,不会导致整个应用挂掉。
  • 由于每个模块可以单独上线,因此上线会更快,有利于更新迭代。
  • 由于有了服务注册的功能,因此页面都可以通过配置化的方式来动态加载,对于功能的新增、回滚特别方便。
  • 框架无关(这可能取决于具体实现)

本文主要是想简单讨论下服务发现以及动态加载模块的一些实践当然这里只是给出一种简单的思路,仅供参考。

服务发现

首先,我们来思考一个问题。如果我们将一个大型应用拆分为多个模块的话,那主程序怎么知道有哪些模块,以及各个模块对应的配置信息(js / css 等配置信息)呢。其实,查找配置的模块信息的过程,就叫做服务发现

那么我们怎么实现服务发现呢?

有一种很简单粗暴的做法,就是我们将这些配置信息直接硬编码在主程序里面,可是这样造成的问题是什么呢?每一次你要新增、修改和删除模块的话,你都需要发布一次主程序,这种做法肯定是不行的。

那么,有没有更好的办法呢?

这个时候比较聪明的同学可能就想到了,那我把配置信息通过接口的方式调用不就行了?我个人比较推荐的也是这种做法。因此有时候我们需要根据用户的身份、权限来返回不同的模块配置信息,通过接口的话,我们就可以很方便的做到这一点。我给一个简单的模块配置信息模块:

[{
    name: 'home',
    path: '/home',
    js: 'https://unpkg.com/react@16/umd/react.development.js',
    css: 'https://unpkg.com/react@16/umd/react.css'
}]

相关文章