微服务架构

单点系统和分布式系统优劣对比

为什么需要微服务架构

单体项目的痛点:

  • 可扩展性低;要扩展就需要所有的资源一起扩展,成本高;
  • 运维成本高:单体应用随着业务发展越来越复杂,代码维护成本越来越高,运维的粒度大,难度也越来越大;
  • 资源利用率低:大型单体架构中,流量不同的业务模块,需要共用资源;
  • 团队协作复杂:每个开发人员都需要维护一整个项目;

微服务的痛点

  1. 成本高、基础设施要求高;
  2. 系统复杂性高;
    1. 分布式系统的复杂;
    2. 服务治理复杂:注册中心、限流、消息队列、容器化等;
  3. 运维成本高:自动化部署、CI、CD、链路追踪、

主流的微服务解决方案

微服务中的核心组件

  1. 注册中心(必需):服务的注册与发现;管理服务的地址、状态等;
    1. SpringCloud:Eureka、Consul
    2. SpringCloudAlibaba:Nacos
    3. k8s:etcd;
  2. 配置中心(非必需):集中管理服务的配置数据,动态修改线上配置; 2. SpringCloud:SpringCloud Config 3. SpringCloudAlibaba:Nacos
  3. API网关:统一管理服务的路由、权限,通常作为多个微服务的统一出口,提供给客户端访问。
    1. SpringCloud:Zuul、Gateway
    2. SpringCloudAlibaba:Gateway;
  4. RPC:服务间内部的通讯;
    1. HTTP:Feign;
    2. Dubbo、Grpc、Thrift等;
  5. 限流降级熔断:系统保护和兜底;
    1. Sentinel、Hystrix;
  6. 链路追踪和监控告警;(基础设施)
    1. 日志采集汇聚;
    2. 指标平台;
    3. 监控告警;
    4. SpringCloud:Zipkin
    5. SpringCloudAlibaba:Skywalking、Sentinel dashboard;

分布式组件选择

一致性模型

  • CP:强一致性,牺牲可用性;
    • Zookeeper、ETCD
  • AP:更高可用性,牺牲一致性;
    • Nacos
  • 最终一致性;