1、微服务架构分析及发展

1、背景分析

讲微服务之前,我们先分析以下单体应用。所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于SpringBoot,spring,mybatis框架进行整合,接下来再写一堆dao、mapper、service、controller,再加上一些的配置文件,有可能还会引入redis、elasticsearch、mq等其它项目的依赖,开发好之后再将项目打包成一个jar包/war包。然后再将包扔到类似tomcat这样的web服务中,最后部署到公司提供给你的linux服务器上。 接下来,你针对服务提供的访问端口(例如8080端口)发起http请求,请求会由tomcat直接转交给你的spring web组件,进行一层一层的代码调用。对于这样的设计一般适合企业的内部应用,访问量不大,体积比较小,5人以内的团队即可开发和维护。但对于一些大型互联网项目,假如需要10人以上的开发和维护团队,仅频繁的创建代码分支,编写业务功能,然后合并分支,就会出现很多代码冲突。每次解决这些大量的代码冲突,可能就会耗费好几天的时间。总之对于大型的单体应用可能存在的如下几个问题:
(1)很多人维护一个单块应用,频繁的进行代码合并,频繁的解决代码冲突,解决冲突的时间和成本很高的,导致开发效率低下。
(2)每次上线都要跟最新代码进行合并,重新进行全量功能的回归测试,很多代码都可能有变动,必须全量回归测试,耗费时间很多,开发效率低下。
(3)多人频繁上线,你等我,我等你,互相协调困难,而且可能会出现别人多次先上线,你多次重复的合并代码,解决冲突,全量回归测试,做很多次重复的事情,导致效率低下
(4)测试服务器都很少,就一台测试服务器,你开发好了代码,你连测试都不能测,必须等待别人的分支先测试完毕上线,你才能去合并代码,解决冲突,等到一个测试环境可以用,回归测试。
(5)10个人以内维护一个单块应用,基本这些成本还不算太大,但是一旦10人以上维护一个单块应用,上述的成本会极大,导致系统每个需求的测试和上线,都非常缓慢,要耗费大量时间做全量回归测试,上线日期还得互相配合互相等待互相协调,一个疏忽,就可能导致没侧测试完全的代码上线出线上事故。
(6)如果你想要升级技术架构,不能随意升级,因为可能影响别人,你得让所有人都学习这个新技术架构才行;如果你想要升级已有技术的版本,不能随意升级,因为可能新版本对你的代码没影响,但是对别人的代码有影响。

基于如上问题,超出需要10人开发和维护的项目一般建议的比较合理的做法就是进行微服务架构设计,把大系统拆分为很多小系统,几个人负责一个服务这样每个服务独立的开发、测试和上线,代码冲突少了,每次上线就回归测试自己的一个服务即可,测试速度快了,上线是独立的,只要向后兼容接口就行了,不需要跟别人等待和协调,技术架构和技术版本的升级,几个人ok就行,成本降低,更加灵活了。

2 、什么是微服务

微服务架构(MSA)的基础是将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。如图所示:
在这里插入图片描述

打开Git客户端工具,配置用户和密码,用于识别提交代码的用户。

这些服务使用轻量级 API 通过明确定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。由于它们是独立运行的,因此可以针对各项服务进行更新、部署和扩展,以满足对应用程序特定功能的需求。
生活中的微服务,如图所示:
blog.csdnimg.cn/direct/82bf6793a34349bfa7cb83bc7ee7ae32.png)
总之,微服务是分布式系统中的一种流行的架构模型,它并不是银弹,所以,也不要寄希望于微服务构架能够解决所有的问题。微服务架构主要解决的是如何快速地开发和部署我们的服务,这对于一个能够适应快速开发和成长的公司是非常必要的。同时,微服务设计中有很多很不错的想法和理念,通过学习微服务架构我们可以更快的迈向卓越。

3、SpringCloud 解决方案

3.1、概述

对于微服务架构,几乎所有的大公司走的都是自研路线。例如,国内最初的典型代表就是基于阿里的Dubbo进行实现,后来国外的netflix公司将他们内部的微服务技术架构进行了开源,在互联网行业产生了很大的影响力,然后接着就被整合到了spring社区,变成了spring cloud项目。

3.2、核心组件分析

Spring Cloud这个项目里面整合的基本上都是netflix公司的微服务相关组件,例如借助eureka做注册中心、feign和ribbon结合实现远程过程调用和负载均衡、zuul做网关、hystrix做熔断,用zipkin和sleuth做链路监控,stream做消息中间件集成,contract做契约测试支持,然后跟spring security配合的做安全认证,跟k8s配合的进行容器化操作等。Spring cloud将这些组件打包集成在一起,进行微服务架构实现,最初在国外比较有市场,几年前在国内也火了,大量公司都开始拥抱spring cloud,尤其是中小型公司。

3.3、解决方案架构设计

基于Spring Cloud实现的微服务,解决方案设计架构如图所示:在这里插入图片描述

4、Spring Cloud Alibaba 解决方案

4.1概述

Spring Cloud Alibaba 是Spring Cloud的一个子项目,致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

4.2核心组件分析

Spring Cloud Alibaba 默认提供了如下核心功能:

  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:基于Spring Cloud 服务注册与发现标准,借助Nacos进行实现,默认还集成了 Ribbon 的支持。
  • 分布式配置管理:基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

4.3解决方案架构设计

基于Spring Cloud Alibaba实现的微服务,解决方案设计架构如图所示:
在这里插入图片描述

5、小节总结(Summary)

总之,微服务是一个架构设计方式,此架构中的每个服务都是针对一组功能而设计的,并专注于解决特定的问题。如果开发人员逐渐将更多代码增加到一项服务中并且这项服务变得复杂,那么可以将其拆分成多项更小的服务。接下来进行独立的开发、测试、部署、运行、维护。进而更好,更灵活的处理客户端的请求并提高系统的可靠性,可扩展性。

  • 23
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值