什么面向服务架构

SOA(Service-Oriented Architecture)面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。

SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA的提出是在企业计算领域,就是要将紧耦合的系统,划分为面向业务的,粗粒度,松耦合,无状态的服务。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。


面向服务架构的特点

面向服务架构的特点可概括为粗粒度、可重用、松耦合、明确定义的接口、无状态的服务设计和基于开放标准等特点。

面向服务的则重点是一切以服务为中心,从服务识别,服务分析,服务设计,服务开发和服务上线使用一切都是以服务为中心。但是要注意到面向服务本身不是在传统面向结构或面向对象基础上的一个新方法,而是对传统面向对象和组件化思想的提升。


什么是微服务架构

微服务尚无明确的定义,我们一般理解为它采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过一些轻量级交互机制来通信,例如 RPCHTTP 等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护。

微服务架构强调业务系统需要彻底地组件化和服务化。将单个业务系统拆分为多个可独立设计、开发、运行和运维的小应用。


微服务架构的特点

微服务架构具有通过服务实现组件化、按业务能力来划分服务与组织团队、服务即产品、智能终端与哑管道、去中心统一化、基础设施自动化、Design for failure和进化设计等特点。

分别了解了面向服务和微服务的定义与特点后,我们可以对二者进行比较。


面向服务架构和微服务架构的区别

首先,SOA的提出是在企业计算领域,就是要将紧耦合的系统划分为面向业务的,粗粒度,松耦合,无状态的服务。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。

基于这些基础的服务,可以将业务过程用类似BPEL流程的方式编排起来,而BPEL反映的是业务处理的过程,这些过程对于业务人员更为直观,调整也比hardcode的代码更容易。

企业计算领域,如果不是交易系统的话并发量都不是很大的,所以大多数情况下,一台服务器就容纳将许许多多的服务,这些服务采用统一的基础设施,可能都运行在一个应用服务器的进程中。虽然说是面向服务了,但还是单一的系统。

而微服务架构大体是从互联网企业兴起的,由于大规模用户,对分布式系统的要求很高,如果像企业计算那样的系统,伸缩就需要多个容纳续续多多的服务的系统实例,前面通过负载均衡使得多个系统成为一个集群。

但这是很不方便的,互联网企业迭代的周期很短,一周可能发布一个版本,甚至可能每天一个版本,而不同的子系统的发布周期是不一样的。

而且,不同的子系统也不像原来企业计算那样采用集中式的存储,使用昂贵的Oracle存储整个系统的数据,二是使用MongoDBHBaseCassandraNOSQL数据库和Redismemcache等分布式缓存。

那么就倾向采用以子系统为分割,不同的子系统采用自己的架构,那么各个服务运行自己的Web容器中,当需要增加计算能力的时候,只需要增加这个子系统或服务的实例就好了,当升级的时候,可以不影响别的子系统。这种组织方式大体上就被称作微服务架构。

微服务是细粒度的SOA组件,它们是关注点更窄的轻量级服务。微服务与SOA之间的另一个不同之处是服务互联和编写服务时所使用的技术。J2EE是一个遵守企业级标准的用于编写SOA架构的技术栈。Java命名与目录接口(JNDI)、企业级JavaBeanEJB)以及企业服务总线(ESB)都是SOA应用赖以构建和维护的生态土壤。即便ESB是标准,在2005年之后毕业的工程师却鲜有听说过ESB的,至于用过ESB的那就更少了。而当代的,例如Rubyon Rails这样的框架甚至不会去考虑如此复杂的软件部件。


如果用一句话来总结SOA和微服务架构的区别,那就是微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,同时SOA的思想进入到单个业务系统内部实现真正的组件化。