前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务架构的整套解决方案

微服务架构的整套解决方案

原创
作者头像
xcbeyond
修改于 2020-06-22 08:38:49
修改于 2020-06-22 08:38:49
2.6K0
举报
文章被收录于专栏:技术那些事技术那些事

在当今微服务架构兴起的时代,微服务架构的软件产品数不甚数。在面对初步接触、从0到1开始的团队或个人,将面临很大的难题与困惑,技术框架如何选择、核心基础模块如何建设、都包含哪些东西,如何规范化等等问题。本文将针对微服务架构下面临的种种问题,一一罗列,提供整套解决方案,供大家参考。

1. 企业IT建设的三大基础环境

团队协作环境:主要是DevOps领域的范畴,负责从需求到计划任务,团队协作,再到质量管理、持续集成和发布。

个人基础环境:就是本文介绍的微服务应用平台,他的目标主要就是要支撑微服务应用的设计开发测试,运行期的业务数据处理和应用的管理监控。

IT基础设施:就是我们通常说的各种运行环境支撑如IaaS (VM虚拟化)和CaaS (容器虚拟化)等实现方式。

2. 微服务应用平台总体架构

主要是从开发集成、微服务运行容器与平台、运行时监控治理和外部渠道接入等维度来划分的。

开发集成:主要是搭建一个微服务平台需要具备的一些工具和仓库

运行时:要有微服务平台来提供一些基础能力和分布式的支撑能力,我们的微服务运行容器则会运行在这个平台之上。

监控治理:则是致力于在运行时能够对受管的微服务进行统一的监控、配置等能力。

服务网关:则是负责与前端的WEB应用 移动APP 等渠道集成,对前端请求进行认真鉴权,然后路由转发。

3. 微服务应用平台的运行视图

在运行期,作为一个微服务架构的平台与业务系统,除了业务应用本身外,还需要有接入服务、统一门户、基础服务等平台级服务来保障业务系统的可靠运行。图中的公共服务就是业务处理过程中需要用到的一些可选服务。

4. 微服务平台的设计目标

支撑微服务应用的全生命周期管理,包括从需求、设计、开发、测试、发布(自动打包管理和敏捷可靠发布)和运营(全面监控管理、标准数据采集和运营驱动创新)。

5. 微服务开发:前端、后端和混合

混合项目则是为了兼容传统模式而保留的,为企业应用向微服务架构演进提供过渡方案。

6. 服务契约与API管理

对于前面提到的微服务带来的依赖管理问题,我们可以通过平台提供的API管理能力来解决。服务契约有点类似于web service的wsdl描述,主要描述服务接口的输入输出规格标准和一些服务调用集成相关的规格内容。

7. 服务契约和服务模拟

有了服务契约,我们就可以根据契约自动生成服务的文档和服务模拟测试环境。这样,开发者就可以及时获取依赖服务的变化,调整自己的程序,并且能够方便的进行模拟测试验证。

根据契约生成模拟服务也就是我们常说的服务挡板,这样即使依赖的其他服务还无法提供功能,我们也可以通过挡板来进行联调测试。

8. 服务契约与服务编排

编排能够很大程度上简化分布式服务调用的复杂度,如同步、异步、异步模拟同步、超时重试、事务补偿等,均有服务编排引擎完成。

服务编排的作用和意义很大,可以快速的将已经提供的微服务能力进行组合发布,非常适合业务的快速创新。

但是大家要注意,逻辑流编排的是业务流程,尽量能够简单明了,一眼看上去就明白业务含义。而业务规则推荐采用服务内部进行编码实现。千万不要将我们的 “逻辑流” 图形化服务编排完全取代程序编码,这样就会可能会走入另外一个极端,比如设计出像蜘蛛网一样的逻辑流图,简直就是灾难。

9. 微服务容器

如果没有一个统一的微服务容器,这些能力在每个微服务组件中都需要建设一遍,而且会五花八门,也很难集成到一起。有了统一的微服务运行容器和一些公共的基础服务,前面所提到的微服务架构下部分组件重复建设的问题也迎刃而解。

10. 三方能力集成说明

  • API Doc: Swagger UI
  • API Mock: Swagger Mock API
  • AOP基础框架:Spring Framework
  • 微服务容器:Spring Boot
  • 服务发布:Spring Web MVC
  • 服务注册中心:Spring Cloud - Eureka
  • 服务路由:Spring Cloud - Ribbon
  • 服务调用:Spring Cloud - Feign
  • 服务熔断器:Spring Cloud - Hystrix
  • 安全认证:Spring Cloud - Security
  • 服务配置中心:Apollo,Spring Cloud - Config
  • 服务监控:Spring Boot Admin

