它已经不是什么新鲜事,我通过主机(或者主服务器之类) 获得大部分专业知识和基本工具为某个公司及其联署公司提供支持。
但对于目标性的扩展,我们需要超越这些共享层并开始定制他们的产品和服务,在软件开发无关性方面可以帮助你更多的面向服务体系结构,亦或是SOA。
因此,本文的目的何在?基于我们认为如何从我们目前的已经是综合的架构进行转变,(转变)到一个更加强大的服务层。
为了转入实施要做的第一步,是标识出应纳入作为独立的服务的第一组功能的真实身份。
通常,当到了引入新功能时候就是新的服务的机会出现的时候,或者对于改变的要求的安置/执行的成本太高的时候:例如,假如你想增加从你网站发送SMSes的能力,一个好的服务应该是仅处处理接受一组输入事件, 通过webservice 组装消息并联络真实的 SMS提供者商以达到转发消息的目的;另一种好的例子是身份:如果你正在为不同的用户组需要以同步方式进行同步而挣扎,一个很好的解决方案是,以集中的身份并至少是提供认证服务。
另一个典型的问题是,当你拥有一个集中式的架构的时候,该如何管理和组织数据。
在SOA术语里,通常数据时在服务之间共享的,但这并不意味着每个服务没有自己的数据层:经常看见一些非常老式的RDBMS(关系型数据库管理系统)横跨所有的服务共享,其中一些使用较传统的解决方案,像NoSQL数据库;主要是为了达到更好的性能和不同的数据检索模式。
想想有模型的遗留应用程序,这些(模型)可以被终端用户进行广泛定制,通常实行的EAV(Entity–Attribute–Value,实体-属性-值)模式,陷进了性能瓶颈的泥沼,然而像MongoDB或者CouchDB这样的文档数据库能完美的解决该问题。
如果你正在运行的,例如,一个电子商务系统,你可能需要一个像MSSQL这样的稳固和强大的系统,然而摆在眼前的,在运行的确实MongDB数据库:一旦用户购买了产品,通过web服务将它存进了MSSQL。
在SOA中一个典型的环节,我们需求问题的答案(为我们的请求读取响应),用一个简单的解决方案就能克服这个问题:当一个服务需要另一个服务的时候,我们会想到API(应用程序接口)。
例如,你的前端可能提供了身份认证,然而Identity manager是一种为你的架构的多层次身份的以后总服务:当前端需要对用户进行身份认证时,它将直接依赖于Identity 服务,他或者她提交给前端的凭据要求(Identity 服务)对用户进行认证。
传统APIs分为几种类型:
无论什么时候,如果你决定使用SOA,你将发现你自己总是在和API打交道:在层完全不知道对方域名的情况下提供数据交换机制,它是最简单的方式。
另一个非常常见的场景,是当服务“侦听”的时候,等待其他的架构体系的组件发送通知:你可能已经想到了消息队列和消息通知,你猜对了。
当我们拥有像 RabbitMQ这样的工具,在架构体系中的不同部分之间收集和转发通知的帮助,一个事件驱动的进程就能完成 : 通过Rabbit,服务能转发一条消息到一个队列,依次类推,通过一个守护进程,将消息分发掉。
想想早些时候我所提到的,SMS转发机制可以很好地适应这种情况:考虑到SMSes,一旦用户在你的前端完成一定的动作SMS将被发送(通过获得信任,订货电子商务等等);一旦用户完成一个动作,一条通知将被发出,无论是谁需要侦听该条消息,都将对(该条消息)进行捕捉和处理。
在我们快而新的通往我们架构的集成服务的旅途中,我们发现我们自己灰常开心:他并非是什么新鲜事,我们为我们新的、隔离的服务使用 RabbitMQ和Symfony2,我们已经标识了一些服务,能在他们自己的、解耦的上下文环境中运行。
想想在SOA里,顺便提一下,带来了一连串的问题,像架构方面的思考,而不是应用程序:你不会为你的应用程序部署一个新的版本,你更新架构的某一部分;你的系统是解耦的,从代码到你的程序对其处理。而在开发环境的并发症是什么呢?我应该使用哪种监控工具来了解所有的组件是否同时工作?还有呢?
对于每个人面对的和我们将要面临的,对这些问题,那有足够的空间,我将会非常感兴趣的,对我们的方法和我们在自己的上下文中所具有的眼光。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务