在分布式系统中,有一个基础的理论 CAP,Consistency一致性 Availability可用性 Partition Tolerance分区容忍性,任何一个系统都不可能同时满足这三个条件(高富帅或白富美很难同时满足),结构化存储(关系型数据库 RDBMS)满足的是CA,半结构化存储(MongoDB HBase)满足的是CP。但是可以看出,它们都需要满足一致性的要求。

在分布式系统中,组件部署在多台机器上,它们通过网络相互协同工作,共同完成系统的使命。在分布式系统中,将各个功能单元当成服务来对待,这就是SOA,面向服务的架构。很明显,Openstack采用的就是SOA架构,因为它提供了很多的服务,供消费者(虚拟机)去使用,例如Neutron网络服务,Nova计算服务,Cinder块存储服务等。在分布式系统中,分布式事务是非常重要的,如果要完成一个操作,可能需要远程调用好几个服务,每个服务中都有独属于它的事务,如何保证这些事务链要么执行成功,要么有某个事务执行失败就全体回滚呢?一种众所周知的方式就是两段式提交,系统中有一个协调者,负责协调所有的参与者(服务)。在第一阶段,协调者喊预备,此时所有参与者都会去执行相应的事务,并将Undo和Redo信息记入事务日志中,但是都不提交,而是给协调者返回一个消息,反馈是否都准备好了;在第二个阶段,协调者会判断,如果都准备好了,那么就给所有参与者发出指令,使它们全部提交。相反,如果某个服务因为操作失败,给协调者返回未就绪的消息,那么所有的事务都会回滚。两段式提交其实也是有缺点的,在协调者发出预备消息后,如果某个参与者没有接受到消息,那么协调者就会一直等待(阻塞)。所以后面又引入了三段式提交,三段式提交比较晦涩难懂,在实际用的时候结合实际情况再好好研究下。

SOA中有一个服务注册中心(基于ZooKeeper实现),所有的服务都会在这里进行注册,表明自己提供了哪些服务,访问的Endpoint是什么。当一个请求到来时,会先负载均衡,分流到某个具体的服务器,服务器在调用后端服务的时候,会先去服务注册中心获取数据,缓存到本地并查找服务地址,最后才是真正的远程服务调用(RPC SOA的具体实现方式)。

 

在分布式系统中,大量使用了中间件技术,几乎每个服务的内部都采用消息中间件,使得各个业务组件解耦,异步调用大大提高了系统的性能。

分布式锁

在双十一抢货的时候,如果前端点击太快,导致后端重复调用了接口。两次调用一个接口,这样就会产生同一个请求执行了两次,而从用户的角度出发,他是因为太卡而点了两次,他的目标是执行一次请求。

对于高并发场景,我们往往需要引入分布式缓存,来加快整个系统的响应速度。但是缓存是有失效机制的,如果某一时刻缓存失效,而此时有大量的请求过来,那么所有的请求会瞬间直接打到DB上,那么这么大的并发量,DB可能是扛不住的。那么这里需要引入一个保护机制。当发生“缓存击穿”的时候加锁,从而保护DB不被拖垮。

解决方案:基于数据库实现分布式锁,或者用缓存来实现分布式锁(推荐使用)。因为缓存比较轻量,并且响应快、吞吐高,最重要的是还有自动失效的机制来保证锁一定能释放,缓存的分布式锁主要通过Redis实现。

分布式系统 SOA与中间件的更多相关文章

  1. Net分布式系统之四:RabbitMQ消息队列应用

    消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前 ...

  2. 浅析深究什么是SOA?(转)

    http://blog.vsharing.com/fengjicheng/A1059842.html 阅读提示: 本文探讨SOA概念背后的核心内涵,如何将SOA落地的实务方法. 金蝶中间件作为全球领先 ...

  3. 浅析深究什么是SOA?

    浅析深究什么是SOA? http://blog.vsharing.com/fengjicheng/A1059842.html 金蝶中间件有限公司总经理 奉继承 博士 阅读提示: 本文探讨SOA概念背后 ...

  4. SOA (面向服务的架构)

    面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语 ...

  5. soa文章摘抄

    from: http://blog.vsharing.com/fengjicheng/MC19136/ 浅析深究什么是SOA? (入选推荐日志,加10币)浅析深究什么是SOA? 金蝶中间件有限公司总经 ...

  6. .NET 分布式系统架构(有转载部分)

    一.设计目的 搭建一个大型平台需要综合考虑很多方面,不单纯是软件架构,还包括网络和硬件设备等.由于现代大部分应用建设都面临用户多.高并发.高可用的需求,传统软件架构已不能满足需求,需要支持分布式软件架 ...

  7. 中间件、MetaQ入门学习

    目录 . 中间件技术 . MetaQ中间件 . MetaQ编程实践 1. 中间件技术 0x1: 中间件简介 中间件(Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的 ...

  8. 分布式系统框架Spring+Redis+SSO视频课程

    1.视频讲解的参看博客 这应该是第一个简单的分布式系统soa入门的基础,视频中对sao面向服务编程讲解的很透彻,第redis缓存讲解的也比较清楚,讲解了sso单点登录使用token的方式,还有cas实 ...

  9. RabbitMQ消息队列应用

    RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...

随机推荐

  1. VS------快捷键一览

    1. 属性封装快捷键:Ctrl + R + E

  2. Javascript中的window.event.keyCode使用介绍

    <body onkeydown=" alert(window.event.keyCode)"> <body onkeydown="if(window.e ...

  3. nat123动态域名解析软件使用教程

    nat123动态域名解析软件使用教程

  4. vue+node+mongoDB 火车票H5(六)---城市列表保存到MongoDB数据库并且启用node.js服务

    把车站列表保存到数据库,并且从本地创建服务 node.js创建httpserver 1.搭建基于express的运行环境 全局安装express-gengerator cnpm install -g ...

  5. SaltStack概述及安装

    配置管理工具 查看文档 https://docs.saltstack.com/en/latest/ 其他工具 puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统 ...

  6. FTP服务工作原理

    1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的基础,它由一系列规格说明文 ...

  7. 【Python算法】归纳、递归、归简

    归简法(reduction) 指的是将某一问题转化成另一个问题,将一个未知问题归简成一个已解决的问题. 归纳法(induction) 首先要证明语句在某一基本情况下是成立的,然后证明他可以由一个对象推 ...

  8. Oracle Java Mission Control MBean 服务器 飞行记录器

    Oracle Java Mission ControlMBean 服务器飞行记录器

  9. leetcode 去除单链表倒数第k个节点

    Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...

  10. Power Strings----poj2406(kmp扩展 循环节)

    题目链接:http://poj.org/problem?id=2406 题意:就是求串s能够最多由多少个相同的串a串联而成: 例如 ababab 由3个ab串联而成: abababa 只能由1个aba ...