6

出于个人和大学研究的原因,我正在考虑使用面向服务的架构构建一个简单的 CRM。它的意义只是为了解释架构本身,而不是商业用途。

我正在考虑实施一个提供简单分析服务和客户服务(用户存储、个人评论和其他一些东西)的 CRM。

我正在设计的架构定义: - WebGUI(其他服务的客户端) - AnalyticsService(接收数据、分析和收集数据的服务) - CustomerCareService(使用 RESTful API 应用 CRUD 操作的服务)。

每个服务都有自己的数据库,完全独立于其他服务。它们公开了一个公共接口。该接口当然必须提供某种身份验证,以拒绝未经授权的请求。

我想在这种架构中解释的优点是所有事物都独立的可能性以及将它们组合起来以提供新服务的能力(例如,如果有一个 OrderService 来处理订单,那么很容易将它与使用公共 API 的客户)。对我来说最大的优势是构建使用这些服务的其他客户端很容易。

我不知道什么是好的身份验证方法,可以很容易实现,我也不确定如何制作这个 API(使用 XML 或带有 GET/POST 数据的普通 REST API)。我曾与 Amazon、PayPal 和其他公司 API 合作过,他们似乎使用 REST 服务(paypal 使用丑陋的 _cmd GET 参数,而 Amazon 使用更好的 URI)来知道该怎么做,但是阅读一些关于 SOA 的东西似乎人们也使用XML。当然,我还需要考虑到 Web 界面必须能够识别登录用户、获取权限(令牌或其他任何内容)并将其与服务一起使用以显示信息。所以我不确定 SOA 是不是我真正构建的那种架构……是 SaaS 而不是 SOA?我认为使用 RESTful 应用程序会更好,

为清楚起见,我在这里列出我的问题:

  1. 这种架构是称为 SOA 还是 SaaS(或两者兼有)?
  2. 对于我想要获得的东西,什么是好的实现?(请尽可能详细地解释)
  3. 哪种身份验证更适合客户端(用户令牌与 OAuth 或类似)
  4. 您对此类项目有什么建议吗?

我有大约 3 个月的时间来做这件事,所以我不能做一些真正复杂的事情(除了这对于单个程序员来说是不现实的事实)。

我知道 Python(WSGI 框架)、Ruby on Rails、C/C++ 和其他语言(.net 除外),我想在 Linux 环境下开发它(MySQL 或 Postgres,如果您有任何建议,甚至可以使用 NoSQL正确的选择),我还可以将这些服务独立程序的几种语言结合起来。

我想在这里有一些好的观点和一些好的建议。

谢谢!

4

2 回答 2

1

我会将 SaaS 定义为一种商业模式,而不是一种架构;然而,就像所有业务领域需求一样,它会影响系统架构,但它本身不会。您定义的内容是面向服务的架构必不可少的。

您的陈述“独立并能够将它们组合以提供新服务”是建议 SOA 的基本非功能设计要求。

良好的 SOA 实现是关于定义良好且灵活的接口,以及非常明确的职责划分。然而,它很难被规范。证据在吃;它是否提供了灵活的重用。我的建议是花时间阅读 SOA 设计模式资源,并了解与使用的适当上下文相关的定义特征。然后应用单一职责原则适当的抽象级别。cf (域)基于空间的架构是一种 SOA 元模式。

关于授权,我建议遵循服务方法,使用分布式目录服务系统,如开放 LDAP,并注意服务提供者和用户拥有自己的凭据是完全合理的,您可以使用公私密钥签署消息。

主要建议是学习和借鉴他人的经验:

于 2012-04-17T11:48:01.743 回答
0

SOA 不强制使用 XML。

当前,网络技术占主导地位,并定义了未来。所以我们公司选择 JSON RESTful 服务作为基础。和 SOA 一样的原则。

建议语言是没有意义的,因为 SOA 和良好实现的目的是 - 允许使用任何语言或框架

(仅供参考,我们将 Java 与基于 Spring MVC 的 Web 服务、Node.js、PHP 一起使用)

于 2013-05-08T10:51:47.717 回答