分布式系统 SOA与中间件
在分布式系统中,有一个基础的理论 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与中间件的更多相关文章
- Net分布式系统之四:RabbitMQ消息队列应用
消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是通过消息队列传输系统日志.目前 ...
- 浅析深究什么是SOA?(转)
http://blog.vsharing.com/fengjicheng/A1059842.html 阅读提示: 本文探讨SOA概念背后的核心内涵,如何将SOA落地的实务方法. 金蝶中间件作为全球领先 ...
- 浅析深究什么是SOA?
浅析深究什么是SOA? http://blog.vsharing.com/fengjicheng/A1059842.html 金蝶中间件有限公司总经理 奉继承 博士 阅读提示: 本文探讨SOA概念背后 ...
- SOA (面向服务的架构)
面向服务的体系结构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语 ...
- soa文章摘抄
from: http://blog.vsharing.com/fengjicheng/MC19136/ 浅析深究什么是SOA? (入选推荐日志,加10币)浅析深究什么是SOA? 金蝶中间件有限公司总经 ...
- .NET 分布式系统架构(有转载部分)
一.设计目的 搭建一个大型平台需要综合考虑很多方面,不单纯是软件架构,还包括网络和硬件设备等.由于现代大部分应用建设都面临用户多.高并发.高可用的需求,传统软件架构已不能满足需求,需要支持分布式软件架 ...
- 中间件、MetaQ入门学习
目录 . 中间件技术 . MetaQ中间件 . MetaQ编程实践 1. 中间件技术 0x1: 中间件简介 中间件(Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的 ...
- 分布式系统框架Spring+Redis+SSO视频课程
1.视频讲解的参看博客 这应该是第一个简单的分布式系统soa入门的基础,视频中对sao面向服务编程讲解的很透彻,第redis缓存讲解的也比较清楚,讲解了sso单点登录使用token的方式,还有cas实 ...
- RabbitMQ消息队列应用
RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...
随机推荐
- FCN 分割网络详解
博客来源于:https://www.cnblogs.com/gujianhan/p/6030639.html: https://blog.csdn.net/sinat_24143931/article ...
- Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询
Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...
- 【BZOJ4518】[Sdoi2016]征途 斜率优化
[BZOJ4518][Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除 ...
- XStream别名;元素转属性;去除集合属性(剥皮);忽略不需要元素
city package xstream; public class City { private String name; private String description; public St ...
- Python全栈day13(作业讲解字典嵌套实现用户输入地址信息添加及查看)
要求: 列出字典对应节点名称,根据用户输入可以添加节点,查看节点等功能,这里以地址省-市-县等作为列子,此题熟悉字典嵌套功能 vim day13-16.py db = {} path = [] whi ...
- 查看嵌入式设备的CPU频率
对于有多个核心的CPU,查看CPU 频率的方法是: cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 上面的这个是查看核心0的cpu的 ...
- 第十一课——codis-server的高可用,对比codis和redis cluster的优缺点
[作业描述] 1.配置codis-ha 2.总结对比codis的集群方式和redis的cluster集群的优缺点 =========================================== ...
- 反编译apk + eclipse中调试smali
1.对apk使用apktool反编译出可调试的smali代码到out文件夹 apktool -d d 定点加粉丝_com.mingniu.wxddjfs_440.apk -o out 这里必须使用-d ...
- Load Balancing with NGINX 负载均衡算法
Using nginx as HTTP load balancer Using nginx as HTTP load balancer http://nginx.org/en/docs/http/lo ...
- 全量日志 requestId
常量参数和系统参数 API 的请求者不可见,由网关在请求后端服务时添加上. 常量参数.比如您的后端需要接收一个常量,但是这个常量您不希望被您的客户看见,那么就设置一个常量参数,可以在 Header 或 ...