携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
背景介绍
微服务是什么?
这个问题一直困扰着我,每次谈到微服务似乎能说出个大概,却又说不明白。所以就趁着周末对微服务的概念以及各组件做个简单的总结。
Java 微服务
介绍常见微服务组件的功能及代表项目:
-
服务网关:聚合内部服务,提供统一的对外API接口,屏蔽内部实现。可以解决跨域、认证和前端调用负责的问题,便于项目重构。组件有 Spring Cloud Zuul 或 Spring Cloud Gateway 。
-
服务发现:实现各个服务实例的自动化注册与发现。解决 [服务消费者] 直接调用 [服务提供者] 这种硬编码方式后期的巨大维护成本。组件有 Spring Cloud Eureka 或 Spring Cloud Consul 。
-
服务消费:调用服务提供者。帮我们更加便捷、优雅的调用Http API。组件有 Spring Cloud Feign 。
-
负载均衡:提供负载均衡算法,例如轮询。通过负载均衡来实现系统的高可用、集群扩容等功能。组件有 Spring Cloud Ribbon 。
-
服务容错:微服务中很多服务互相依赖,其中一个故障会导致整个系统不可用。提供服务熔断保护,相当于电路中的保险丝。组件有 Spring Cloud Hystrix 。
-
服务监控:服务状态的实时监控。可以使用 Hystrix Dashboard 监控单个应用内的服务信息,Spring Cloud Turbine 汇总多个服务的数据。
-
链路 追踪:前端一个接口请求,需要调用后端多次服务,整个请求出现问题时,快速定位服务的故障点。组件有 Spring Cloud Sleuth、ZipKin、Skywalking 。
-
服务配置:集中管理配置,组件有 Spring Cloud Config、Apollo。
-
消息总线:自动刷新服务配置,组件有 Spring Cloud Bus。
下图展示腾讯的微服务框架中列举的组件图,方便理解微服务的各个组件及整体框架。
PS:图片来自 spring-cloud-tencent (腾讯微服务解决方案代号北极星),目前 spring-cloud-tencent 社区非常活跃,期待能够有个微服务一站式解决方案,与时俱进共创美好社区。
闲谈
目前 Java 技术栈的微服务解决方案都是基于 Spring Cloud 生态的组件。比较主流的开源技术社区为 Spring Cloud Alibaba。
简单的组件整理如下:
- Nacos 服务的注册发现
- Nacos Config 服务的配置中心
- Sentinel 熔断、降级
- Spring Cloud GetWay 微服务网关
- Open Feign / RestTemplate 微服务间调用
- 日志组件 ELK Elasticsearch、Logstash、Kibana
- 消息队列 Kafka、RoctketMQ
- 链路追踪 SkyWalking、Zipkin
以上介绍的均为 Java/Spring 生态下的微服务组件。
另外还有一套基于 K8s/Docker 的一套服务体系。一套容器化依赖 K8s 组件的微服务解决方案。如果跳出 Java 的生态还是很有必要学习。(组件有 ConfigMap、Ingress等)
当然上面说的 K8s 微服务体系,已然是过去时。最新基于 K8s 的微服务体系是 Istio,较上一版本完全摒弃 Spring Cloud 的组件。基于容器、 K8s 搭建的一整套解决方案。(新的组件有 Envoy、边车等)