如何拆分现有的 webApi 项目?

How to split an existing webApi project?

我有一个现有的遗留 .Net webApi 项目,每个项目有大约 20 个控制器和大约 10 个方法。 流量是每秒 15 个请求。 我想知道采用微服务方法并将其拆分为几个托管项目是否是明智之举。

由于我无法访问客户端(android、ios、网站和第三方),我将不得不保留现有的 API URL正在工作(http://domainName/API)。

我快速而肮脏的架构是: 1) 构建新的托管 API 进程 http://domainName/API1, http://domainName/API2, http://domainName/API3... 2) 请客户使用新的 URLs 3) http://domainName/API 将充当路由到新的后台进程竞争

想法?有没有现成的模式?

I'm wondering if it's a smart thing to do to take microServices approach and split it into few hosted projects.

这在很大程度上取决于您今天所经历的组织痛苦的程度。您的开发团队是否在协调单体开发和单体不同部分之间的依赖关系引起的问题上浪费了很多时间?你的单体应用需要几个小时来构建吗?您的企业是否会从更快的发布中受益匪浅?如果答案是肯定的,那么您应该考虑切换到微服务。如果答案是否定的或可能,那么你要么有一个很好的 designed/working 整体 and/or 改变的压力很低。将整体重构为微服务很可能非常昂贵,您必须进行 cost/benefit 计算。这是一个 good read and this too.

Ideas ? Is there any existing pattern for that?

我发现这篇文章是关于 how to change a monolith. Additionally here are some resources about the experiences of some large companies (Amazon1, Amazon2, Soundcloud, Netflix) 的很好的一般指南。

简而言之:

  • 您想 avoid a big bang 尝试一次更改整个整体或大部分的重构。
  • 从您的单体中识别出在重构为微服务时将带来最大好处的模块。

  • 首先更改应用程序的接口而不更改底层实现(对于最高值 module/service)以反映独立服务。

  • 更改后的界面使您可以自由地按照自己的步调重构实际实现。