面向服务的体系架构(SOA)是怎么设计的?

什么是SOA:说的简单些,就是分布式架构注重业务逻辑复用,上层业务想借用底层服务快速搭建应用,这些应用独立之后形成可用的服务,你调用什么样的服务就能实现什么样功能,这种设计就是SOA,说白了,就是服务化。

然后,我们发现,某个服务调用的多了,不堪重负了,于是我们就搭个集群,当请求到来时,将请求均衡的分配到后端服务器,这个过程就是负载均衡。规模较小时,常用Nginx,规模逐渐增大时,一旦Nginx服务器宕机,那么依赖它的所有服务就失效了,为了解决这种单点故障问题,我们就需要一个能够动态注册和获取服务信息的地方,并且不会因为负载均衡服务器宕机而系统崩溃,这时候,Zookeeper就显得相当好用了。当服务提供者启动时,将其提供的服务名称、服务器地址注册到服务配置中心,服务消费者通过服务配置中心来获取需要调用的服务的机器列表,通过相应的负载均衡算法,选取其中一台服务器调用。当服务器宕机或者下线时,服务配置中心就能够相应的移除,并且,服务消费者只有在第一次调用服务时需要查询服务配置中心,然后将查询到的信息缓存到本地,后面的调用直接使用本地缓存即可。

面向服务的体系架构(SOA)是怎么设计的?

Zookeeper的核心是个文件系统,可以这样设计来应用于服务配置。节点分三层,第一层用来聚集服务节点(持久节点),第二层是所有服务名称(持久节点),第三层是服务IP(临时节点),机器的上下线对应着临时节点的新增和移除,并可以对该节点进行监听,如果机器有上下线,则通知所有消费者重新缓存新的地址列表。

 面向服务的体系架构(SOA)是怎么设计的?

这里涉及到负载均衡算法:

1.轮询

说白了,就是将请求按照顺序轮流的分配到后端服务器上,并不关心服务器实际的连接数和当前的系统负载。

2.随机

3.源地址哈希

就是通过获取客户端访问的IP地址值,通过哈希函数、取模等操作获取要访问的服务器的序号。

4.加权轮询

因为集群中的机器的负载能力不同,简单说就是,有的机器配置高,有的配置差,那配置高的负载能力就强,我们给它的权重就大一点,其它和轮询相似。

5.加权随机(类似加权轮询,不过是随机选取服务器)

6.最小连接数

简单说,就是动态选取后端服务器中连接负载最小的机器。