在了解微服务技术栈之前,我们先通过图片去了解微服务技术的类别。
微服务技术体系
技术栈模块图
微服务技术对比
服务框架
用JAVA技术开发微服务,比较主流的选择有:Spring Cloud 和 Dubbo。
Spring Cloud是在Spring基础上构建的,它后面有2大公司支撑,Pivotal和Netflix的技术支持。它的核心就是Netflix贡献的源码,目前可以认为是构建 Java 微服务的一个社区标准。
Dubbo 是阿里多年构建生产级分布式微服务的技术结晶,服务治理能力非常丰富,在国内技术社区具有很大影响力,Dubbo 本质上是一套基于 Java 的 RPC 框架。
此外还有:
钉钉的Dubbox,Dubbox在Dubbo的基础上拓展了RESTful的接口暴露能力。
新浪微博的Motan,功能和Dubbo类似,可以认为是一个轻量裁剪版的Dubbo。
谷歌的gPRC,是谷歌近年新推出的RPC框架,基于protobuf的强契约编程模型,能自动生成各种语言客户端,且保证互操作。
服务网关
如果采用Spring Cloud体系,则可以选择Zuul网关,Zuul在Netflix经过大规模生产验证,支持灵活的动态过滤器脚本机制。
此外还有:
Spring Cloud Gateway,Spring Cloud新推出的网关框架;
基于 Nginx/OpenResty 的 API 网关 Kong,因为采用 Nginx 内核,Kong 的异步性能较强,另外基于 lua 的插件机制比较灵活,社区插件也比较丰富。
服务治理
- 服务注册和发现:Netflix Eureka,支持跨数据中心,除此之外,还有Consul(天然支持跨数据中心,还支持 KV 模型存储和灵活健康检查能力),Zookeeper等
- 断路器:Hystrix,Netflix 的Hystrix把熔断、隔离、限流和降级等能力封装成组件,任何依赖调用(数据库,服务,缓存)都可以封装在Hystrix Command之内,封装后自动具备容错能力。除此之外,Netflix的Hystri停更后,SpringCloud家族推荐Resilience4j,另外阿里也推出了Sentinel。
- 调用端负载均衡:Ribbon
- REST客户端:Feign
- 分布式事务:阿里开源的Seata,个人开源 TX-LCN
- 消息队列:Spring Cloud的Spring Cloud Bus和Spring Cloud Stream,阿里开源的RocketMQ,Linkedin开源的Kafka
配置中心
- Spring Cloud 自带 Spring Cloud Config
- 携程开源的Apollo,在携程经过生产级验证,具备高可用,配置实时生效(推拉结合),配置审计和版本化,多环境多集群支持等生产级特性,建议中大规模需要对配置集中进行治理的企业采用。
- 阿里开源的Nacos,Nacos集注册发现和配置中心于一体。
服务监控
主要包括日志监控,调用链监控,Metrics 监控,健康检查和告警通知等产品。
ELK 目前可以认为是日志监控的标配
调用链监控目前社区主流是点评 CAT,Twitter开源的Zipkin,Naver开源的Pinpoint,还有国内开源的Skywalking等
其他服务
- 分布式缓存:Redis
- 分布式数据库访问层:MyCat
- 任务调度系统:徐雪里开源的 xxl-job,阿里开源的Alibaba Cloud SchedulerX
持续集成
持续交付流水线(CD Pipeline)是微服务发布重要环节,包括基于Docker的镜像治理、基于Kubernetes的集群资源调度,以及资源治理和发布平台等。
下图为可供参考的流水线模型:
总结
微服务是一个庞大的架构体系,每个企业的具体上下文(业务场景,团队组织,技术架构等)各不相同,所以技术选型存在多种多样,没有最好的技术栈,只有相对较合适的技术栈。而技术栈仅是微服务建设的一小部分工作,产品落地才是建设目的,而且系统落地后还有大量集成、定制、治理、运维和推广等工作。