美文网首页
第2-3章 分布式架构体系 分布式消息服务

第2-3章 分布式架构体系 分布式消息服务

作者: 凯睿看世界 | 来源:发表于2019-03-08 15:44 被阅读0次

REST API设计最佳实践
1:使用名词而不是动词来定义接口
2:GET方法和查询参数不能改变资源状态
3:不要混淆名词的单复数,保持简单,只用复数名词来定义所有资源
4:使用子资源来表达资源间的关系
GET /cars/711/drivers/ 返回711号的所有driver列表
GET /cars/711/drivers/4 返回711号car的4号driver
5:使用HTTP header来序列化格式
Content-Type 定义了请求格式
Accept 定义了接收相应的格式列表
6:使用HATEOAS约束
7:提供过滤,排序,字段选择,分页
过滤:
GET /cars?color=red
GET /cars?seats<=2
排序
GET /cars?sort=-manufactorer,+model
字段选择
GET /cars?fields=manufacturer,model,id,color
分页
GET /cars?offset=10&llimit=5
8:API版本化
/blog/api/v1
9:充分使用HTTP状态码来处理错误

MSA(微服务)包含如下特征:
组件服务形式来提供
围绕业务功能进行组织
产品不是项目
强化终端及弱化通道:微服务的应用致力于松耦合和高内聚,它们更喜欢简单的REST凤格,而不是复杂的协议,采用轻量级的消息总线(RabbitMQ或ZeroMQ等)来发布消息。
分散治理:
分散数据管理:
基础设施自动化:
容错性设计:
改进设计:

Apache ActiveMQ
Window平台
cd 安装目录
bin \activemq start
Window查询 : netstat -an|find "61616"
UNIX查询: netstat -nl|grep 61616

RabbitMQ 消息队列
RocketMQ 出自阿里巴巴 基于开源MetaQ,几乎重新了所有的核心组件。
RocketMQ最佳实践
Producer最佳实践
1:一个应用尽可能用一个Topic,消息子类型用tags来标识,tags可以由应用自由设置。
2:每个消息在业务层面的唯一标识码,要设置到keys字段,方便将来定位消息丢失问题。由于是哈希索引,请务必保证key尽可能唯一,避免哈希冲突。
3:消息发送成功或失败,要打印消息日志,务必要打印sendresult和key字段。
4:send消息方法,只要不抛异常,就代表发送成功,但是发送成功会有多个状态sendresult定义了sendStatus枚举值。
5:对消息不可丢失的应用,务必要有消息重复机制。例如,将发送失败消息存储到数据库,定时尝试重发或人工重发。
6:某些应用如果不关注消息上是否发送成功,请直接使用sendOneWay方法发送消息。

Consumer最佳实践
1:消费过程要做到幂等
2:尽量使用批量方式消费方式,可以在很大程度上提供消费吞吐量。
a:提高消费并行度
b:修改消费并行度方法
c:批量方式消费
d:跳过非重要消息
3:优化没条消息消费过程
4:打印消费日志
5:利用服务器消息过滤,避免多余的传输。

Apache Kafka
是一种高吞吐量的分布式发布订阅消息系统,可以提供消息持久化,即使Tb的消息也能够保持长时间的稳定性。
Topic 主题
Producer 生产者
Consumer 消费者
Broker (Kafka服务) : Kafka集群中的每个服务叫作broker.

信息是字节数组,支持的数据格式String, JSON,Avro.
Kafka设计中将每一个主题分区当作一个具有顺序排序的日志。
相比传统的消息系统,Kafka可以很好地保证有序性。
Apache Kafka使用场景
1:消息
Kafka可以更好的替换传统的消息系统。与大多数消息系统相比,Kafka有更好的吞吐量,内置分区,副本和故障转移,这有利于处理大规模的消息。
2:网站活动追踪
Kafka设计的最初就是用于用户活动追踪,将网站的活动发布到不同的话题中心,这些消息可以实时处理,实时监控,也可加载到Hadoop或离线处理数据仓库。
3:指标
监控数据,将分布式应用程序生成的统计数据集中聚合。
4:日志聚合
使用Kafka来替代一个日记聚合的解决方案。
5:流处理
除了Kafka Streams,还有Apache Storm和Apache Samza
6:事件采集
事件采集是一种应用程序的设计风格,其中状态的变化可以根据时间的顺序记录下来,Kafka支持这种存储日志数据非常大的场景。
7:提交日志
Kafka可以作为一种分布式的外部提交日志。日志帮助节点之间复制数据,并作为失败的节点来恢复数据重新同步。Kafka的日志压缩功能很好地支持了这种用法,这种用法类似于Apacha BookKeeper项目。

相关文章

网友评论

      本文标题:第2-3章 分布式架构体系 分布式消息服务

      本文链接:https://www.haomeiwen.com/subject/diirpqtx.html