微服务架构入门 - Go语言中文社区

微服务架构入门


第一章:微服务架构概述

1-1. 系统进化理论概述

在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统

集中式系统:

集中式系统也叫单体应用,就是把所有的程序、功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供服务

分布式系统

分布式系统就是把所有的程序、功能拆分成不同的子系统,部署在多台不同的服务器上,这些子系统相互协作共同对外提供服务,而对用户而言他并不知道后台是多个子系统和多台服务器在提供服务,在使用上和集中式系统一样

集中式系统跟分布式系统是相反的两个概念,他们的区别体现在“合”与“分” 

1-2. 系统进化理论背景

系统进化的背景与中国互联网用户规模庞大有巨大关系,中国互联网用户规模有 7.7 亿,庞大的用户访问量对系统的架构设计是巨大的挑战

产品或者网站初期,通常功能较少,用户量也不多,所以一般按照单体应用进行设计和开发,按照经典的 MVC 三层架构设计

随着业务的发展,应用功能的增加,访问用户的增多,传统的采用集中式系统进行开发的方式就不再适用了,因为在这种情况下,集中式系统就会逐步变得非常庞大,很多人维护这么一个系统,开发、测试、上线都会造成很大问题,比如代码冲突,代码重复,逻辑错综混乱,代码逻辑复杂度增加,响应新需求的速度降低,隐藏的风险增大

所以需要按照业务维度进行应用拆分,采用分布式开发,每个应用专职于做某一些方面的事情,比如将一个集中式系统拆分为用户服务、订单服务、产品服务、交易服务等,各个应用服务之间通过相互调用完成某一项业务功能

1-3. 什么是微服务架构

分布式强调系统的拆分,微服务也是强调系统的拆分,微服务架构属于分布式架构的范畴。并且到目前为止,微服务并没有一个统一的标准的定义,那么微服务究竟是什么?   

微服务一词源于 Martin Fowler(马丁.福勒)的名为 Microservices 的博文

简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于 HTTP RESTful API 进行通信协作

被拆分后的每一个小型服务都围绕着系统中的某一项业务功能进行构建, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等

由于各个独立的服务之间使用的是基于 HTTP 的 JSON 作为数据通信协作的基础,所以这些微服务可以使用不同的语言来开发

1-4. 微服务架构的优缺点

  1. 我们知道微服务架构是将系统中的不同功能模块拆分成多个不同的服务,这些服务进行独立地开发和部署,每个服务都运行在自己的进程内,这样每个服务的更新都不会影响其他服务的运行
  2. 由于每个服务是独立部署的,所以我们可以更准确地监控每个服务的资源消耗情况,进行性能容量的评估,通过压力测试,也很容易发现各个服务间的性能瓶颈所在
  3. 由于每个服务都是独立开发,项目的开发也比较方便,减少代码的冲突、代码的重复,逻辑处理流程也更加清晰,让后续的维护与扩展更加容易
  4. 微服务可以使用不同的编程语言进行开发

但是在系统架构领域关于微服务架构也有一些争论,有人倾向于在系统设计与开发中采用微服务架构实现软件系统的低耦合,被认为是系统架构的未来方向, Martin Fowler(马丁.福勒)也给微服务架构很高的评价

同时,对微服务架构也有人持反对观点,他们表示:

  1. 微服务架构增加了系统维护、部署的难度,导致一些功能模块或代码无法复用
  2. 随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度
  3. 随着微服务的增多,数据的一致性问题,服务之间的通信成本等都凸显了出来

所以在系统架构时也要提醒自己:不要为了微服务而微服务。

1-5. 为什么选择 Spring Cloud 构建微服务

微服务一词是 Martin Fowler(马丁.福勒)于 2014 年提出来的,近几年微服务架构的讨论非常火热,无数的架构师和开发者在实际项目中实践着微服务架构的设计理念,他们在微服务架构中针对不同应用场景出现的各种问题,也推出了很多解决方案和开源框架,其中我们国内的互联网企业也有一些著名的框架和方案

整个微服务架构是由大量的技术框架和方案构成,比如: 

服务基础开发

Spring MVC、Spring、SpringBoot

服务注册与发现

Netflix 的 Eureka、Apache 的 ZooKeeper等

服务调用

RPC 调用有阿里巴巴的 Dubbo

Rest 方式调用有当当网 Dubbo 基础上扩展的Dubbox、还有其他方式实现的 Rest,比如Ribbon、Feign

分布式配置管理

百度的Disconf、360的QConf、淘宝的Diamond、Netflix的Archaius等 

负载均衡

Ribbon

服务熔断

Hystrix

API 网关

Zuul

批量任务

当当网的 Elastic-Job、Linkedln 的 Azkaban

服务跟踪

