搭建一个完整的微服务系统(一):系统设计

前言

        网上能检索到各种各样的微服务实战,但都是阐述某一个方面,我将一个真实的跨境支付系统中的C2C国际汇款后台代码部分精炼出来,供大家学习使用,也用来感恩互联网多年来对我开发之路的帮助。
        本系列主要是讲代码部分,所以只在本节对系统架构进行一些简单说明,将来有机会再写系统架构的专题。

系统架构

系统架构图
        这张图对写代码来说,并没有实际指导作用,但我们开发一个系统,开始都要画出一个类似的图,主要是为了向所有关系人讲解系统构成,方便他们理解。
        本系列主要是讲代码层面,我只会在本节对系统架构进行简单说明。从上图可以看出:
            1. 用户用app通过网关接入本系统,而系统通过渠道路由请求不同的上游,运营通过辅助网站运营系统。
            2. 整个系统使用spring cloud来搭建,消息中间件采用Rocket MQ,缓存采用Redis。
            3. 系统模块主要分成两部分:公共服务基本来自业务中台,汇款业务来自业务系统。
            4. 版本管理采用git,部署采用jenkins,日志收集采用ELK。

微服务划分

        怎么划分微服务,有太多的理论。就我个人观点来说,可以从下面三个方面进行考虑:
            1. 如果系统不够复杂,能够从设计上就避免分布式事务,那就按避免分布式事务的方式来划分。
            2. 按业务模块分。这是最见的方式,但如果是一个高频的系统,单纯按业务模块分微服务,是不合理的。
            3. 按业务流程分。一般来说,2C的系统的微服务划分,都需要按业务流程来划分微服务才能最大程度保证系统的弹性。举个例子,手机支付大家都很熟悉,如果把后台交易核心简化,微服务划分就像是如下:
微服务划分

数据库设计

        无论公司业务上是否需要SaaS,将一个系统设计成SaaS系统都是非常必要的,SaaS的应用场景有不少,举两个例子大家就很容易理解了:
            1. 很多人都遇到过测试环境正常,生产环境却出现bug的情况。这时要查原因就很难了(一般只能等晚上业务停止后才能将生产数据拷贝到测试环境去重现bug),很多人的解决方法是在生产环境上创建测试商户,但这会带来各种各样的问题,比如账务就很难平了。如果系统是SaaS,就没有任何副作用。
            2. 一款系统,国际化是很常见的需求,资源文件的国际化是当然的,但是数据库里保存的文字怎么国际化呢?系统是SaaS也是一个很好的解决方案。

        一般的公司设计SaaS,就是在所有表都加一个字段:租户Id,所有sql文都带上租户id。这种方案感觉上就有点问题,一种更好更简单的方式是:每个租户一个数据库,通过动态切换数据库来切换租户。这样,除了开发框架的组员外,其它业务开发人员完全不用意识到这一点,就可以完成系统的开发。

下一章:搭建一个完整的微服务系统(二):动态切换数据库

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值