微服务架构可以简单的理解为将单体应用进行原子化的拆分,拆分成更加小的服务,每个服务都是一个可以单独的运行的项目
目录
2.1 微服务架构常见的一些问题
2.2 微服务架构概念组件
2.2.1 服务治理
2.2.2 服务调用
2.2.3 服务网关
2.2.4 服务容错
2.2.5 链路追踪
2.3 微服务架构常见解决方案
2.3.1 ServiceComb
2.3.2 SpringCloud
2.3.3 SpringCloud Alibaba
一旦我们项目采用微服务系统架构,就势必要考虑一下问题
1.这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])
2.这么多小服务,他们之间如何通讯?(restful rpc)
3.这么多小服务,客户端怎么访问他们?(网关)
4.这么多小服务,一旦出现问题了,应该如何自处理?(容错)
5.这么多小服务,一旦出现问题了,应该如何排错? (链路追踪)
当我们采用微服务架构,上面的问题是每个设计者都无法绕过的问题,目前市面上大部分微服务产品都针对每个问题提供了相应的组件来解决
服务治理就是进行服务的一个自动化管理,核心内容就是服务的自行注册和发现
服务注册:服务实例将自身服务信息注册到注册中心。
服务发现:服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
服务剔除:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到。
在微服务架构中,既然我们将不同的业务独立出来,但是必不可免的不同的服务之间必定会存在远程调用的一个需求。目前比较主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。
1.REST(Representational State Transfer):这是一种HTTP调用的格式,更标准,更通用,无论哪种语言都支持http协议
2.RPC(Remote Promote Call):一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式、序列化方式和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
区别与联系
比较项 | RESTfull | RPC |
通讯协议 | HTTP | 一般使用TCP |
性能 | 略低 | 较高 |
灵活 | 高 | 较高 |
应用 | 微服务架构 | SOA架构 |
随着微服务的不断增多,不同的微服务一般都会有不同的网络访问地址,而客户端可能会去调用多个服务的接口才能完成一个业务的需求,如果让客户端直接与各个服务进行通讯可能会存在以下问题
1.客户端需要调用不同的url地址,相对增加复杂度
2.在一定的场景下会存在跨域请求问题
3.每个服务都需要单独的进行身份认证
针对以上问题API网关顺势而生
API网关简单意思就是将所有API调用统一接入到API网关层,由网关统一进行接入和输出。
在微服务架构中,一个请求经常会涉及到调用多个服务,如果其中有服务处于不可用状态,没有进行服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。我们没办法预防雪崩效应的发生,只好尽可能的做好容错机制。
服务容错的三个核心思想:
1.不被外界环境影响
2.不被上游请求压垮
3.不被下游响应拖垮
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要对一次请求涉及的多个服务链路进行日志记录,性能监控即链路追踪
Apache ServiceComb,前身是华为云的微服务引擎 CSE (Cloud Service Engine) 云服务,是全球首个Apache微服务顶级项目。它提供了一站式的微服务开源解决方案,致力于帮助企业、用户和开发者将企业应用轻松微服务化上云,并实现对微服务应用的高效运维管理。
Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。