微服务简介
随着互联网的技术不断发展,用户量不断增加,一个程序需要经受的并发量也越来越大,所以那些原来的传统架构已经无法抗住强大的并发量,所以微服务的概念流行开来,他将原来传统的集中式项目拆分出来,将一个项目模块,设置是一个业务场景都可以拆分成一个一个的微服务,将这些服务微分后,来实现对并发量承受;
微服务架构
微服务架构是一种架构模式,它提倡将单一的应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值,每个服务运行在气独立的进程中,服务与服务之间采用轻量级的通信机制互相协作(通常基于HTTP协议的RESTful api)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生成环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行开发;
1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可)
2)独立的进程(java的tomcat,nodejs等)
3)轻量级的通信(不是soap,是http协议)
4)基于业务能力(类似用户服务,商品服务等等)
5)独立部署(迭代速度快)
6)无集中式管理(无须统一技术栈,可以根据不同的服务或者团队进行灵活选择)
微服务技术维度
在了解微服务的架构特点后,我们需要了解,一个微服务架构需要具有以下的技术
- 服务注册与发现:每个微服务可以发现其他微服务的地址信息
- 服务调用: 每个微服务可以调用其他微服务的api
- 服务熔断: 在调用时候,被调用方宕机后,将其熔断,保护自己
- 负载均衡: 微服务都是一个集群,所以当一个服务调用其他服务集群时候,需要负载均衡的调用其他服务
- 服务降级: 也是出现在服务调用的场景,在被调用方宕机后,立马返回一个失败页面,或者其他的页面情况
- 服务消息队列: 利用消息队列,将同步调用,该为异步来提升程序效率
- 配置中心管理: 每个微服务的配置 都配置在项目中的话,那么后面需要变更的话,就会比较麻烦,所以如果将其统一部署在一个配置中心中,微服务拉取配置信息的话,就会比较方便了
- 服务网关: 在微服务架构中,服务是不可以暴露自己的地址信息的,不然容易被攻击,所以这个时候,我们需要一个网关,对外提供访问
- 服务监控: 微服务一般都是集群,所以一个项目微服务比较多的时候,就需要一个来监控每个服务的健康情况
- 全链路追踪: 微服务一般都是集群,所以一个项目微服务比较多的时候,需要一个来追踪每个微服务的情况
- 自动化构建部署: 微服务都是单个的项目,所以用传统的部署的话,是比较麻烦的,所以需要一个工具,来实现自动部署
- 服务定时任务调度: 微服务中有的业务场景会实现定时任务;
微服务实现
在我们上面提到过微服务的技术维度后,那么看上去要实现这些是比较麻烦的,确实比较麻烦,但是我们的spring官方,退出了springcloud来实现这些功能;通过一个一个的组件让这些的实现比较简单,我们需要做的是选择合适的组件即可;
springcloud目前组件介绍:
Netflix公司开源的组件
这是在springcloud发布后的推出的第一套官方组件,是比较方便使用的一套组件
- 服务发现——Netflix Eureka
- 客服端负载均衡——Netflix Ribbon
- 断路器——Netflix Hystrix
- 服务网关——Netflix Zuul
- 分布式配置——Spring Cloud Config
这套组件的使用与实现后续文章中会详细提到实现,这是一套很火爆的组件实现,简单的完成一个复杂的微服务架构,但是可惜 Netflix 已经开始停止对其开源更新了,所以现在很多公司开始使用其他的组件
springcloud alibaba
这是阿里基于springcloud开发的一套组件,比较特殊的是,这套组件中,服务间的相互调用的采用是修改后的Openfegin
- Sentinel 阿里巴巴开源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- Nacos 阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- RocketMQ Apache RocketMQ™ 基于 Java 的高性能、高吞吐量的分布式消息和流计算平台。
- Open fegin 远程调用
- Seata 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案
这套组件在Netflix 公司停更后,受到很多大公司的追捧使用,也是一套不错的开源组件,注意dubbo的使用是需要配置 zookeeper
spring官方组件
在Netflix 停更后,官方也退出了一些组件来代替
- consul 服务注册中心,来代替原有的Eureka
- gateway 网关 来代替原有的Zuul
- fegin 远程调用
- hystrix 服务熔断
- ribbon 负载均衡
其他
当然这些是目前我在项目中常用的一些组件,一些比较大的公司会自身开发微服务组件的,但是以上这些都是开源中比较常用的