微服务技术选型总结


分布式中间件
redis, rabbitMQ, rocketMQ

分布式解决方案
分布式事务
seate lcn tcc

分布式锁
redis zookeeper

分布式定时任务调度
quartz, elastic job, xxl_job

配置中心
config,nacos, apollo
实时生效
安全性

apm 应用程序性能监控
Zipkin pinpoint skywalking

日志告警  系统监控
elatic stack, beats, prometheus + grafan

rpc Remote Procedure Call
rpc 远程过程调用协议, 简单说就是调用远程方法, 像调用本地方法一样方便,无需关心被调用的方法部署在哪里
rpc 用到了动态代理,序列化和反序列化,NIO 通信

dubbo 阿里出的一套 rpc 框架

dubbo / spring cloud
dubbo 只是一个 RPC 框架,spring cloud 是一套微服务解决方案
Dubbo 底层使用 Netty 这样的 NIO 框架,基于 TCP 协议传输,spring cloud 采用的是 http 协议的 rest api 风格

-------------------------------------------------------
注册中心
-------------------------------------------------------
eureka zookeeper
-----------------------------------
eureka 是基于 AP, zookeeper 是基于 CP
eureka 的设计者认为, 在集群出现分区的时候, 注册中心提供可用的和未及时更新的数据, 好过拿不到数据好, 应用实例的注册信息在集群内部节点间并不是强一致的, 就需要客户端支持负载均衡与失败重试, ribbon 可以提供这个功能
eureka 跟 zuul, ribbon 整合的比较好,都是 netflix 公司出的
-----------------------------------
eureka nacos
-----------------------------------
nacos 有控制台页面,服务下线更方便,eureka 没有控制台页面,要发请求下线
eureka 不支持项目隔离,nacos 有 namespace,group id
eureka 集群,客户端直接配多个连接节点,nacos 需要配虚拟 ip
-------------------------------------------------------
应用网关 Zuul / gateway
不同点
gateway 性能比 zuul 高一些,zuul 每个请求一个线程,请求完才释放
zuul 只支持同步,gateway 支持异步
gateway 扩展性更好

相同点
底层都是 servlet
都是 web 网关,处理 http 请求
-------------------------------------------------------
hystrix sentinel
hystrix 里面的线程池隔离,会造成线程上下文切换的开销,性能不是很好
sentinel 是通过并发线程数和服务响应时间来做流控和熔断降级,没有线程上下文切换的开销,也不需要预留线程池资源,
性能会好一些
sentinel 的控制台比 hystrix 的更好用更方便
-------------------------------------------------------
数据同步
数据库方面的,可以用 SqlLoader. GoldenGate 等相关工具同步数据
大数据方面的,可以用 ETL、Hadoop 等相关技术同步数据
如果是定时调度发起的,可以考虑用 SpringBatch, Quartz, Elastic-Job 等分布式任务中间件发起同步数据
如果是异步的场景,可以用 mq 来实现监听并且同步增量数据
大批量的数据情况下,尽可能地考虑用 mq、线程池、多线程、数据批量操作等相关技术手段提升性能

你可能感兴趣的:(架构,java,dubbo,开发语言)