互联网网站架构升级----消息中间件的实现方案

news/2024/5/20 15:47:28/文章来源:https://blog.csdn.net/h254532693/article/details/48086291

消息中间件对目前大中型互联网来说是非常重要的,在业务数据流动中仅次于RPC服务调用,担负着越来越复杂的网站业务从主流程上解耦的重要责任;
伦理片 http://www.gxuy.com/
    从目前互联网对消息中间件的需求来看应该分为两种类型,一种是和钱相关的需求,一种是和钱无关的需求;和钱相关的需求消息的可靠性是放在第一位的,和钱无关的需求是速度放在第一位的,但这两种需求又是矛盾的,很难设计出一种既可靠又高效的系统,除非将两套方案捏合成一个系统,通过配置来选择不同方案,但从实现上说还是两种实现。所以目前业界有几种不同的设计方式来满足不同的需求。

下面看看以下几种典型实现方案:

1、以ActiveMQ为代表的可靠性优先的设计原理:

    此种方案将所有的消息数据和消息的发送状态都存储在消息服务器上,可以在消息服务上通过多种手段来保证消息的可靠性,但增加了众多复杂的可靠性保证手段后,消息从发布者到订阅者的速度势必会受到影响;此种方式发布者将消息推向消息服务器,消息服务器再将消息推向订阅者,为消息发送策略提供了很好的可扩展性;

2、以KafKa为代表的速度优先的设计原理:



    此种方式将消息的发送状态保存在客户端,同时客户端用拉的模式从消息服务器上获取消息,由于是顺序读,同时还采取了很多保证速度的策略,如zero-copy,所以此种方案速度比较快,但牺牲了很多可靠性方面的保证,比较适合Web2.0网站,这些网站对消息的可靠性要求不是很高,同时由于产生了大量的和用户状态相关的消息,需要一个高效的系统来处理这些消息;另外这种方案也比较适合日志消息的收集;


3、传统的系解耦方案:



    此种方式是不用消息中间件直接用数据库存储做的解耦,随着消息中间件的出现,这种方式的使用越来越少,但现在由于MongoDB和Redis等的兴起,一些基于这些Nosql数据库的消息应用逐渐兴起,由于消息数据和消息状态都存储在DB上,所以效率和速度在上面两种方案之间;

 

    那么有没有一种更高效的方式呢?

 

    答案是肯定的,但那可能要进一步降低可靠性!

 

    看看Facebook的Scribe日志收集系统的原理:

 

 

    如果Scribe Server正常工作,Scribe Client将App的日志(可以看成一个消息)推送到Scribe Server端,如果不正常,则写到本地文件,当Scribe Server恢复正常时再将其推送过去;这里使用本地文件作为缓冲,那么能否综合Scribe和Kafka的优点来设计一个消息系统(或日志收集系统,改造一下可以互用),看下面的方案:

    上面的MQ暂且叫他FastMQ吧,中消息发布端直接写本地文件,同时消息订阅者通过Zookeeper协调,向相关消息发布者的Agent拉消息,并在本地记录消息指针状态;

    如果嫌在消息发布端开启MQ Agent麻烦,那么如中消息拉取协议使用SCP或FTP协议,用这些Linux必备的协议提供者作为Agent减少开发和部署的难度,在服务订阅端解析这些协议流,反序列化为消息供业务使用;

    如果觉得消息只存储在消息发布端的磁盘不可靠,那么如中可以在消息订阅者处理不及消息的时候,把消息数据缓冲在消息订阅端的磁盘上来备份数据,不过这样做就使系统变的复杂,虽然提高了可靠性,但是速度就会有所降低;

 

    此种方案可以使消息分散的存储在业务本身的磁盘上,避免集中存储相互影响的缺点,同时又可以有效利用业务机器的磁盘(大部分业务机器磁盘基本没使用),另外还可以减少一次网络通信的过程,使从发送到接收的速度更快;但其本身也有不少缺点,要做好监控,避免消息大量积压的时候业务磁盘过度使用,对业务造成影响。

 

     目前我们的监控日志收集系统使用的是和中类似的方案,消息系统使用的是3方案,后期可能会将可靠性要求高的向1方案过度,可靠性要求不高的向最下面介绍这种过度!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_854323.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20 步打造完美网站布局设计

英文原文:Pro tips: 20 steps to the perfect website layout,编译:蝶月猋欢yeeyan Claudio Guglieri 在纽约广告公司 B-Reel 任职总监,他撰写了本网站设计培训指南,旨在帮助您了解设计网站布局的全过程。 开始讲述设计…

Bootstrap Jetstrap-快速构建你的网站

Boostrap来自于Twitter,是一个基于html,css,javascript的时尚的、直观的、强大的流行前端框架及交互组件集,可用于快速,简单构建你的网站。 Bootstrap拥有以下特性: 由匠人建,为匠人用 和您一样…

HTML一键打包IPA(苹果IOS应用)工具 网站打包 APP

工具简介 HTML一键打包IPA(苹果应用)工具可以把本地HTML项目或者网站打包为一个苹果应用IPA文件,无需编写任何代码,支持在苹果设备上安装运行。 打包工具群:429338543 下载地址: 点击进入下载页面 加群获…

2016谷歌重返中国,体验Google中国开发者网站

