1.概述
在互联网上,有几个常见的概念,WebService、SOA、Restful和微服务,这几个概念此起彼伏,会造成很多人困惑,这非常值得花些功夫进行说明。
2.概念之一:WebService
第一个概念是WebService。WebService本意是提供一个网络服务。但WebService的框架的基础是:
1)HTTP;
2)XML。
HTTP+XML构成了WebService的基础。当然,笔者想为什么用这两种技术框架,是因为WebService建立的时间比较早,而当时的XML和HTTP比较成熟。
WebService的三大元素为:
1)SOAP:一个基于XML的可扩展消息信封格式,需同时绑定一个网络传输协议。这个协议通常是HTTP或HTTPS,但也可能是SMTP或XMPP。
2)WSDL:一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。
3)UDDI:一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。
3.概念之二:SOA
第二个概念是SOA。SOA英文原意为service-orientened architeture,即面向服务的架构。SOA并不特指某一种技术,而是一种分布式运算的软件设计方法。
SOA中的一项服务应有以下四个特性[1]:
1)针对某特定要求的输出,该服务就是运作一项商业逻辑;
2)具有完备的特性(self-contained);
3)消费者并不需要了解此服务的运作过程;
4)可能由底层其他服务组成。
SOA并不是一种技术,而是一种设计思路,是一种松耦合的设计思路。SOA的演变,可以参考笔者个人博客《互联网服务:从单一应用到微服务》(https://blog.csdn.net/wangzhezhilu001/article/details/108226381)
4.概念之三:Restful
Restful的基本词是Rest,Rest全称是Representational State Transfer,意为表现状态转换。REST来源于Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。Rest不是协议也不是规范,而是一种接口、服务、系统之间通讯的风格[2]。
Restful的特点是:
1)资源通过一定格式来表现自己;
2)统一接口:对于业务数据的CRUD,RESTful 用HTTP方法与之对应;
3)URI作为访问资源的唯一标识;
4)无状态;
5)URI中只能有名词,不能有动词。
Restful风格(或规范),给互联网发展提供了另一种替代思想。Restful成为了10年内最主要的互联网开发风格。
5.概念之四:微服务
微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通信。
微服务的起源是由 Peter Rodgers 博士于 2005 年度云计算博览会提出的微 Web 服务 (Micro-Web-Service) 开始,Juval Löwy 则是与他有类似的前导想法,将类别变成细粒服务 (granular services),以作为 Microsoft 下一阶段的软件架构,其核心想法是让服务是由类似 Unix 管道的访问方式使用,而且复杂的服务背后是使用简单 URI 来开放接口,任何服务,任何细粒都能被开放 (exposed)。这个设计在 HP 的实验室被实现,具有改变复杂软件系统的强大力量。 2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现 。[3]
微服务实际是基于SOA的,在SOA进行更小的粒度划分。
微服务有如下特点:
1)数据库:每个微服务不同的数据库治理理念,包括:
(1)每个服务都各有一个数据库,同属性的服务可共享同个数据库。
(2)所有服务都共享同个数据库,但是不同表格,并且不会跨域访问。
(3)每个服务都有自己的数据库,就算是同属性的服务也是,数据库并不会共享。
2)沟通与事件广播:通过异步传递事件。
3)服务探索:每隔一段时间就向微服务进行健康检查。
但微服务与WebService,以及Restful并不矛盾。微服务可以用这些风格的部分,作为自己的单一服务。
参考资料:
[1]维基百科,面向服务的体系结构,https://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E6%9C%8D%E5%8A%A1%E7%9A%84%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84
[2]维基百科,变现层状态转换,https://zh.wikipedia.org/zh/%E8%A1%A8%E7%8E%B0%E5%B1%82%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2
[3]维基百科,微服务,https://zh.wikipedia.org/wiki/%E5%BE%AE%E6%9C%8D%E5%8B%99