vlambda博客
学习文章列表

聊一聊微服务与springcloud

    微服务是目前各大厂在使用的技术栈,在面试时也会有很多的面试官喜欢聊一下,当然,与微服务相关的springcloud也是必不可少的,来和雷记一起了解一下吧!


关于微服务



    微服务是一种架构风格,意在将单体应用划分为小型的服务单元,微服务之间使用 HTTP 的 API 进行资源访问与操作,微服务架构的演变更像是一个事物的发展演化,以基础的模块进行研发使用,然后对外暴露接口使用,功能规模达到一定程度,汇总为聚合服务,然后以此种扩展思路继续演化,最终提供无限的可能;

    在微服务出现之间,各处充斥着臃肿的系统、重复的代码、超长的启动时间带给开发人员的只有无限的埋怨,丝毫没有微服务带来舒服地流畅感觉,只会把大部分时间花在解决问题和项目启动上面,实在是低效率,高难度;


微服务架构的优势



独立的服务

    每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少;

更适合敏捷开发

    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布;

职责专一

由专门的团队负责专门的服务,业务发展迅速时,研发人员会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工;

服务可动态扩容

    当某个服务的访问量较大时,只需要将这个服务扩容即可;

代码的复用

    每个服务都提供 REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供;


微服务架构的劣势



分布式部署,调用的复杂性高

    单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等;

独立的数据库,面临分布式事务的挑战

    每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用 MySQL、评论服务可以用 Mongodb、商品搜索服务可以用 Elasticsearch。此外还会有事务的问题,目前最理想的解决方案就是柔性事务中的最终一致性;

测试的难度提升

    服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是 API 文档的管理尤为重要;

运维难度的提升

    在采用传统的单体应用时,我们可能只需要关注一个 Tomcat 的集群、一个 MySQL 的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂,对于运维的要求会更高;


关于Spring Cloud


    

    Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务注册、服务发现、配置中心、消息总线、负载均衡、断路器、数据监控等,这些都可以用 Spring Boot 的开发风格做到一键启动和部署。


Spring Cloud 模块介绍



Spring Cloud 模块:

    ·Eureka:服务注册中心,用于服务管理

    ·Ribbon:基于客户端的负载均衡组件

    ·Hystrix:容错框架,能够防止服务的雪崩效应

    ·Feign:Web 服务客户端,能够简化 HTTP 接口的调用

    ·Zuul:API 网关,提供路由转发、请求过滤等功能

    ·Config:分布式配置管理

    ·Sleuth:服务跟踪

    ·Stream:构建消息驱动的微服务应用程序的框架

    ·Bus:消息代理的集群消息总线

    ·Cli:允许使用命令行、.yml配置文件和Groovy脚本快速自动配置和部署标准Spring Cloud服务

    ·Task:为Spring Boot应用程序提供创建短运行期微服务的功能


    对于选用springcloud,可参考该链接https://spring.io/projects/spring-boot 查看最新的springcloud版本 ,建议在接触的时候直接选最新的稳定版本,新版本中的 Bug 要少,且更稳定。


结语



    今天的分享就到这里,我是雷记,专注于分享关于开发编程相关的技术干货,如果今日的分享对您有帮助的话,还望不吝关注点赞,这对我很重要!如果各位在开发过程中遇到棘手问题,可以扫描下图二维码加入,和雷记与其他小伙伴一起探讨解决,让我们努力让每一个问题都得到解决!