11. 服务注册发现路由

以前的单块应用之间互相调用时配置个IP就行了,但在微服务架构下,服务提供者会有很多,手工配置IP地址又变成了一个不可行的事情。那么服务自动注册发现的方案就解决了这个问题。

我们的服务注册发现能力是依赖SpringCloud Eureka组件实现的。服务在启动的时候,会将自己要发布的服务注册到服务注册中心,运行时,如果需要调用其他微服务的接口,那么就要先到注册中心获取服务提供者的地址,拿到地址后,通过微服务容器内部的简单负载均衡期进行路由用。

12. 统一认证鉴权

安全认证方面,我们基于Spring Security结合Auth2再加上JWT(Json web token)做安全令牌,实现统一的安全认证与鉴权,使得微服务之间能够按需隔离和安全互通。后续在统一认证和权限方面我们产品会陆续推出较完善并且扩展性良好的微服务组件,可以作为微服务平台的公共的认证和鉴权服务。认证鉴权一定是个公共的服务

13. 日志与流水设计

先来看日志,平台默认回会提供的日志主要有三种,系统日志,引擎日志还有跟踪日志。有了这些日志,在出问题的时候能够帮助我们获取一些关键信息进行问题定位。

系统日志:格式化日志,记录系统边界报文日志,即微服务接入,接出的请求、响应报文明细信息

引擎日志:格式化日志,记录微服务内部的关键模块的处理情况、上下文状态、耗时等信息;逻辑处理、SQL、服务调用

跟踪日志:非格式化日志,用以开发测试期排错,上线后默认记录异常

要想做到出了问题能够追根溯源,流水号的设计也是非常重要的,日志与各种流水号配合,能够让我们快速定位问题发生的具体时间地点以及相关信息,能够快速还原业务交易全链路。

  • GlobalId: 全局流水号,需保证全局唯一,用于标识一次完整的端到端交易
  • BusinessId:交易流水号,业务域内唯一,用于标识一次接收到的交易请求
  • AppUniqueId:业务处理流水号,应用内部唯一,标识微服务内部收到请求后的一次完整的处理过程
  • RequestId:请求消息编号,唯一确定一个请求报文
  • ResponseId:响应消息编号,唯一确定一个响应报文
  • AppId:应用编号,一个微服务应用集群唯一
  • ProcessId:进程编号,微服务集群内唯一

14. 集中配置管理

配置文件主要有运行前的静态配置和运行期的动态配置两种。静态配置通常是在编译部署包之前设置好。动态配置则是系统运行过程中需要调整的系统变量或者业务参数。

就是需要运行时需要有个配置中心来统一管理业务系统中的配置信息,这个就需要平台来提供配置中心服务和配置管理门户。

15. 统一管理门户

微服务架构下,一个大的EAR、WAR应用被拆为了多个小的可独立运行的微服务程序,通常这些微服务程序都不再依赖应用服务器,不依赖传统应用服务器的话,应用服务器提供管理控制台也就没得用了,所以微服务的运行时管理需要有统一的管理门户来支撑。我们规划了的统一集中的微服务门户,可以支撑 应用开发、业务处理、应用管理、系统监控等。

16. 分布式事务问题

我们这里说的事务一致性,不是传统说的基于数据库实现的技术事务。微服务之间是独立的、调用协议也是无状态的,因此数据库事务方案在一开始就已经不再我们考虑的范围内。我们要解决的是一定时间后的数据达到最终一致状态,准确的说就是采用传统的业务补偿与冲正方式。

推荐的事务一致性方案有三种:

可靠事件模式:即事件的发送和接收保障高可靠性,来实现事务的一致性。

补偿模式:Confirm Cancel ,如果确认失败,则全部逆序取消。

TCC模式:Try Confirm Cancel ,补偿模式的一种特殊实现 通常转账类交易会采用这种模式。

17. 分布式同步调用问题

如何在不确定的环境中交付确定的服务

这句话可以简单理解为,我所依赖的服务的可靠性是无法保证的情况下,我如何保证自己能够正常的提供服务,不被我依赖的其他服务拖垮?

我们推荐SEDA架构来解决这个问题。

SEDA : staged event-driven architecture本质上就是采用分布式事件驱动的模式,用异步模拟来同步,无阻塞等待,再加上资源分配隔离结起来的一个解决方案。