我早上起床时拿起手机看新闻,一个标题瞬间吸引了《Google搜索要重返中国,但这次是靠中国开发者找回 “丢失的那6年”》,激动点开一看,文章巴拉巴拉一大推,选择性阅读完后,怀着无法按捺的心情在没翻墙的手机…

求助关于java的setDefaultCloseOperation() 的位置问题!

自己摸索搞不懂,我把setDefaultCloseOperation() 放在 while(jf.isShowing()) 之后就不会执行 int x 700 int y 300 int width 500 int height 500 JFrame jf new JFrame("测试"); jf.setBounds(x, y, width, height); // 窗口的横竖位置和横竖长度 …

jsp获取网站域名 域名解析

部署主机如果有弄域名解析的话 访问http://www.domain.com时会自动请求到相应的页面http://ip:port/webApp/index.jsp 此时在index.jsp代码 Html代码 StringbasePathrequest.getScheme()"://"request.getServerName()":"request.getServerPort()path"…

50个好网站,从此上网不再虚度!

《意林》,短小精悍的小故事,每次都能打动读者的心扉!http://www.yilin.net.cn 丁香园,一个生物学和医学专业的挚爱。http://www.dxy.cn 生物谷,看了名字就知道是生物类的网站。http://www.bioon.com 《环球科学》杂志的…

可扩展、高可用、负载均衡网站架构设计方案

可扩展、高可用、负载均衡网站架构设计方案作者:田逸(sery163.com) 本作品已刊登在《IT实验室周报》第6期第6版 基本需求: 1、高可用性:将停止服务时间降低到最低甚至是不间断服务 2、可扩展性:随着访问的增加,系统具备良好的伸缩…

大流量网站的底层系统架构

动态应用,是相对于网站静态内容而言, 是指以c/c、php、Java、perl、.net等 服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通 常与数据库系统、缓存系统、分布式存储系统等密不可分。 大型动态应用…

2015进口跨境电商网站大全

常用跨界电商企业网址跨境电商其它平台: 跨境电商其它跨境电商资讯类跨境电商有线下店

[译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)

目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 示例登陆帐号) 4. jqGrid和AJAX 5. GridSettings 6. GridModelBinder 7. LinqExtensions 8. 数据实体类和LINQ 9. 在…

读书笔记:《大型网站系统与Java中间件实践》

文章目录大型网站演进数据库读问题写问题应用应对的挑战引入服务层框架:多机房问题序列化与反序列化问题异步调用线程池隔离服务请求合并数据访问层一致性的基础理论--CAP/BASE多机的Sequence问题消息中间件功能消息一致性避免对消息中间件的强依赖级联、嵌套topic/…

密评必备网站汇总

1、国密SSL实验室 网址:https://gmssl.cn/gmssl/index.jsp 推荐理由:提供很多密码相关工具 2、商用密码认证业务网 网址:http://service.scctc.org.cn/cer/cerall/list-c38.html 推荐理由:提供很多密码产品认证查询&#xff0…

乞讨网站,要饭网,个人要饭网,在线要饭网站;含socket 通信;双端支付源码 ;源码

展示站点:www.gaodc.site; 样式动态控制,因为快过年了所以是过年主题; 主要技术 springmvc websocket bootstrap jq 阿里支付 微信支付 ;源码请邮件;仅供交流; 截图

配置静态地址转换------发布公司内网网站到互联网上

拓扑图如下: 第1步:配置路由器R1启用的端口信息 Router>en Router#conf t Enter configuration commands, one per line. End with CNTL/Z. Router(config)#host R1 R1(config)#int fa0/0 R1(config-if)#ip add 192.168.10.1 255.255.255.0 R1(confi…

web网站添加ico图标

上线的网站都会配置ico,红框位置的图标 配置方法: 1、选择一张正方形的图片 2、打开ico在线制作网站,我推荐 https://www.bitbug.net/ 3、上传图片,并选择ico大小 4、生成好的图片浏览器会自动下载到本地,将图片命…

关于某些网站的图片盗链功能,相关http 请求的解决方法

其实 关键就是 header中 的 Referer 属性,可以通过firebug 查看头信息 并获得Referer,但有些情况下可能不能获取,就只能通过抓包的方法来获得了。 [java] view plaincopy print?import java.io.BufferedInputStream; import java.io.Buffer…

技术网站

联合主办 IT168(http://www.it168.com/) 中国最具影响力和权威的IT导购、应用资讯专业网站。创立于1999年,为个人和企业进行IT产品购买及应用提供服务,在用户群体中拥有极高知信度和忠诚度。 旗下支持媒体:China Unix…

技术网站

联合主办 IT168(http://www.it168.com/) 中国最具影响力和权威的IT导购、应用资讯专业网站。创立于1999年,为个人和企业进行IT产品购买及应用提供服务,在用户群体中拥有极高知信度和忠诚度。 旗下支持媒体:China Unix…

新建 SharePoint 网站集

进入管理中心,主菜单选择“服务设置”选项卡,此菜单选择SharePoint Online 点击网站集的“新建”按钮,看到新建ShartPoint Online网站集对话框 填写一些信息 然后点击“创建” 创建完成将得到以后界面提示 然后将在网站集列表中看到网站集列…