????这里是【秒懂·云原生】,关注我学习云原生不迷路 ????如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位????点赞????评论收藏⭐️
????专栏介绍
【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。
????本期介绍
主要介绍什么是微服务、微服务的发展史、微服务与云原生的关系 @[TOC]
????微服务架构介绍
近年来,微服务架构一直是互联网技术圈的热点之一,越来越多的互联网应用都采用了微服务架构作为系统构建的基础,很多新技术和理念如Docker、Kubernetes、DevOps、持续交付、Service Mesh等也都在关注、支持和跟随微服务架构的发展。
????微服务架构的发展
从单体应用架构发展到SOA架构,再到微服务架构, 应用架构经历了多年的不断演进。微服务架构不是凭空产生的,而是技术发展的必然结果,分布式云平台的应用环境使得微服务代替单体应用成为互联网大型系统的架构选择。目前,虽然微服务架构还没有公认的技术标准和规范草案,但业界已经有了一些很有影响力的开源微服务架构解决方案,在进行微服务化开发或改造时可以进行相应的参考。
????单体应用架构
与微服务架构对比的是传统的单体应用。Web应用程序发展的早期,大部分Web工程是将所有的功能模块打包到一起部署和运行,例如Java应用程序打包为一个war包,其他语言(Ruby、Python或者C++)编写的应用程序也有类似的做法。单体应用的实现架构类似于图中的电影售票系统。
这个电影售票系统采用分层架构,按照调用顺序,从上到下为表示层、业务层、数据访问(DAO)层、DB层。表示层负责用户体验;业务层负责业务逻辑,包括电影、订单和用户三个模块;数据访问层负责DB层的数据存取,实现增删改查的功能。业务层定义了应用的业务逻辑,是整个应用的核心。在单体应用中,所有这些模块都集成在一起,这样的系统架构就叫做单体应用架构,或称为巨石型应用架构。单体应用是最早的应用形态,开发和部署都很简单。在中小型项目中使用单体应用架构,能体现出其优势,且单体应用的整体性能主要依赖于硬件资源和逻辑代码实现,应用架构自身不需要特别关注。
????SOA(面向服务架构)
????1、什么是SOA
面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型。
????2、为什么要使用SOA
SOA旨在将单个应用程序功能彼此分开,以便这些功能可以单独用作单个的应用程序功能或“组件”。这些组件可以用于在企业内部创建各种其他的应用程序,或者如有需要,对外向合作伙伴公开,以便用于合作伙伴的应用
????3、SOA的工作原理
SOA架构中有三种角色:
服务提供者: 发布自己的服务,并且对服务请求进行响应。 服务注册中心: 注册已经发布的web service,对其进行分类,并提供搜索服务。 服务请求者: 利用服务中心查找所需要的服务,然后使用该服务。
????4、面向服务架构的特点
1) 多个单体服务
2)服务间通过ESB间接通讯
缺点也显而易见:
1)仅垂直方向拆分,每个服务还是单体;
2)引入了ESB庞然大物;
????微服务架构
微服务最早是由Martin Fowler与James Lewis于2014年共同提出,需要了解细节的读者可以阅览https://martinfowler.com/articles/microservices.html。其实Martin先生并没有给出明确的微服务定义,根据其描述,微服务的定义可以概括如下︰微服务架构是一种使用一系列粒度较小的服务来开发单个应用的方式;每个服务运行在自己的进程中;服务间采用轻量级的方式进行通信(通常是HTTP API)﹔这些服务是基于业务逻辑和范围,通过自动化部署的机制来独立部署的,并且服务的集中管理应该是最低限度的,即每个服务可以采用不同的编程语言编写,使用不同的数据存储技术。如今,微服务架构已经不是一个新概念了,很多业界前沿互联网公司的实践表明,微服务是一种渐进式的演进架构,是企业应对业务复杂性,支持大规模持续创新行之有效的架构手段。
????1、组成
微服务架构是一种比较复杂、内涵丰富的架构模式,它包含很多支撑"微"服务的具体组件和概念,其中一些常用的组件及其概念如下:
- · 服务注册与发现: 服务提供方将己方调用地址注册到服务注册中心,让服务调用方能够方便地找到自己;服务调用方从服务注册中心找到自己需要调用的服务的地址。
- ·负载均衡: 服务提供方一般以多实例的形式提供服务,负载均衡功能能够让服务调用方连接到合适的服务节点。并且,服务节点选择的过程对服务调用方来说是透明的。
- ·服务网关: 服务网关是服务调用的唯一入口,可以在这个组件中实现用户鉴权、动态路由、灰度发布、A/B测试、负载限流等功能。
- ·配置中心: 将本地化的配置信息(Properties、XML、YAML等形式)注册到配置中心,实现程序包在开发、测试、生产环境中的无差别性,方便程序包的迁移。
- ·集成框架: 微服务组件都以职责单一的程序包对外提供服务,集成框架以配置的形式将所有微服务组件(特别是管理端组件)集成到统一的界面框架下,让用户能够在统一的界面中使用系统。
- ·调用链监控: 记录完成一次请求的先后衔接和调用关系,并将这种串行或并行的调用关系展示出来。在系统出错时,可以方便地找到出错点。
- ·支撑平台: 系统微服务化后,各个业务模块经过拆分变得更加细化,系统的部署、运维、监控等都比单体应用架构更加复杂,这就需要将大部分的工作自动化。现在,Docker等工具可以给微服务架构的部署带来较多的便利,例如持续集成、蓝绿发布、健康检查、性能健康等等。如果没有合适的支撑平台或工具,微服务架构就无法发挥它最大的功效。
????2、优点
微服务架构模式有很多优势可以有效解决单体应用扩大之后出现的大部分问题。
- 首先, 通过将巨大单体式应用分解为多个服务的方法解决了复杂性问题。在功能不变的情况下,应用分解为多个可管理的模块或服务。每个服务都有一个用RPC或者消息驱动API定义清楚的边界。微服务架构模式为采用单体式编码方式很难实现的功能提供了模块化的解决方案。由此,单个服务变得很容易开发、理解和维护。
- 其次, 微服务架构模式使得团队并行开发得以推进,每个服务都可以由专门开发团队来开发。不同团队的开发者可以*选择开发技术,提供API服务。这种*意味着开发者不需要*使用之前采用的过时技术,他们可以选择最新的技术。甚至于,因为服务都是相对简单的,即使用新技术重写以前的代码也不是很困难的事情。
- 再次, 微服务架构模式中每个微服务独立都是部署的。理想情况下,开发者不需要协调其他服务部署对本服务的影响。这种改变可以加快部署速度。UI团队可以采用AB测试,快速地部署变化。微服务架构模式使得持续化部署成为可能。
- 最后, 微服务架构模式使得每个服务易于独立扩展。
????微服务架构的流派
常见的微服务架构方案有四种,分别是ZeroC lceGrid、基于消息队列、DockerSwarm和Spring Cloud。下面分别介绍这四种方案。
????1、ZeroC lceGrid
- ZeroC lceGrid是基于RPC框架lce发展而来的一种微服务架构,lce不仅仅是一个RPC框架,它还为网络应用程序提供了一些补充服务。lce是一个全面的RPC框架,支持C++、C#、Java、JavaScript、Python等语言。IceGrid具有定位、部署和管理lce服务器的功能,具有良好的性能与分布式能力,下面具体介绍IceGrid的功能。
- lce的DNS。DNS用于将域名信息映射到具体的IP地址,通过域名得到该域名对应的IP地址的过程叫做域名解析。lceGrid为lce提供了类似的服务∶它允许lce客户端通过简单的名称来查找Ice对象。lce客户端可以通过提供此对象的完整寻址信息来访问服务器中的Ice对象,例如chatRoom1:ssl-h demo.zeroc.com-p10000。这样的硬编码虽然很简单,但缺乏灵活性。因为需要为lce服务器(本例中端口为10000)选择一个固定的端口号,因此将Ice服务器移到不同的主机上需要更新其客户端。
- lceGrid提供了对这种寻址信息使用符号名称的选项,例如chatRoom1@chatRoomHost。当lce客户端尝试访问chatRoomHost中的对象时,它会要求lceGrid提供与此符号名称关联的实际地址。例如,lceGrid返回-hdemo.zeroc.com-p 65431,客户端就可以直接并透明地连接到服务器。lceGrid架构如图
????2、基于消息队列
在微服务架构的定义中讲到,各个微服务之间使用“轻量级"的通信机制。所谓轻量级,是指通信协议与语言无关、与平台无关。微服务之间的通信方式有两种:同步和异步。同步方式有RPC,REST等;除了标准的基于同步通信方式的微服务架构外,还有基于消息队列异步方式通信的微服务架构。
????3、Docker Swarm
Swarm项目是Docker公司发布的三剑客中的一员,用来提供容器集群服务,目的是更好地帮助用户管理多个Docker Engine,方便用户使用。通过把多个Docker Engine聚集在一起,形成一个大的Docker Engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。
????4、Spring Cloud
- Spring Cloud是一个基于SpringBoot实现的云应用开发工具,是一系列框架的集合,当添加这些工具库到应用后会增强应用的行为。SpringBoot秉持约定优于配置的思想,因此可以利用这些组件基本的默认行为来快速入门,并在需要的时候可以配置或扩展,以创建自定义解决方案。
- Spring Cloud利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以基于Spring Boot组件进行开发,做到一键启动和部署。Spring Cloud并没有重复制造*,它只是将目前比较成熟、经得起实际考验、优秀的开源服务框架组合起来,通过Spring Boot进行封装,屏蔽掉复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
以下为Spring Cloud的核心功能:
- 分布式/版本化配置
- 服务注册和发现
- 服务路由
- 服务和服务之间的调用
- 负载均衡
- 断路器
- 分布式消息传递
还有很多基础的功能没有列出,每个功能对应Spring Cloud中的一个组件,包括Spring Cloud Config、Spring Cloud Netflix (Eureka、Hystrix、Zuul、Archaius...) . Spring Cloud Bus等组件。
????云原生与微服务
提及云原生,首先需要了解一下CNCF,即云原生计算基金会,2015年由谷歌牵头成立,基金会成员目前已有一百多个企业与机构,包括亚马逊、微软、思科等巨头。目前CNCF所托管的应用已达14个,知名的项目有Kubernetes、Prometheus、Envoy等。
CNCF宪章中给出了云原生应用的三大特征,概括如下:
- 容器化封装: 以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。
- 动态管理: 通过集中式的编排调度系统来动态管理和调度。
- 面向微服务: 明确服务间的依赖,互相解耦。
云原生包含了一组应用的模式,用于帮助企业快速、持续、可靠、规模化地交付业务软件。如图所示,云原生由微服务架构、DevOps和以容器为代表的敏捷基础架构组成。