单点系统和分布式系统优劣对比
为什么需要微服务架构
单体项目的痛点:
- 可扩展性低;要扩展就需要所有的资源一起扩展,成本高;
- 运维成本高:单体应用随着业务发展越来越复杂,代码维护成本越来越高,运维的粒度大,难度也越来越大;
- 资源利用率低:大型单体架构中,流量不同的业务模块,需要共用资源;
- 团队协作复杂:每个开发人员都需要维护一整个项目;
微服务的痛点
- 成本高、基础设施要求高;
- 系统复杂性高;
- 分布式系统的复杂;
- 服务治理复杂:注册中心、限流、消息队列、容器化等;
- 运维成本高:自动化部署、CI、CD、链路追踪、
主流的微服务解决方案
微服务中的核心组件
- 注册中心(必需):服务的注册与发现;管理服务的地址、状态等;
- SpringCloud:Eureka、Consul
- SpringCloudAlibaba:Nacos
- k8s:etcd;
- 配置中心(非必需):集中管理服务的配置数据,动态修改线上配置; 2. SpringCloud:SpringCloud Config 3. SpringCloudAlibaba:Nacos
- API网关:统一管理服务的路由、权限,通常作为多个微服务的统一出口,提供给客户端访问。
- SpringCloud:Zuul、Gateway
- SpringCloudAlibaba:Gateway;
- RPC:服务间内部的通讯;
- HTTP:Feign;
- Dubbo、Grpc、Thrift等;
- 限流降级熔断:系统保护和兜底;
- Sentinel、Hystrix;
- 链路追踪和监控告警;(基础设施)
- 日志采集汇聚;
- 指标平台;
- 监控告警;
- SpringCloud:Zipkin
- SpringCloudAlibaba:Skywalking、Sentinel dashboard;
分布式组件选择
一致性模型
- CP:强一致性,牺牲可用性;
- Zookeeper、ETCD
- AP:更高可用性,牺牲一致性;
- Nacos
- 最终一致性;