zh

这个怎么运作?

需要业务帮助?

联系我们获取适合您需求的个性化 FinMV 报价。

单体还是微服务?

贵公司的技术总监在计划推出金融平台时,必须选择项目架构选项。他有哪些架构选项可供选择,哪个更好?

从边界清晰的最简架构开始

一个新的投资平台只有一个团队、一次部署和一个数据库。在这个阶段,分布式系统的成本完全体现为额外开销:本可以用函数调用解决的地方却要经过网络调用,本可以用一次事务解决的地方却要依赖最终一致性,还要背负一支尚无人手承担的运维负担。

因此,默认实现是模块化的:入驻、发行、投资、支付、文件、服务与报表都存在于同一个可部署系统内部、彼此明确划界的边界之中。使其模块化的并非文件夹结构,而是每个模块都拥有自己的契约、自己的数据,并由自己的测试覆盖。

只有在有充分理由时才拆分服务

当存在具体依据时,一个模块才会被拆分为独立服务,而这些依据源自业务,而非架构潮流:

  • 规模——系统的某一部分需要独立于其余部分进行扩展或独立发生故障
  • 安全——某条边界所需的隔离强度超过了单一进程内模块所能提供的程度
  • 合规——监管方或审计要求实行职责分离或数据分离
  • 部署——某一部分必须按不同节奏或由不同团队发布
  • 集成——外部系统对可用性与吞吐量提出了自己的要求
  • 组织——不同团队需要各自拥有不同部分,而无需在每次发布时相互协调

由于边界与契约早已存在,拆分服务只是一次有计划的操作,而不是一次重写。这正是这种做法的意义所在:这一选项始终保持开放,且成本始终低廉。

只有在异步真正有价值的地方才使用异步

不需要阻塞用户的工作——结算对账、文件生成、服务商回调、报表生成——都通过队列处理。RabbitMQ 或 Kafka 这类消息代理只有在吞吐量或集成拓扑确有需要时才会引入,而不是默认使用。PostgreSQL 始终是数据的权威记录系统;Redis 仅用于确实需要低延迟缓存或协调的场景。

我们不做什么

我们既不推销单体架构,也不推销微服务架构。二者都只是对尚未被提出的问题给出的答案。我们也不会为了让平台看起来更“正式”而去构建分布式系统——架构上的表演式设计运维成本高昂,交接也十分困难。

您的架构取决于您的业务规模、监管义务、集成需求以及负责运维的团队规模——并被设计为能够随着这些因素的变化而演进。