微服务是正确实施了SOA

本文介绍了如何通过基于Node.JS和Docker的微服务架构正确实现SOA。

这是来自Cake Pulse团队关于重构他们的Pulse应用实践心得,Pulse应用监控着超过10,000以上POS设备,进行实时有效的分析。在过去几周,Pulse团队在对今天企业开发大型Web应用系统中最佳实践方式进行辩论,最后,团队决定走微服务架构路线,在CAKE LABS演进的分享演讲中,Chamin和Daham演讲了“Doing SOA Right”

原文:
Service Oriented Architecture, SOA | Software Engi

微服务是面向服务架构的正确做法,在传统整体型monolithic架构中,顶层一般是由UI层组成,接着后面是服务API,然后是业务逻辑,再后面是数据访问层,这些每个层都是彼此解耦,被分解为几个子组件,每个子组件能单独执行功能。

在这样情况下,业务逻辑会影响所有层,一旦修改会扩散影响到整个所有层,微服务有点是遵循服务独立的自然本性,它们不彼此依赖,单独部署,微服务能专注某个功能,特别是基于资源考量,即使微服务今天是IT工业的好选择,也并不意味着编写代码量减少,这个Micro微的意思不是意味着小,因为它严重依赖业务需求,整体型Monolithic架构与微服务区别是:微服务更加简单,没有SOA中 SOAP, WS* with HTTP, JMS ++等方法的权衡,同时作为一个ESB杀手更加轻量和简单。

当客户端连接到不同API,这样微服务不必使用ESB,在客户端和微服务直接交互中,它们会有自己的格式,但是不意味着另外一个用户会采取不同格式,这在现实中是不鼓励这么做的。每个微服务有能力分享它的服务给其他微服务,或者订阅其他微服务的服务,这允许不同微服务能够被集成。

正常情况下,Docker是用于部署微服务,这样通过扩展容器扩展微服务,每个微服务部署在一个单独的Docker实例中,Google Kubernete用于实现服务器的orchestration或者是Docker实例的orchestration(编排),安全和管治在整体型架构中是使用统一单个的安全和管治层,这容易造成很大安全漏洞,而在微服务中,安全和管治层是独立的,Pulse应用使用Salesforce的授权认证和Pulse agent实现。

快速实现的技术采取NodeJS,这是一个异步语言,通常人们对其单线程质疑,有时是对的,NodeJS作为遵循单线程架构的事件循环,这个单线程是一个background线程,为了处理异步,有几个策略,比如foreground (in-line)方法。这是一个普通开发者熟悉的Web服务器处理请求的方式,in-line方法主要优点是:当客户端在服务器的处理进程中堵塞时,它会给一个机会处理其他请求。

NodeJS也能有并行线程、本地消息(forking),一个进程能够用来创建几个子进程,都能使用通道或队列和主进程通信。这是Nodejs的另外一个强大的处理任务方式。