[关闭]
@Toby-wei 2016-08-11T06:10:45.000000Z 字数 875 阅读 2019

消息队列及常见技术方案优缺点分析

消息队列 分布式


1. 为什么要在系统中加入消息队列

  • 系统解耦
  • 可靠投递
  • 流量控制
  • 广播
  • 最终一致性
  • 耗时操作

2. 比较热门的消息队列

  • ActiveMQ [Apache维护]
  • RabbitMQ [Erlang编写]
  • RocketMQ [阿里维护]
  • Jafka/Kafka[apache]
    分布式消息系统,由LinkedIn于2010年开源。scala语言编写。低延迟的发送和收集大量的事件和日志数据。
  • mq[alibaba]

插入一点数据库知识点

3. 数据库拆分类型

  • 垂直拆分
    把关联性不强的表拆分到不同的dbserver
  • 水平拆分
    适用于单表数据量很大的时候.根据字段来拆分.如根据userid再哈希分表.把不同字段分到不同的库中.常用字段和不常用字段分开存储.

4. 拆分之后面临的问题

a. 事务问题

  • 使用分布式事务[细节]
    由数据库管理事务,这样性能代价高!
  • 由应用程序和数据库共同控制
    将一个跨多个数据库的分布式事务分拆成多个仅处于单个数据库上面的小事务,并通过应用程序来总控各个小事务。性能有优势.需要应用程序在事务控制上做灵活设计。如果使用了spring的事务管理,改动起来会面临一定的困难。

b. 跨节点join

  • 解决这一问题的普遍做法是分两次查询实现。在第一次查询的结果集中找出关联数据的id,根据这些id发起第二次请求得到关联数据。

c. 跨节点的count,order by,group by以及聚合函数问题

  • 这些是一类问题,因为它们都需要基于全部数据集合进行计算。多数的代理都不会自动处理合并工作。解决方案:与解决跨节点join问题的类似,分别在各个节点上得到结果后在应用程序端进行合并。和join不同的是每个结点的查询可以并行执行,因此很多时候它的速度要比单一大表快很多。但如果结果集很大,对应用程序内存的消耗是一个问题。

4. 大型网站优化

  • 前端优化
    减少http请求/用了脚本合并js/css代码
    使用浏览器缓存
    启用Gzip压缩
  • CDN加速
  • 反向代理
    主要有两个作用
    1.安全.2.反向代理服务器缓存
    正向代理主要是为了浏览器的安全.反向代理是为了服务器安全
  • 服务端缓存
    缓存的本质是内存哈希表
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注