Architecture 分析API、新微服务或与现有API集成?

Architecture 分析API、新微服务或与现有API集成?,architecture,microservices,Architecture,Microservices,我们运行各种托管的公文包服务,带有API(CakePHP、MySQL)和与之连接的独立前端应用程序(javascript)。API(我们称之为Content API)是一个非常单一的API,它处理身份验证、存储和检索所有内容、发送电子邮件,基本上是服务器端的所有内容。我们有一个小团队,我们的服务相对较小(数千名用户)。我们目前只在一个AmazonEC2实例上运行,但希望在不久的将来扩展 我们即将构建一个分析系统,该系统将包括一个显示奇特图形的前端,以及一个存储事件并为上述图形提供数据的API 现

我们运行各种托管的公文包服务,带有API(CakePHP、MySQL)和与之连接的独立前端应用程序(javascript)。API(我们称之为Content API)是一个非常单一的API,它处理身份验证、存储和检索所有内容、发送电子邮件,基本上是服务器端的所有内容。我们有一个小团队,我们的服务相对较小(数千名用户)。我们目前只在一个AmazonEC2实例上运行,但希望在不久的将来扩展

我们即将构建一个分析系统,该系统将包括一个显示奇特图形的前端,以及一个存储事件并为上述图形提供数据的API

现在我面临的困境是:我应该创建一个单独的分析API,还是将其功能与现有的内容API集成

我一直在读微服务的优点,由于分析是如此独特的功能,我倾向于认为它应该拥有自己的API。然而

我们正在处理的数据并不太疯狂。我们谈论的是GBs而不是TBs。此外,分析数据是非常结构化的(事件类型、日期时间、用户id、内容id等等)。此外,我们不会搜索文本字符串。所有这些让我觉得关系数据库比elasticsearch更合适。因为我已经知道MySQL,所以我也倾向于使用MySQL进行分析

另外,因为我已经知道CakePHP,所以我也倾向于将CakePHP用于分析API。尽管我仍然对更轻量级的PHP框架持开放态度

现在,正如我提到的,AnalyticsAPI将需要存储事件(页面浏览等)。但它还需要来自我们的内容API(用户名、文件名等)的数据。此外,我想使用身份验证,这也是由我们的内容API处理的。因此,如果我们的分析前端向我们的分析API发出请求,分析API必须向我们的内容API发出一个或多个请求,然后才能做出回复。至少要对用户进行身份验证,还要收集分析图所需的部分数据

人们经常提到的微服务的一个优点是,您可以独立地使用它们,添加和更改功能,或者移动到一个全新的平台。另一个是可伸缩性:您可以扩展一个微服务,而无需扩展另一个

然而,当一个微服务需要来自另一个微服务的数据时(在我的情况下就是这样),这些优势不是大部分都被否定了吗?每当我在我们的内容API上更改一个端点时,我都需要考虑我们的分析API是否正在使用该端点。没有单元测试来涵盖这一点。当我们的分析API的使用量增长时,我不能仅仅扩大分析基础设施的规模,因为内容API也会受到更频繁的攻击


所以我想知道在我们的情况下,单一的方法是否更有意义?或者说我没有看到微服务方法有什么好处?

首先,这是任何微服务实现中的典型场景。你的想法都没有错。是的,这些都是缺点;这将意味着更多的工作和更多的延迟,因为https rest api调用将比JVM内部的调用慢得多

此外,你说得对,微服务可以独立维护并不总是正确的。。如果一个MS正在呼叫另一个MS;自动存在依赖项

说到这里,我们都知道人们转向微服务是因为一个最大的优势。。。这是无限的规模。。。如果你是亚马逊。。你必须不惜任何代价实现规模。。这可能是更高的延迟数。。那么微服务是唯一的解决方案。。现在,我们甚至在云上有256 GB的RAM盒。。所以,直到你达到亚马逊的水平,你应该能够处理规模

但是,如果假设您的组织出于任何原因决定将微服务作为前进的方向。。那么现在正是u开发微服务分析的正确时机。。。因为,我们总是有很多东西要交付..我们总是会有很多功能发布。。我们将永远没有时间将现有产品重新设计为微型服务。。所以,不管你开发了什么新的。。将其开发为微型服务。。通过这种方式,您的团队也可以学习一些东西,并且不会有太大的风险和时间的最佳利用


这是基于我个人的经验。

是的,使用MySQL进行分析是非常好的。。不要像其他人一样陷入陷阱,他们只是用所有花哨的名字来形容它。。。即使在今天,许多大型网站都在MySQL上工作。谢谢你的见解!虽然这里显然没有正确或错误的答案,只有各种各样的观点和经验,但我会继续接受你的:)