微服务框架
两大配方
网关 [Zuul] Spring Cloud Gateway
1:阿里系
Dubbo
Nacos Zookeeper
SpringBoot /SpringMVC
采用服务端发现
Sentinel流控
链路监控 Pinpoint
2:Spring Cloud
Spring Cloud Netflix Eureka 服务注册发现
SpringBoot
Ribbon 客户端负载均衡器 RestTemplate/feign / Zuul
Hystrix流控
链路监控 Spring Cloud Sleuth & Zipkin
Eureka线上环境至少两台相互注册,三台两两相互注册以达到高可用,采用客户端发现,REST异构时常用的Nodejs有eureka-js-client客户端.
服务注册与发现对比 AP
如果要求一致性,则选择zookeeper、Consul,如金融行业 CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性没法满足
如果要求可用性,则Eureka,如电商系统 AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化
Nacos:
Nacos是阿里开源的,Nacos 支持基于 DNS 和基于 RPC 的服务发现。在Spring Cloud中使用Nacos,只需要先下载 Nacos 并启动 Nacos server,Nacos只需要简单的配置就可以完成服务的注册发现。
Nacos除了服务的注册发现之外,还支持动态配置服务。动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
微服务可见性
Metrics 跟踪所有可以用数字来表示的信息内容,用于度量
Tracing 跟踪单次请求中发生了什么,用于优化,提优
Logging 跟踪零散的文字描述,用于日志
Prometheus 采取拉取数据
ELK解决方案 采集离合零散的信息的处理,索引等
LogStash 离散的日志收集,处理,过滤,格式转换
ElasticSearch 搜索引擎,进行索引,方便检索
Kibana 展示数据
消息中间
综合对比:
- ActiveMQ: 历史悠久的开源项目,已经在很多产品中得到应用,实现了JMS1.1规范,可以和spring-jms轻松融合,实现了多种协议,不够轻巧(源代码比RocketMQ多),支持持久化到数据库,对队列数较多的情况支持不好。
- RabbitMq:
它比kafka成熟,支持AMQP事务处理,在可靠性上,RabbitMq超过kafka,在性能方面超过ActiveMQ。 - Kafka:
Kafka设计的初衷就是处理日志的,不支持AMQP事务处理,可以看做是一个日志系统,针对性很强,所以它并没有具备一个成熟MQ应该具备的特性,Kafka的性能(吞吐量、tps)比RabbitMq要强,如果用来做大数据量的快速处理是比RabbitMq有优势的
综合使用
网关:[Zuul]
网关流控:spring-cloud-zuul-ratelimit
服务与配制: Nacos
身份认证:Spring Cloud OAuth2
消息中间:RabbitMQ Kafka
服务流控:Sentinel