开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Hadoop 1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/75/detail/15841
Hadoop 1(三)
内容介绍
一.认识 SOA
二.如何组装服务
三.服务和构建的区别
四.服务的架构
五.微服务
六.SOA 的架构
七.Hadoop,Spark 和Storm
四.服务的架构
在面向服务的架构里面,它到底涉及到哪些东西?这是它整个的一个协议站,或者可以理解为,在一个面向服务的架构里面,它涉及到的一些部分。第一个就是它的传输协议,即它传输是什么样的,它的传输可以是像 FTP 或者 HTTP 这样的东西,去描述服务和服务之间是如何进行通信的,当然,他们都是基于这种异构的通信的方式,所以中间一定会有一个消息中间件这样的一种通讯方式。然后服务的通信协议,比如我们在之前描述的像 SOAP 或者 restful 这样的东西,他在说我们应该怎样去调用这个服务,把服务的请求给他,然后服务的响应是怎么样发回来的?还有一个服务的描述,即服务是做什么的,它的功能是什么?比如上节课我们说的, WSDL 里面有一部分内容,例如这个服务的 description ,它的 port 和 operation 都在这里面描述。然后上面是具体的服务的实现, 比如有 Java 的实现,有NET 的实现,不管怎么样,他们都会有这个 endpoint ,还要有一些像 proxy 这种带。然后再往上,服务和服务要组成一个流程,才能完成更大的更复杂的一个业务流程,或者更大力度的一个服务。
这时候业务的流程应该如何编排?比如有 BPMN 这样的一些规范出现,不管怎么去编排这些服务,他的意思就是,我要产生一个工作流,是一系列的服务,它们互相之间协作完成一个更大力度的,认为它是一个服务也好或者一个业务需求也好,就可以满足这些。所以我们看到,在每一层它都定义了相关的一些规范,然后,这些服务因为是异步通信,它是松散耦合的。所以在一个工作流里面, A 处理完之后交给 B 这件事情,不是在 A 的里面有一个代码说我要去调用 B ,而是说 A 产生完输出之后会给一个消息中间件即 service bus ,它拿到这个结果之后,会去查那个工作流,就是这个工作流描述什么,他发现 A 执行完之后要给 B ,是它把这个东西直接推给 B ,让 B 去执行, B 执行完之后再把结果回给它,它再根据工作人员的描述,比如它现在要给 C ,于是他再推给 C ,以此类推, A 和 B 和 C 之间的这个关系完全由消息中间件来维护, ABC 互相之间是不直接交互的。
那么这个消息中间件怎么知道会存在 ABC 的呢? ABC 可以把自己注册到一个像服务注册表的这个东西里面,就像在图书馆的图书目录一样。为了让更多的人用到这个服务,我就把自己注册到这个图书目录里。就像电话号码本一样,为了让别人知道我的电话号码,我就要把我的广告印刷到这个电话号码本里,别人才能知道。所以,这里就会有一个服务注册表,它叫服务注册中心,它来约定这些服务怎么把自己注册上、别人怎么通过服务注册中心去找到想要调用的服务,这些是有关服务的功能。一旦所有的服务起来执行工作流来满足用户需求,首先你要管理安全性的,这些服务和服务之间的消息是怎么传递的。我们之前花了很大的精力在讲安全性,比如消息要不要加密?传输过程中需要用证书对传输的内容再做加密,这时就会有安全的约束。然后还有事物,我们之前谈论的事物都是,在一个 Java 的语言里,我们去访问一个或者多个数据库去做这样的一个处理。现在在一个比较大的工作流,里面有 Java 的,有 C# 的,可能还有别的语言编写的东西,这时候这个事物应该怎么管理?因为现在他们都在不同的地方跑,不像之前我们讲 Java 的程序一样,不管怎么样,我在 Tomcat 这个应用里是一个程序,可以访问多个数据库,但我最终还是在某一个地方汇聚到一起来处理。
现在你全部要汇聚到这个消息中心件里,他怎么来管这个事情?还有一点就是,我们今天讲,事物实际上就是靠枷锁来实现的,那么这种工作流的执行过程一定会比较慢,这时候长期的枷锁会带来影响,他的 timeout 应该怎么设呢?如果事务要回滚,那该怎么做?他会有相应的一些逻辑来解决。然后,关于这些服务本身有一个管理,比如谁的服务可以发布上来,来统计它的使用的方法或者是使用的规则,根据使用情况我甚至可以提供一些。这就是它的一个管理,另外还有一个策略,就是你既可以认为它是服务的功能,也可以认为是服务的质量、约束,他就在讲,我基于什么样的策略来对,服务它的功能,或者是它的质量进行管理。
举个例子,这个服务,如果现在就被我们的分布式拒绝服务公司给攻击了,这时候应该怎么办?让这个服务处于什么样的状态,怎么样去管理它?比如我把它停掉,还是要对他做一个处理,对于来自于同一个 IP 的请求我降低它的处理速度,每秒钟只处理它一个请求。除了这方面,还有一些其他的乱七八糟的东西,都可以把它们归为策略这一类。它看起来既像是功能,又像是质量,所以横跨在中间。那么,这里面描述的所有的东西都有相应的规范,你满足这个规范,或者说在满足这样的规范的环境里去部署你的应用,你的应用才能真正像一个 SOA 的应用一样跑起来。我们之所以用 SOA 的应用,是因为我们要解决异构系统操作的交互性和面向变化,只有松散耦合才能快速定义,甚至我们在看到的 SOA 的架构。
五.微服务
我们之前还有一个话题,就是所谓的微服务是什么。微服务,首先这是个服务,其次,它和 SOA 架构的关系,就像我们这里讲的 web service 和 SOA 的关系一样。基于微服务开发的系统,我们没有说它一定是个 SOA 系统,没有说他一定要满足这三点特性,你可以不满足。但是微服务的这个服务,如果你开发出来,它可以成为你这个 SOA 的应用里面的这种词务,这就是两者之间的关系。所以我们说用 SOA 的目的就是要去解决异构性和这个应对变化的时候,降低成本、反应迅速的这个问题,但是你付出代价就是系统的性能也许会很低。一方面是因为我们说了像基于 vestful 或者是 restful 这样的,以 Jason 传递的这种 web service ,它调用的时候可能涉及到纯文本和编写的这种语言之间的双向转换,所以,它本来性能就可能比较低。另一个方面,他必须要经过服务总线,以这种所谓的中介者模式的方式来运作,所有的服务互相之间不直接交互,那它一定性能比较差。所以,你付出的代价就是性能比较差。