我认为应首先建立一些条件。
大多数公司都在使用他们拥有的外部API。他们为什么不呢?它是可靠的/被监控/分布式/负载平衡的,因此它将是一个很好的服务。他们可能有一些内部版本的API用于测试/释放环,但主要是他们的前端将构建在您可以调用的同一堆栈上。因此,您不应该将API与生产中的API完全分开。在这个时代,它实际上只是系统的一部分。
这两个图对我来说都不正确。最上面的一个看起来不正确,因为你是从另一个实例显式读取而底部看起来不正确,因为你没有复制。现在复制是一个非常冗长的主题 - 简短的教训是 的 你应该有复制。 强> 检查此链接以查看复制数据的不同类型的一致性: https://en.wikipedia.org/wiki/Consistency_model 你必须在这里做一些权衡,但作为一个例子,取决于你的负载和负载模式;您可以复制您的数据库,允许您的读取是多区域的,写入是单区域的,您的业务层 - 也为您的API提供支持将部署到多个区域。 (即如果你有足够的流量)
好吧,这有一些设计问题,但让我们先解决你的问题。
在案例(1)(复制)中,我如何处理实时数据?例如:巴士位置?
在案例(2)中,我可能会有什么样的担忧? (安全性能...)
你不应该使用案例2。
我认为您应该先确定用户和系统的要求。由于我们无法真正知道我们是否为本地区域或全球系统设计此系统,因此仅仅通过这些图表进行设计也非常困难。理想情况下,您将拥有所有内容的冗余(因此,多个服务器为网络流量/多个DB /多个CDN提供静态内容等等),因此您可以获得更高的服务质量和更低的崩溃机会。有时甚至整个地区的云服务都因自然灾害而瘫痪/因此在不同地区进行复制是一个好主意,但您的系统可能并不真正需要它。在所有情况下,您的公共API都不应与您的作品分开。