1.集中式和分布式对比
集中式Centralized 就是一个应用的所有功能都集中一套程序中。有一个中心化节点,可能是一台机器或多台机器组成,所有的存储,计算都在主机上完成。
分布式:Distributed ,分布式由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点。
集中式特点:
1.架构简单 2.可靠性高 3.强一致性 4.可维护性好
分布式特点:1.解决了性能 可用性 扩展性问题 。2. 架构设计更加复杂 3.运维更加复杂
2.分布式出发点是什么?
1.高性能 (high performance) 包含三点(1.高吞吐 2.低延迟 3.高并发)
2.高可用 (high available )高成功率(正常服务时间占比:请求成功次数比例)
3.可扩展 (scalability)(可伸缩性)
3.分布式依赖技术?
1.存储 需要解决节点故障:进程cash 断电 磁盘损坏问题。
2.通信 需要解决网络故障 断网 延迟 丢包 乱序
3.计算 一个业务流程多个 系统执行或者多个任务 ,多个节点执行
4.解决思路
1.分片(partition) 2.冗余 (replication)副本机制
5.副本一致性问题(consistency)
CAP理论 BASE理论 ZAB协议 Paxos 算法 Raft算法
6.分布式技术
服务协调 zookeeper
异步消息通信 1.RabbitMQ 2.KafKa 3 .RocketMQ
NoSQL存储 Redis
任务调度:Elastic-job xxl-job
数据存储: Mycat Shard'ing-JDBC
负载均衡 :Nginx
文件系统:GFS HDFS
日志:ELK
通信:Netty
RPC:Dubbo
容器:docker k8s
为什么要用MQ?
异步 解耦 削峰
AMQP协议
AMQP协议(Advanced Message Queuing Protocol) 高级消息队列协议
AMQP 实现:openAMQ Apache Qpid RedhatEnterprise MRG AMQPinfrastructure MQ Zyre
RabbitMQ 消息队列
RabbitMQ 支持 : AMQP STOMP MQTT HTTP WebSockets 协议
RabbitMQ 是用 Erlang 语言开发
直连类型 Direct 指定一个路由键 适用一些业务非常明确的场景
主题 Topic 使用支持通配符的绑定键 。适用于根据业务主题过滤消息的场景
* 代表一个代词
junior.# 以junior 开头 点后可以有单词 也可以没有单词
#.netty 以 .netty 结尾
senior.* 以senior开头 后跟.加一个单词
*.jvm 以 .jvm结尾 一个单词开头
广播Fanout 无绑定键, 使用于通用类业务消息
消费端限流 prefetch count 预处理消息数量
网友评论