微服务优缺点总结
参考文章 史上最简单的SpringCould
一 微服务好处总结
1.1 技术总体总结
- 技术的异构型,不同的服务可以选取自己的服务开发技术组件【语言,存储,消息队列等】
- 隔离性,服务自治,某一个服务处理失败了,不会影响其他的服务运行。
- 可扩展性,单个服务扩展,不会影响整体业务。
- 简化部署
- 易优化,模块职责单一,实现流程简
1.2 技术和业务上总结
- 提升开发交流,每个服务足够内聚,足够小,代码容易理解;
- 服务独立测试、部署、升级、发布;
- 按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;每个服务按需要选择HA的模式,选择接受服务的实例个数;
- 容易扩大开发团队,可以针对每个服务(service)组件开发团队;
- 提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;
- 新技术的应用,系统不会被长期限制在某个技术栈上;
二 微服务的缺点
- 模块变多了,管理复杂,各个模块之间的业务交互及抽象能力。
- 业务链出现的问题不好排查
- 微服务架构整个应用分散成多个服务,定位故障点非常困难。
- 稳定性下降。服务数量变多导致其中一个服务出现故障的概率增大,并且一个服务故障可能导致整个系统挂掉。事实上,在大访问量的生产场景下,故障总是会出现的。
- 服务数量非常多,部署、管理的工作量很大。
- 开发方面:如何保证各个服务在持续开发的情况下仍然保持协同合作。
- 测试方面:服务拆分后,几乎所有功能都会涉及多个服务。原本单个程序的测试变为服务间调用的测试。测试变得更加复杂。
三 针对微服务的缺点提供的优化及技术栈
- 注册中心 订阅通知 nacos
- 服务监控 skywalking 整体架构看似模块有点多,但在实际上还是比较清晰的,主要就是通过收集各种格式的数据进行存储,然后展示。
- 服务容错 【熔断,分离、限流、降级】 sentinel 处理
Sentinel
熔断 Hystrix RestTemplate 注解@HystrixCommand(fallbackMethod = "hiError"),定义hiError feign 接口 实现原来的接口并且注册到IOC 已经弃用
分离
限流
降级
- 服务路由 路由转发和过滤器
- 服务链路追踪 Spring Cloud Sleuth zipkin 后台统计服务间调用的依赖关系及调用数据
- 负载均衡 同一个服务多个节点部署的时候,使用负载均衡
- 注册中心服务,然后通过@LoadBalanced拿到注册中心的句柄 RestTemplate 或者通过 feign来实现
- 拦截器隔离