在分布式系统中,有一个基础的理论 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. iOS面试题--网络--如何处理多个网络请求的并发的情况

    如何处理多个网络请求的并发的情况 一.概念 1.并发 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配 ...

  2. THINKPHP5操作数据库代码示例

    数据库表结构 #表结构 CREATE TABLE `qrcode_file` ( `id` ) NOT NULL AUTO_INCREMENT, `active` ) ' COMMENT '是否有效' ...

  3. ios开发之 -- 强制横屏

    在写项目的时候,会遇到很多稀奇古怪的需求,我就碰到一个写一个网站,需要强制横屏,然后不需要上架,网上看了很多大神的需求,基本都能实现,但是不太好用, 自己参考搞了一个,代码如下: AppDelegat ...

  4. JSP小例子——以Model1的思想实现用户登录小例子(不涉及DB操作)

    Model1简介现在比较流行的就是Model1和Model2,这里介绍Model1.在Model1模型出现前,整个Web应用的情况是:几乎全部由JSP页面组成,JSP页面接受处理客户端请求,对请求处理 ...

  5. poj_2823 单调队列

    题目大意 给定一行数,共N个.有一个长度为K的窗口从左向右滑动,窗口中始终有K个数字,窗口每次滑动一个数字.求各个时刻窗口中的最大值和最小值. 题目分析 直接搜索,复杂度为O(n^2).考虑使用单调队 ...

  6. poj2396 Budget&&ZOJ1994 Budget[有源汇上下界可行流]

    Budget Time Limit: 5 Seconds      Memory Limit: 32768 KB      Special Judge We are supposed to make ...

  7. deviceready has not fired after 5 seconds

    deviceready has not fired after 5 seconds 建议用手机连上电脑,用真机进行调试:

  8. Python闲谈(一)mgrid慢放

    不论是利用Mayavi还是matplotlib绘制三维图表,里面都用到了numpy中的一个函数叫mgrid.本次博客我简单地讲一下mgrid是干什么用的,以及一个三维曲面是如何绘制出来的. 首先说明一 ...

  9. hibernate的.hbm.xml文件文件配置属性详解

    一般.hbm.xml文件如下面: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "- ...

  10. IBM DEVOPS IN CLOUD--chaos monkey