1.认识微服务
随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
1.1.单体架构
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCUc55oP-1665907177980)(assets/image-20210713202807818.png)]](https://img-blog.csdnimg.cn/ac5c379b7f184cfaacf43de56c50877b.png)
单体架构的优缺点如下:
优点:
- 架构简单
- 部署成本低
缺点:
- 耦合度高(维护困难、升级困难)
1.2.分布式架构
分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。

分布式架构的优缺点:
优点:
- 降低服务耦合
- 有利于服务升级和拓展
缺点:
- 服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
- 服务拆分的粒度如何界定?
- 服务之间如何调用?
- 服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构。
1.3.微服务
微服务的架构特征:
- 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
- 自治:团队独立、技术独立、数据独立,独立部署和交付
- 面向服务:服务提供统一标准的接口,与语言和技术无关
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
2.微服务的技术实现
可以认为微服务是一种经过良好架构设计的分布式架构方案 。
但方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案。
在国内根据社区的活跃程度,微服务技术分为三个体系:Dubbo 体系、Spring Cloud 体系、K8s 体系
| Dubbo | SpringCloud | K8s | |
|---|---|---|---|
| 配置管理 | Diamond/Nacos | Spring Cloud Config | ConfigMaps/Secrets |
| 服务发现与复杂均衡 | Zookpeer/Nacos+client | Eureka+ribbon | Service |
| 弹性容错 | Sentinel | Hystrix | HealthCheck/ServiceMesh/Probe |
| API管理 | 无 | Zuul/Spring Cloud Gateway | Ingress |
| 服务安全 | 无 | 无 | 容器安全 |
| 日志监控 | ELK | ELK | EFK |
| 链路监控 | 无 | Sleuth | Jaeper |
| Metrics监控 | Dubbo Admin/Monitor | Actuator/MicroMeter+ Prometheus | Heapster/Metrics-Server+Prometheus |
| 调度和发布 | Jar/War | Jar/War | Docker Image/Helm |
| 自愈和自动伸缩 | 无 | 无 | AutoScaler |
Dubbo,是由阿里巴巴技术团队,在生产中实际应用的解决方案;亮点是由国内公司阿里巴巴背书,且实际业务中脱产,成熟稳定,RPC高性能支持流量治理,不足之处为耦合度高,更新迭代慢,国外社区小,仅支持JVM运行
Spring Cloud,由Netflix 背书是Spring 框架演变出的微服务架构解决方案;国外社区活跃,程度高,不足之处,JVM运行,耗资源
Kubernetes(K8S),由谷歌技术团队背书,是由谷歌技术团队在生产中应用的解决方案。技术稳定,省去了很多的技术实现,但是运维门槛高,学习成本大,问题解决复杂
3.总结
随着业务规模的升级,架构模式也随着升级,为了让技术开发人员,更加关注业务的开发,因此微服务架构应运而生。微服务架构提供了一系列的基础设施能力的支撑,省去了技术开发人员的对于公共设施能力的关注,专注于业务开发。然而不同的微服务技术有各自的优缺点,架构师需要了解微服务技术的关注点和技术组成,需要根据实际的公司情况,技术团队能力以及产品业务背景选择合适的微服务技术。