京东的 Hydra、Twitter 的 Zipkin 等

但是在微服务架构上,几乎大部分的开源组件都只能解决某一个场景下的问题,所以这些实施微服务架构的公司也是整合来自不同公司或组织的诸多开源框架,并加入针对自身业务的一些改进,没有一个统一的架构方案

所以当我们准备实施微服务架构时,我们要整合各个公司或组织的开源软件,而且某些开源软件又有多种选择,这导致在做技术选型的初期,需要花费大量的时间进行预备研、分析和实验,这些方案的整合没有得到充分的测试,可能在实践中会遇到各种各样的问题

Spring Cloud 的出现,可以说是为微服务架构迎来一缕曙光,有 SpringCloud社区的巨大支持和技术保障,让我们实施微服务架构变得异常简单了起来,它不像我们之前所列举的框架那样,只是解决微服务中的某一个问题,而是一个解决微服务架构实施的综合性解决框架,它整合了诸多被广泛实践和证明有效的框架作为实施的基础组件,又在该体系基础上创建了一些非常优秀的边缘组件将它们很好地整合起来

加之 Spring Cloud 有其 Spring 的强大技术背景,极高的社区活跃度,也许未来 Spring Cloud 会成为微服务的标准技术解决方案


第二章:认识 Spring Cloud

2-1. Spring Cloud 是什么

  1. Spring Cloud 是一个一站式的开发分布式系统的框架,为开发者提供了一系列的构建分布式系统的工具集
  2. Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具(比如:配置管理,服务发现,断路器,智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等)
  3. 开发分布式系统都需要解决一系列共同关心的问题,而使用 Spring Cloud 可以快速地实现这些分布式开发共同关心的问题,并能方便地在任何分布式环境中部署与运行
  4. Spring Cloud 这个一站式地分布式开发框架,被近年来流行的“微服务”架构所大力推崇,成为目前进行微服务架构的优先选择工具
  5. Spring Cloud 基于 Spring Boot 框架构建微服务架构,学习 Spring Cloud 需要先学习 Spring Boot
  6. SpringCloud官网:http://spring.io 

2-2. Spring Cloud 的版本  

Spring Cloud 最早是从 2014 年推出的,在推出的前期更新迭代速度非常快, 频繁发布新版本,目前更趋于稳定,变化稍慢一些 

Spring Cloud 的版本并不是传统的使用数字的方式标识,而是使用诸如: Angel、Brixton、Camden......等伦敦的地名来命名版本,版本的先后顺序使用 字母表A-Z的先后来标识,,现在已经进入F版本

Spring Cloud与Spring Boot版本匹配关系

Finchley 

兼容 Spring Boot 2.0.x

不兼容 Spring Boot 1.5.x

Edgware

兼容Spring Boot 1.5.x

不兼容Spring Boot 2.0.x 

Dalston

兼容Spring Boot 1.5.x

不兼容Spring Boot 2.0.x 

Camden

兼容Spring Boot 1.4.x

 也兼容Spring Boot 1.5.x 

Brixton

兼容 Spring Boot 1.3.x

也兼容Spring Boot 1.4.x 

Angel

兼容 Spring Boot 1.2.x

Spring Cloud 并不是从 0 开始开发一整套微服务解决方案,而是集成各个开源软件,构成一整套的微服务解决方案,这其中有非常著名的 Netflix 公司的开源产品

Netflix 公司成立于 1997 年,是目前美国最大的版权视频交易网站。Netflix 公司在不断发展的过程中,也成为了一家云计算公司,并积极参与开源项目,Netflix OSS(Open Source)就是由 Netflix 公司主持开发的一套代码框架和库,github 地址:https://github.com/Netflix

Spring Cloud 所包含的众多组件中,Spring Cloud Netflix 就是其中一组不可忽视的组件,由 netflix 公司开发后又并入 Spring Cloud 大家庭

目前 Netflix 公司贡献的活跃项目包括:

  • spring-cloud-netflix-eureka  
  • spring-cloud-netflix-hystrix  
  • spring-cloud-netflix-stream
  • spring-cloud-netflix-archaius
  • spring-cloud-netflix-ribbon
  • spring-cloud-netflix-zuul

2-3. Spring Cloud 开发环境

  • SpringBoot 2.0.x
  • Spring Cloud Finchley RC2
  • Maven 3.5.3
  • JDK 1.8.152
  • IntelliJ IDEA

2-4. Spring Cloud 的整体架构

  • Service Provider: 暴露服务的服务提供方
  • Service Consumer:调用远程服务的服务消费方
  • EureKa Server: 服务注册中心和服务发现中心
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40794973/article/details/100580729
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-27 23:32:14
  • 阅读 ( 1818 )
  • 分类:架构

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