面向服务的体系结构建议

时间:2012-04-11 11:35:16

标签: web-services rest soa saas

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

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

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

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

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

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

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

  1. 这种架构是SOA还是SaaS(或两者兼而有之)?
  2. 我想要获得什么是一个很好的实现? (请尽可能详细地解释)
  3. 哪种身份验证更适合客户端(用户令牌与OAuth或类似)
  4. 你对这类项目有什么建议吗?
  5. 我已经有大约3个月的时间了,所以我不能做一些非常复杂的事情(除了对单个程序员来说这是不现实的事实。)

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

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

    谢谢!

2 个答案:

答案 0 :(得分:1)

我将SaaS定义为商业模式而不是架构;然而,就像所有业务领域的要求一样,它会影响系统架构,但它本身并不会。您定义的内容对于面向服务的体系结构至关重要。

您的声明“独立且能够将它们结合起来提供新服务”是建议SOA的基本非功能性设计要求。

SOA的良好实现是关于具有良好定义和灵活的界面,非常明确责任划分。然而,它很难被规定。证据就在吃;它提供了灵活的重用。我的建议是花时间阅读SOA设计模式资源,并了解关于适当使用环境的定义特征。然后应用单一责任原则适当的抽象级别。 C.F. (Domain) Space Based Architecture是一种SOA元模式。

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

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

答案 1 :(得分:0)

SOA不强制使用XML。

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

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

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