版权声明:版权所有,未经许可,不得转载,转载或者引用本文内容请注明来源及原作者
上一篇:架构演变介绍 | SpringCloud-Alibaba技术栈汇总
继上一篇文章,我们今天梳理下微服务架构常见概念、问题、解决方案。
微服务架构
微服务架构, 简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。
过往文章参考:微服务架构设计区别
微服务架构常见问题
如果系统采用了微服务的架构设计,或多或少的会遇到如下几个问题:
- 这么多小的服务,如何高效率管理它们?
- 这么多小的服务,客户端如何访问它们?
- 这么多小的服务,它们之间是如何通讯?
- 这么多小的服务,如果其中一个服务出现了问题,如何处理?如何排查纠错?
对于上面的几个问题,是采用微服务架构设计的时候,不可避免的问题,目前大部分微服务产品都针对以上问题提供了响应的解决方案或者组件。
- 服务治理、注册中心(服务注册、发现、剔除)
- 服务调用、restful RPC
- 服务网关
- 服务容错
- 链路追踪
微服务架构常见概念
带着以上几个问题,我们首先来看下微服务常见的概念。
1服务治理
服务治理就是进行服务的自动化管理,其核心是服务的自动注册与发现。
- 服务注册
- 将自身服务信息注册到注册中心
- 服务发现
- 通过注册中心,获取到其中的服务信息,通过这些服务信息,然后去请求对应的服务实例
- 服务剔除
- 注册中心中,将出现问题的服务自动剔除到服务列表之外,使其不会被调用到
2服务调用
在微服务架构中,通常存在多个服务之间的远程调用的需求。目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。
- REST(Representational State Transfer)
- 这是一种HTTP调用的格式,是风格,不是标准,更通用,无论哪种语言都支持http协议
- RPC(Remote Promote Call)
- 一种进程间通信方式。
- 允许像调用本地服务一样调用远程服务。
- RPC框架的主要目标就是让远程服务调用更简单、透明。
- RPC框架负责屏蔽底层的传输方式、序列化方式和通信细节。开发人员在使用的时候只需要了解远程服务接口位置和功能即可,并不需要关心底层通信细节和调用过程。
描述 | RESTful | RPC |
---|---|---|
通讯方式 | HTTP | TCP |
性能 | 略低 | 高 |
灵活度 | 高 | 低 |
应用 | 微服务 | SOA |
状态 | 无 | 有 |
3服务网关
随着微服务的不断增多,不同的微服务一般会有不同的网络请求地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现以下问题:
- 客户端需要调用不同的url地址,增加难度
- 有可能会遇到跨域请求
- 某些微服务可能会进行单独的身份、权限认证
针对这些问题如何解决,服务网关就起到作用了。
API网关:意思是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,各个API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问题。
4服务容错
在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。这种效应我们没法控制发生,只能尽可能的做好容错,核心思想:不被外界环境影响、不被上游请求压垮、不被下游请求拖垮。
5链路追踪
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几百台服务器,横跨多个不同的数据中心。因此,就需要对一次请求涉及的多个服务链路进行日志记录,性能监控即链路追踪。
微服务架构常见解决方案
1ServiceComb
http://servicecomb.apache.org/
Apache ServiceComb,前身是华为云的微服务引擎 CSE (Cloud Service Engine) 云服务,是全球首个Apache微服务顶级项目。它提供了一站式的微服务开源解决方案,致力于帮助企业、用户和开发者将企业应用轻松微服务化上云,并实现对微服务应用的高效运维管理
2Spring Cloud
https://spring.io/projects/spring-cloud
Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
3Spring Cloud Alibaba
https://spring.io/projects/spring-cloud-alibaba
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。