Architecture 如何将功能划分为不同的服务

Architecture 如何将功能划分为不同的服务,architecture,scalability,partitioning,Architecture,Scalability,Partitioning,将使用RubyonRails或Django等标准web框架构建的大型web应用程序拆分为小块并将其分布在大量服务器上的最佳方法是什么?如果我们考虑在REST服务和A/ORACLE体系结构中的分区,那么可以在保罗的DIX“露比Rails”面向服务设计的书中使用一种方法: 逻辑函数的划分 基于读/写频率的分区 关于最小化连接的划分 基于迭代速度的划分 它更倾向于在逻辑功能和业务逻辑上进行分区,在读/写频率上进行分区,还是在最小化连接和数据库访问上进行分区?另一种可能的选择是不同的内容类型:ID、

将使用RubyonRails或Django等标准web框架构建的大型web应用程序拆分为小块并将其分布在大量服务器上的最佳方法是什么?如果我们考虑在REST服务和A/ORACLE体系结构中的分区,那么可以在保罗的DIX“露比Rails”面向服务设计的书中使用一种方法:

  • 逻辑函数的划分
  • 基于读/写频率的分区
  • 关于最小化连接的划分
  • 基于迭代速度的划分

它更倾向于在逻辑功能和业务逻辑上进行分区,在读/写频率上进行分区,还是在最小化连接和数据库访问上进行分区?另一种可能的选择是不同的内容类型:ID、(社交)图形、地图、文件、图像等。例如,在Amazon S3上存储图像或使用Google maps获取地图是很常见的。最佳实践是什么?

也许值得一看互联网巨头。亚马逊和eBay以面向服务的方式著称。这些是互联网巨头,他们将一切都划分为服务

易趣: Randy Shoup解释了eBay构建大型网站的许多最佳实践,例如在本演示中介绍了和相应的。易趣将所有东西都分区。每个问题都按数据、负载和/或使用模式在多个维度上划分为可管理的块。两种基本的分区模式是(1)功能分区和(2)水平拆分,数据库和应用程序层首先按功能进行拆分,然后水平拆分。Randy说,功能分割和功能分解是最重要的方法,相关的功能块属于一起,而不相关的功能块属于分开。Paul Dix在他的书中也说了同样的话:“通常,您希望根据服务的逻辑功能对其进行分区”。拥有大约200组功能,即“应用程序”。在16000台应用服务器上运行的应用层分为220个独立的应用程序池(销售、搜索、查看项目、竞价、结帐等等)。ebay数据库层在400台主机上拥有1000多个不同的逻辑数据库,这些数据库被划分为多个功能区域。ebay已经编写了自己的ORM层,称为数据访问层(DAL),负责数据库拆分

亚马逊: 在亚马逊,一切都分为服务。面向服务的体系结构(SOA)是Amazon技术的基本构建抽象。服务不仅分为多个部分,甚至Amazon的开发人员也围绕服务组成团队。亚马逊实际上是许多内部初创企业的生态系统,它们拥有自己的数据和API。这里的服务是由一小部分开发人员操作和拥有的。它由数百种服务组成,从原始的、低级的基础服务(存储、计算、排队等)到聚集、高级服务,例如身份管理、内容生成和发现产品以及提供管理、订单处理、支付或履行和客户服务。要为访问Amazon.com的客户构建产品详细信息页面,该软件需要200到300个服务,为该客户提供高度个性化的体验


Twitter使用与不同内容类型、ID、图形、URL等相对应的服务。它使用雪花来生成ID。是否使用网络服务在高范围内生成唯一的ID号。Twitter使用FlockDB作为社交图存储。是一个分布式图形数据库,用于存储Twitter使用的邻接列表。它使用SpiderDuck作为URL获取程序。实时获取推特中共享的所有URL,解析下载的内容以提取感兴趣的元数据,并使该元数据可供其他推特服务在几秒钟内使用。

太主观了。“最佳”答案需要比您提供的更多地了解您的软件、系统、数据和意图。我添加了更具体的信息,希望这有助于澄清问题question@0x4a6f4672这个问题仍然很广泛。这真的很难回答。如果连接很少,那么最小化连接就没有意义;如果大部分是读取,那么优化写入就没有意义。你能分享一下你想要构建的应用程序的想法吗?如果你能指出问题中的性能问题,你可能已经有了答案。是的,很难回答,但这可能也是它有趣的原因。它与许多开发人员非常相关,他们拥有一个大型应用程序,并希望将其分解为几个独立的服务。