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