后端服务的模块拆分

395 阅读2分钟

背景

讨论模块拆分之前,我们以电商系统为例,它包含5个模块:用户、产品、订单、配送、发票。两个端:一个是电脑版卖家端,一个是移动端买家端。

Untitled 2.png

假设运行时,每个模块运行时使用1/5的资源。

以下例子中的用户量只是举例,不具有参考意义

单体模式:

当用户量为10,000时,1台服务器可能就够了。

集群模式:

当用户量为1,000,000时,100台服务器集群就可以了。

微服务模式:

当用户量为1,000,000,000(10亿)时,可能只需要20,000台服务即可,约为集群的100,000台服务器的1/5。20,000计算方式如下所示:

假设大家逛电子商城只看不买。

服务器数量=(1/5)*100,000=20,000台即可。

该计算不严谨,仅可以粗略展示节省的程序运行资源。通常,提供服务占用资源>>程序运行需要的硬件资源。

当业务量达到一定规模时候需要拆分微服务。但是模块拆分可以提前。

为什么要模块拆分?

有以下原因:

  1. 模块复用:公司有多个产品时,可以按照模块的颗粒度复用,如用户模块。
  2. 按需使用:
    1. 产品私有化部署时,以上文中电商系统为例,若不需要发票模块,开发和发布时可以去掉。
    2. 还有一些场景,一个项目包含多个产品,开发和发布时,节省的资源和时间更为明显。
  3. 微服务化准备。

模块拆分方式?

不拆分模块

后台部署一份服务,两个不同的前端。

优点:开发和部署简单。

Untitled.png

按端拆分:卖家端和买家端

优点:

缺点:工作量增大,出现较多重复代码,比如每个端都有用户登录、产品查询、订单查询等,需要写两份。

Untitled 1.png

按业务拆分(推荐)

优点:提高模块复用,可以按需使用,容易微服务化。

缺点:依赖复杂

五个核心模块主要写业务Service,卖家端和买家端仅仅提供对外API接口。

Untitled 2.png

微服务化

优点:单个服务可以按需部署

缺点:开发和运维复杂性提升

五个核心模块不仅有Service,也提供对外API接口,卖家端和买家端是一个概念,它们在后端不存在,通过前端将它们组织起来。

Untitled 3.png