Ruby on Rails SOA 设计资源和示例

Posted

技术标签:

【中文标题】Ruby on Rails SOA 设计资源和示例【英文标题】:Ruby on Rails SOA Design Resources and Examples 【发布时间】:2012-04-21 08:13:40 【问题描述】:

我正在寻找一些资源来获取现有的单体 Rails 3.0 应用程序 (35K LOC) 并将其分解为 SOA 设计。任何书籍、博客、截屏视频或示例应用程序都会很棒。

我希望回答的主要问题是:

SOA 是否是正确的设计? 我从哪里开始? 我可以避免哪些常见的陷阱? 我现在应该考虑什么与以后可以做什么? (即性能)

我看过一些资源,但不完全确定它们是否是正确的起点:

Service Oriented Design with Rails RESTful Web Services Enterprise Rails(不确定这本书是否仍然有用) SOA Design Patterns(也许太“企业”了?)

【问题讨论】:

您可能还想了解使用 Rails 引擎作为模块化代码库的一种方式。服务非常适合分发功能,但也为代码库添加了一层间接层,这并不适合所有项目。 @BenTaitelbaum 感谢您的提示。没有考虑过,但肯定会对此进行一些研究。 【参考方案1】:

SOA 是否是正确的设计?

这取决于。你不讨厌这样的答案吗? 根据定义,使用消息传递或 API 调用将您的应用分解为松散耦合的服务将实现 SOA。

它的美妙之处在于,您可以在不更改其接口的情况下交换服务实现,并允许独立部署而无需关闭整个应用程序。另外,我会通过专门的 API 控制器来实现 SOA,这些 API 控制器是版本化的并公开自定义状态,而不是您为经过身份验证的用户或基于角色的会话保留的整个状态。

根据我的经验,难题在于是实现同步调用还是异步调用。同步调用显然更容易编程,但可能会让您的用户在执行时挂起,并且您必须处理长时间运行的查询的超时。注意数据库和网络服务器超时。

如果您实现异步调用,比如通过 ActiveMessaging 或类似方法,您必须处理回调或某种通知才能冒泡给您的用户。它还需要设置主要和辅助消息代理,可能还有一些 javascript 或轮询器来检查状态。不过这一切都很有趣!

我从哪里开始?

我会先看看它是否“值得”:毕竟,SOA 很酷,但确实会引入您目前没有的多个故障点。 如果您认为分解的应用程序会产生 HA 的离散服务并将服务于其他项目,那么我将从您提到的“druby book”和“面向服务”开始。

我可以避免哪些常见的陷阱?

我认为最大的担忧是跨多个服务的事务以及在远程服务失败时回滚整个操作的能力。如果您在某些操作中调用 A 并且它调用 B 并且 B 调用 C 并且 C 失败,那么问题就开始了。 谁知道C失败了?你将如何告诉 B 和 A 回滚?他们可以吗?他们保存状态吗?前期设计的棘手问题。

另一个问题是,当您将工作流置于 SOA 之上时,生活会变得复杂:谁是业务流程的守护者?集中式还是分布式?这一切又是绝对酷的东西,但沉重的东西悄悄蔓延,不是吗?但是,如果您必须迁移到 SOA,这就是生活。

我现在应该考虑什么与以后可以做什么? (即性能)

我会考虑现在可以在其他应用程序中使用的明显通用服务。我不会过度 SOA 您的环境以避免增加故障点并将 SOA 引入的故障点保持在最低限度。

【讨论】:

【参考方案2】:

这是 Crowdtap 的 CTO 朋友提供的绝佳资源。他们做了同样的事情,这确实帮助他们极大地提高了产品开发的速度,并为他们提供了更好的测试覆盖率。希望对你有帮助https://www.youtube.com/watch?v=KsiQXAXsQDQ

【讨论】:

以上是关于Ruby on Rails SOA 设计资源和示例的主要内容,如果未能解决你的问题,请参考以下文章

ruby-on-rails - 嵌套资源问题

Ruby on rails omniauth-twitter 和设计

Ruby on Rails入门篇

思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)

Ruby on Rails - Active Storage - 如何只接受 pdf 和 doc?

Ruby on rails 协会 - 用户(设计)在注册和登录后可以“创建团队”或“加入团队”