18. 持续集成与持续交付设计

在运维方面,首先我们要解决的就是持续集成和持续交付,而微服务应用平台的职责范围目前规划是只做持续集成,能够方便的用持续集成环境把程序编译成介质包和部署包。

19. 微服务平台与容器云、DevOps的关系

就微服务应用平台本身来说,并不依赖DevOps和容器云,开发好的部署包可以运行在物理机、虚拟机或者是容器中。

然而当微服务应用平台结合了DevOps和容器云之后,我们就会发现,持续集成和交付变成了一个非常简单便捷并且又可靠的过程。

简单几步操作,整套开发、测试、预发或者生产环境就能够搭建完成。整个过程的复杂度都由平台给屏蔽掉了,通过三大基础环境的整合,我们能够使分散的微服务组件更简单方便的进行统一管理和运维交付。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务的4个设计原则和19个解决方案
微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境。 本文将介绍微服务架构的演进、优缺点和微服务应用的设计原则,然后着重介绍作为一个“微服务应用平台”需要提供哪些能力、解决哪些问题才能更好的支撑企业应用架构。 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以SpringCloud为基础,结合了普元多年来对企业应用的理解和产品的设计经验,逐步孵化的一个微服务应用平台。 一、微服务架构演进
晓晨
2018/06/22
2.7K0
微服务的4个设计原则和19个解决方案
微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境。 本文将介绍微服务架构的演进、优缺点和微服务应用的设计原则,然后着重介绍作为一个“微服务应用平台”需要提供哪些能力、解决哪些问题才能更好的支撑企业应用架构。 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以SpringCloud为基础,结合了普元多年来对企业应用的理解和产品的设计经验,逐步孵化的一个微服务应用平台。 目录: 一、微服务架构演进
yuanyi928
2018/03/30
1.5K0
微服务的4个设计原则和19个解决方案
微服务架构选型实践
背景 随着公司一年多的成长,我们已经开发了数十个项目了,后台有 JAVA 的有 PHP 的,为了更好地提升开发与管理效率,各技术大牛小牛们时常进行激烈的 PK,碰撞出了许许多多爱的火花,比如其中之一:
Java高级架构
2018/04/19
1.1K0
微服务架构选型实践
从单体架构迁移到微服务,8个关键的思考、实践和经验
随着微服务架构的持续火热,网络上针对微服务和单体架构的讨论也是越来越多。去年的时候,社区更多的关注点是在二者的区别以及优缺点辨析上,而今年,越来越多的人开始关注如何从单体架构迁移到微服务上。毋庸置疑,微服务的理念正在席卷整个开发者社区,像Netflix、Uber这样的公司都是非常成功的应用案例。 但需要注意的是,实施微服务,也需要付出额外的代价,Martin曾经就说过,除非面对的是一个过于复杂以至于难于管理的单体应用,否则绝对不要考虑使用微服务。大多数的软件系统应该构建为独立的单块程序。确保注重单体应用
yuanyi928
2018/04/02
1.9K0
从单体架构迁移到微服务,8个关键的思考、实践和经验
大规模微服务场景下灰度发布与流量染色实践
本文内容选自中国DevOps社区年会 · 2019年会,刘超老师分享的《大规模微服务场景下灰度发布与流量染色实践》实录。
kirito-moe
2019/12/17
8.2K0
大规模微服务场景下灰度发布与流量染色实践
一小时架构师带你实践 Spring Cloud微服务架构搭建。分分钟钟让你从小白变为大佬
计算机视觉图像识别是人工智能的重要应用, 广泛应用在工业、医学、军事、教育、商业、体育、安防检测等行业与领域中. 机器学习, 尤其是深度学习展现出了针对图像识别领域优秀的识别性能. 而机器学习本身需要建立在大量的带有指导意义的既有数据集基础之上. 在进行深度学习模型训练流程中, 往往需要针对海量图片进行人工数据标注, 繁重的图像标注任务增添了大量时间成本。
苏州程序大白
2021/08/13
6380
一小时架构师带你实践 Spring Cloud微服务架构搭建。分分钟钟让你从小白变为大佬
快速正确的搭建一个微服务架构需要了解的那几个点
一、微服务架构四大特性 好的微服务架构是什么样的呢?想要搭建好一个微服务架构,必须要具备一下四个特征: 服务的粒度需根据业务功能来划分,对于某些复杂的业务来说,可能粒度较大,对于相对简单的业务而言,可能粒度较小。总之,服务的粒度可大可小,但往往我们更希望它尽可能的小,但又不希望服务之间有任何的依赖,因此粒度的划分是非常考验架构师水平的事情。 我们需要确保每个微服务只做一件事情,也就是我们经常提到的“单一职责原则”,该原则对服务的划分提供了指导方针。 每个服务相互隔离,且互不影响。也就是说,每个服务需在自己
用户1263954
2018/06/22
7930
关于微服务拆分,听听一位微服务架构师的肺腑之言
导语:微服务架构的盛行,解决了系统上可用性、可扩展、可维护性上的问题,成为众多企业架构转型的不二之选。但在架构转型时,原有系统应该如何进行微服务拆分呢?要避免哪些陷阱呢?在本文中,腾讯云微服务架构师崔凯将为大家详细解答。
腾讯云中间件团队
2021/03/24
2.4K0
关于微服务拆分,听听一位微服务架构师的肺腑之言
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。每个微服务通常聚焦于某一个特定的业务功能或领域,能够通过轻量级的通信协议(如 HTTP/REST、消息队列等)与其他微服务进行交互。
用户7954602
2024/12/07
6180
微服务架构解析:跨越传统架构的技术革命
基于统一开发平台的微服务架构转型升级之路 | 某国有大型银行案例
某银行是一家国有大型银行,从2016年开始采用了我们的SOA开发平台作为基础Java开发平台。
yuanyi928
2018/11/23
2.1K0
金融行业微服务架构解析
对于微服务,每个人都有自己的理解,与互联网企业的大量落地相比,微服务在传统金融行业还没有普及,这首先是传统金融行业线上系统需求更新和版本迭代没有互联网公司那么频繁;其次是技术能力约束了新技术的落地;再者传统金融行业对系统可用性和稳定性的要求非常高。
yuanyi928
2019/07/12
2.4K0
金融行业微服务架构解析
微服务架构实施原理
作者:风中程序猿,来自:cnblogs.com/fangfuhai 1 题记 基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发、持续集成的流程。 平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发业务代码并提交到平台代码库,做一些必要的配置,系统会自动构建、部署,实现应用的敏捷开发、快速迭代。 在系统架构上,PaaS云平台主要分为微服务架构、Docker容器技术、DveOps三部分,这篇文章重点介绍微服务架构的实
架构师小秘圈
2018/06/04
1.6K0
关于微服务架构,你需要关注的那些点
今天谈到系统架构模式,很难不联想起微服务架构。企业或组织在系统架构的实践过程中,从最初的单体架构,之后走向 SOA,逐渐分布式之后,最终产生了微服务架构。
java思维导图
2018/10/24
1.2K0
关于微服务架构,你需要关注的那些点
爱奇艺微服务技术架构实践
为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改造。
iginkgo18
2021/11/03
7600
普元微服务平台EOS Platform 8全新发布
普元新一代应用平台EOS Platform 8已经全面拥抱微服务架构,支持分布式架构,为企业业务上云提供云原生应用的支撑。同时该版本完全支持Spring Boot应用开发、采用标准Maven、Git体系,平台更开放。
yuanyi928
2018/10/23
3.8K0
普元微服务平台EOS Platform 8全新发布
应用技术架构 —— 微服务架构
在 2010s 进入移动互联网(web3.0)时代,互联网用户规模再次迎来井喷式增长,面向服务的技术架构在服务海量规模用户时显得力不从心。SOA 架构中 ESB 存在单点以及 RPC 中缺少服务的治理能力,ESB 和 RPC 架构都很难满足移动互联网海量用户的要求,微服务开始出现,并成为今天技术架构的主流。
腾讯云 CODING
2022/03/16
1.9K0
应用技术架构 —— 微服务架构
什么是云原生?聊聊云原生和微服务的架构
之前写过两篇关于微服务架构的文章,发现阅读量挺高的,所以打算再聊聊云原生和微服务架构,过去的文章如下:
phoenix.xiao
2021/12/07
1.7K0
什么是云原生?聊聊云原生和微服务的架构
微服务架构详解
首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。
技术zhai
2019/02/15
1.4K0
基于 Docker 的微服务架构实践
基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展。本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结。希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考。
烂猪皮
2018/08/03
2.6K0
基于 Docker 的微服务架构实践
你真的了解微服务架构吗?
随着互联网行业的快速发展,对服务的要求也越来越高,服务架构早就从原来单体架构逐渐演变为现在流行的微服务架构。
一个风轻云淡
2023/10/20
8073
推荐阅读
相关推荐
微服务的4个设计原则和19个解决方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档