面向服务的架构建议

6
出于个人和大学研究的原因,我考虑使用面向服务的体系结构构建一个简单的CRM系统。它的意义在于解释架构本身,而不是商业用途。
我想要实现一个可以提供简单分析服务和客户关怀(用户存储、个人评论和其他一些功能)的CRM系统。
我正在设计的体系结构包括: - WebGUI(其他服务的客户端) - AnalyticsService(接收数据、分析并收集数据的服务) - CustomerCareService(使用RESTful API执行CRUD操作的服务)。
每个服务都有自己的数据库,完全独立于其他服务。它们公开了一个公共界面。当然,这个接口必须提供某种形式的身份验证,以拒绝未经授权的请求。
我想解释这种体系结构的优点是拥有所有独立的事物,并能够将它们组合起来提供新的服务(例如,如果有一个OrderService来处理订单,将其与Customer结合使用公共API将会很容易)。对我来说最大的优势是可以很容易地构建其他使用这些服务的客户端。
我不知道什么是一种好的身份验证方法,这可能很容易实现,我也不确定如何制作这些API(使用XML还是纯RESTful API与GET/POST数据)。我曾经使用Amazon、PayPal和其他公司的API,它们似乎都使用RESTful服务(paypal使用一个丑陋的_cmd GET参数,而Amazon使用更好的URI)来知道要做什么,但在读一些关于SOA的内容时,人们似乎也使用XML。当然,我还需要考虑到Web界面必须能够识别已登录用户、获取权限(令牌或其他)并将其与服务一起使用以显示信息。
因此,我不确定SOA是否真正适合我正在构建的体系结构...是SaaS而不是SOA吗? 我认为最好使用RESTful应用程序,使用JSON或类似的东西来实现它(我不是XML的忠实粉丝,我觉得它太冗长了)。
为了清晰起见,我在这里列出了我的问题: 1.这种体系结构称为SOA还是SaaS(或两者都是)? 2.对于我想要实现的内容,好的实现方法是什么?(请尽可能详细地解释) 3.哪种身份验证方式更适合客户端(用户令牌 vs OAuth或类似方式)? 4.你对这个项目有什么建议吗?
我有大约3个月的时间去完成它,所以我不能做一些真正复杂的事情(除了这个事实,对于单个程序员来说这也不现实)。
我知道Python(WSGI框架)、Ruby on Rails、C/C++和其他语言(.net除外),我希望在Linux环境下开发它(MySQL或Postgres,甚至是NoSQL,如果您有对正确选择的建议),我还可以结合几种语言,使这些服务成为独立的程序。
我想要一些好的观点和建议。
谢谢!
2个回答

1
我认为SaaS是一种商业模式而不是架构;但像所有业务领域要求一样,它将影响系统架构,但本身不是。您所定义的基本上是面向服务的架构。
您的声明“独立以及将它们组合以提供新服务的能力”是基本的非功能设计要求,表明了SOA。
良好的SOA实现需要具有良好定义和灵活的接口,并且责任范围非常清晰。然而,这很难规定。关键是经过验证,它是否提供了灵活的重用性。我的建议是花时间阅读SOA设计模式资源,并了解相应上下文中使用的定义特征。然后,应用适当抽象级别的单一职责原则。 (领域)基于空间的架构是一种SOA元模式。
关于授权,我建议采用服务方法,使用分布式目录服务系统,例如open LDAP,并注意服务提供者和用户拥有自己的凭据是完全合理的,您可以使用公钥-私钥来签署消息。
最重要的建议是学习并汲取他人的经验:

谢谢,非常棒的回答!你说得对,这些资源非常有帮助,我也买了一些书,这是一个非常有趣的行业! - user765144

0

SOA不强制使用XML。

目前,Web技术占主导地位,并定义未来。因此,我们公司选择了JSON RESTful服务作为基础,以SOA原则为指导。

没有必要建议语言,因为SOA和良好的实现的目的是 -使任何语言或框架都可以使用

(FYI,我们使用基于Spring MVC的Java Web服务、Node.js和PHP)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接