一、微服务的概念
维基上对其定义为:一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的 进程 中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建。
二、微服务的现状
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果,各大互联网公司也有自研的微服务框架,虽然微服务架构没有公认的技术标准和规范或者草案,但业界已经有一些很有影响力的开源微服务架构框架提供了微服务的关键思路,例如 Dubbo 、Spring Cloud 、Spring Cloud Alibaba。
三、微服务的优劣势
优势
1.每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求;
2.微服务能够被小团队单独开发;
3.微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的;
4.微服务能使用不同的语言开发;
5.微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值;
6.微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合;
劣势
1.运维要求较高;
2.分布式的复杂性;
3.接口调整成本高;
4.学习难度曲线加大:需要掌握一系列的微服务开发技术
5.处理分布式事务较棘手
6.多服务运维难度,随着服务的增加,运维的压力也在增大
四、分布式和微服务的关系
1、概念方面
微服务是架构设计方式
微服务是指很小的服务,可以笑道只完成一个功能,这个服务可以单独部署运行,不同服务之间通过RPC调用。
分布式是系统部署方式
分布式是指在不同的机器上,一个服务剋提供一个或者多个功能,服务之间通过RPC或者Webservice来交互。
2、结合生产问题进行理解
分布式的核心就是:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,就算是分布式。有两种差分方式:水平拆分和垂直拆分。
水平拆分:将一个项目根据“三层架构”差分成表示层(JSP + Servlet)、业务逻辑层(Service)和数据访问层(DAO),然后再分开部署:把表示层部署在服务器A上,把Service和DAO层部署再B机器上,服务器之间通过RPC进行通信。
这种不是微服务的架构设计,但是使用的是分布式的部署方式。
垂直拆分:将项目拆分成几个模块,比如:用户模块、订单模块、库存管理模块
分别部署到各个服务器上,这种就是属于 微服务的架构设计 + 分布式部署方式。
3、小结
分布式部署不一定是微服务架构,微服务的应用不一定是分布式部署的。
实际的业务场景中通常:分布式部署的通常就是微服务架构的项目。
五、常见的微服务架构之间的对比
核心组件 | Spring Cloud | Spring Cloud Alibaba | Dubbo |
---|---|---|---|
服务注册中心 | Eureka | nacos | zookeeper/nacos |
调用方式 | Rest API | Rest API | RPC |
服务网关 | Zuul | gateway | 无 |
断路器 | Hystrix | Sentinel | 不完善 |
分布式配置 | Spring Cloud Config | naco | 无 |
分布式追踪系统 | Sleuth | Sleuth | 无 |
消息总线 | Bus | Bus RocketMQ | 无 |
数据流 | Stream | Stream | 无 |
批量任务 | Task | Task | 无 |
消息中间件 | 无 | RecketMQ | 无 |
分布式事务解决方案 | 无 | Seata | Seata |
分布式调度服务 | 无 | Alibaba Cloud SchedulerX | 无 |
短信平台 | 无 | Alibaba Cloud SMS | 无 |
Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件,服务治理只是其中的一个方面。
Dubbo 提供了各种 Filter,对于上述中“无”的要素,可以通过扩展 Filter 来完善。例如:
- 分布式配置:可以使用淘宝的 diamond、百度的 disconf 来实现分布式配置管理。
- 服务跟踪:可以使用京东开源的
Hydra,或者扩展 Filter 用 Zippin 来做服务跟踪。- 批量任务:可以使用当当开源的
Elastic-Job、tbschedule。
Spring Cloud Alibaba是对Spring Cloud中部分停止维护的组件进行扩展的替换,目前由于Eureka、Zuul、Hystrix已不再开源,导致Spring开源基金会无法免费获取其授权,从而停止更新和维护,阿里分别推出nacos、gateway、Sentinel来替代,并加入了Alibaba Cloud SchedulerX、Seata、Alibaba Cloud SMS等组件,功能更丰富。