什么是微服务
简单来说,微服务就是一种将一个单一应用程序拆分为一组小型服务的方法,拆分完成后,每一个服务都运行在独立的进程中,服务于服务之间采用轻量级的通信机制来进行沟通(Spring Cloud 中采用基于HTTP 的 RESTful API)。
每一个服务,都是围绕具体的业务进行构建,例如一个电商系统,订单服务、支付服务、物流服务、会员服务等等,这些拆分后的应用都是独立的应用,都可以独立的部署到生产环境中。就是在采用微服务之后,我们的项目不再拘泥于一种语言,可以 Java、Go、Python、PHP 等等,混合使用,这在传统的应用开发中,是无法想象的。而使用了微服务之后,我们可以根据业务上下文来选择合适的语言和构建工具进行构建。
微服务可以理解为是 SOA (面向服务的体系结构) 的一个传承,一个本质的区别是微服务是一个真正分布式、去中心化的,微服务的拆分比 SOA 更加彻底。
微服务的优势
-
复杂度可控
-
独立部署
-
技术选型灵活
-
较好的容错性
-
较强的可扩展性
微服务的设计思想
微服务架构的风格
将应用程序构建为服务套件。除了服务可独立部署和可扩展之外,每个服务还提供了牢固的模块边界,甚至允许使用不同的编程语言编写不同的服务。他们也可以由不同的团队管理。
微服务架构的特征
1、通过服务进行组件化
-
这里组件的定义是:可以独立替换和升级的软件单元。
-
使用服务作为组件(而不是库)的主要原因之一是服务是可独立部署的。
-
将服务用作组件的另一个结果是更明确的组件接口。
2、产品不是项目
微服务的支持者倾向于团队应该在产品的整个生命周期内拥有产品的想法。这样做的一个共同灵感是亚马逊的“构建,运行”概念,其中开发团队对生产中的软件负全部责任。
3、分散数据管理
微服务更喜欢让每个服务管理自己的数据库,或者是同一数据库技术的不同实例,或者是完全不同的数据库系统,一种称为 Polyglot Persistence 的方法。
4、失败设计
-
将服务用作组件的结果是,需要对应用程序进行设计,以便它们可以容忍服务故障。
-
由于服务随时可能发生故障,因此重要的是能够迅速检测到故障,并在可能的情况下自动恢复服务。
-
微服务团队希望看到每项服务的复杂监视和日志记录设置,例如显示上/下状态的仪表板以及各种与业务和业务相关的指标。
5、进化设计
-
组件的关键特性是独立替换和可升级性的概念
-
使用微服务时,您只需要重新部署您修改过的服务即可。这样可以简化并加快发布过程。缺点是您必须担心一项服务的更改会破坏其用户。传统的集成方法是尝试使用版本控制来解决此问题,但是微服务领域的首选是仅使用版本控制作为最后的手段。通过设计服务以尽可能地容忍其供应商的变更,我们可以避免很多版本控制。
什么是 Spring Cloud
Spring Cloud 是一系列框架的集合,Spring Cloud 内部包含了许多框架,这些框架互相协作,共同来构建分布式系统。利用这些组件,可以非常方便的构建一个分布式系统。
Spring Cloud 与微服务的关系
Spring Cloud 可以理解为微服务这种思想在 Java 领域的一个具体落地。Spring Cloud 在发展之初,就借鉴了微服务的思想,同时结合 Spring Boot,Spring Cloud 提供了组件的一键式启动和部署的能力,极大的简化了微服务架构的落地。
Spring Cloud 这种框架,从设计之初,就充分考虑了分布式架构演化所需要的功能,例如服务注册、配置中心、消息总线以及负载均衡等。这些功能都是以可插拔的形式提供出来的,这样,在分布式系统不断演化的过程中,我们的 Spring Cloud 也可以非常方便的进化。
Spring Cloud 的特征
Spring Cloud专注于为典型的用例和扩展机制(包括其他用例)提供良好的开箱即用体验。
-
分布式/版本化配置
-
服务注册和发现
-
路由
-
服务之间的调用
-
负载均衡
-
断路器
-
全局锁
-
领导选举和集群状态
-
分布式消息传递
Spring Cloud 版本命名
不同于其他的框架,Spring Cloud 版本名称是通过 A(Angel)、B(Brixton)、C(Camden)、D(Dalston)、E(Edgware)、F(Finchley)。。 这样来明明的,这些名字使用了伦敦地铁站的名字,目前最新版是 H (Hoxton)版。
Spring Cloud 包含的组件
下面的常用:
-
Spring Cloud Netflix,这个组件,在 Spring Cloud 成立之初,立下了汗马功劳。
-
Spring Cloud Config,分布式配置中心,利用 Git/Svn 来集中管理项目的配置文件。
-
Spring Cloud Bus,消息总线,可以构建消息驱动的微服务,也可以用来做一些状态管理等。
-
Spring Cloud Consul,服务注册发现
-
Spring Cloud Stream,基于 Redis、RabbitMQ、Kafka 实现的消息微服务
-
Spring Cloud OpenFeign,提供 OpenFeign 集成到 Spring Boot 应用中的方式,主要解决微服务之间的调用问题。
-
Spring Cloud Gateway,Spring Cloud 官方推出的网关服务。
下面的不常用:
-
Spring Cloud Cloudfoundry,利用 Cloudfoundry 集成我们的应用程序。
-
Spring Cloud Security,在 Zuul 代理中,为 OAuth2 客户端认证提供支持。
-
Spring Cloud AWS ,快速集成亚马逊云服务。
-
Spring Cloud Contract,一个消费者驱动的、面向 Java 的契约框架。
-
Spring Cloud Zookeeper,基于 Apache Zookeeper 的服务注册和发现。
-
Spring Cloud Data Flow,在一个结构化的平台上,组成数据微服务。
-
Spring Cloud Kubernetes,Spring Cloud 提供的针对 Kubernetes 的支持
-
Spring Cloud Function
-
Spring Cloud Task,短生命周期的微服务。
Spring Cloud 和 Spring Boot 版本关系
Spring Cloud | Spring Boot |
---|---|
Hoxton | 2.2.x |
Greenwich | 2.1.x |
Finchley | 2.0.x |
Edgware | 1.5.x |
Dalston | 1.5.x |
Spring Cloud 和 Spring Boot 的关系
1、在 IOC 和 AOP 的基础上,构造出来的 Spring 框架,然后在 Spring 的基础上,构造出来 Spring Boot ,最后在 Spring Boot 的基础上,使用 Spring Cloud 。
2、Spring Boot 只是专注于快速开发单个的微服务,而 Spring Cloud 关注的是全局的微服务和协调整体服务之间的治理。
3、Spring Cloud 从更大的层面上去协调各个不同的 Spring Boot 之间的一个工作的关系,这是 Spring Cloud 做的一个事情。
4、Spring Boot 本身可以离开 Spring Cloud 独立开发项目,但是 Spring Cloud 是无法离开 Spring Boot 的。
参考资源:https://martinfowler.com/articles/microservices.html
每天学习一点点,每天进步一点点。