互联网十万个为什么之什么是微服务
微服务(Microservices)是一种软件架构设计模式,它将应用程序分解为小型、自治的服务单元,这些服务单元可以独立部署、扩展和维护,其中每一个服务单元也都是一个微服务。
基于微服务形成的软件架构风格称为微服务架构(Microservices Architecture),它涵盖了使用微服务构建应用程序的全套原则、模式和最佳实践,关注如何将应用程序分解为多个微服务,以及这些服务如何交互、如何维护服务之间的独立性、如何实现服务的持续交付和部署等。在日常使用时,微服务又常被称为微服务架构,两者不区分使用。
微服务架构与云原生架构
微服务架构和云原生架构是现代软件开发中两个紧密相关且经常一起使用的概念,但它们关注的侧重点和应用的范围等有所不同。
-
云原生架构是一种基于云环境设计和构建应用程序的方法,它天然利用了云计算的优势,如弹性、可扩展性、自动化和敏捷性。Matt Stine 于2013年首次提出云原生(CloudNative)的概念,随着技术的不断演进,其定义也在不断地迭代和更新,云原生可以概括为四个要素:微服务、容器、DevOps 和持续交付。
云原生架构的主要目的是如何最大化地利用云平台的特性来实现高效的资源利用、快速迭代和自动化运维。
-
微服务架构的目的则是为了提高应用程序的模块化,使得开发、部署和扩展可以更加独立和灵活。
总结来看,微服务架构和云原生架构是相辅相成的。微服务架构可以被视为云原生架构的基石,为云原生应用提供了架构设计、分布式部署、敏捷开发等方案,以适应云计算平台的动态特性,为更高层次的云原生架构打下坚实的基础,而云原生技术则提供了实施微服务架构的最佳实践和平台支持。
微服务架构的演进
微服务架构主要是为了解决在应用软件架构时不断出现的业务挑战而产生的。
- 从最初传统的单体架构,它将应用程序作为一个整体部署和运行,可扩展性、容错性、可靠性等都有很大限制,而且单体架构的应用通常具有大量的代码和复杂的代码结构,导致维护成本极高。
- 随着业务架构的不断演进,后续有人提出拆分单体架构,解耦代码,形成一个个独立的功能单元,每个功能单元可以远程服务的方式提供(比如 Web 服务,通过80端口向用户提供网页访问服务),即面向服务架构(Service-oriented Architecture,简称 SOA)。虽然SOA能够解决单体架构的一些问题,但是也存在一些缺陷,比如服务相互依赖,性能差和部署运维复杂等问题。
- 后来越来越多的应用部署在云端,软件应用需要满足快速迭代、高并发访问、业务逻辑更加复杂等业务需求,微服务架构应运而生。
微服务架构按照业务功能划分服务,服务之间调用采用轻量级的通信框架,具备以下优势:
- 降低应用复杂度:当一个系统变得庞大且复杂时,微服务架构可以将系统拆分成多个小服务,每个服务专注于一个特定的业务领域,简化了应用的复杂性,提高了开发和维护的效率。比如应用在电子商务平台。
- 高并发处理:在需要处理大量并发请求的场景下,通过微服务架构,将系统拆分成多个独立的服务,每个服务独立扩展和部署,从而实现更好的并发处理能力。比如应用在社交媒体应用。
- 快速迭代和持续交付:微服务架构可以将系统拆分成多个小的服务,每个服务可以独立地进行开发、测试和部署。因此可以实现快速迭代和持续交付,不同的团队可以并行开发和部署各自的服务,允许每个服务使用适合自身需求的最佳技术栈,加快了软件发布的速度,提高了系统的灵活性和可扩展性。比如应用在游戏产业。
- 可伸缩性和弹性:微服务架构具有良好的可伸缩性,可以根据负载的变化,对系统中某些服务做水平扩展或收缩,可以更好地适应流量峰值和节省资源。比如应用在流媒体服务。
微服务架构的典型组件及实践选型
微服务架构的典型组件概览如下图。
- 业务入口。从终端设备(例如IoT、PC、Moblie等)通过网关入口访问后端微服务,网关对南北向流量提供服务路由到对应的后端服务中。
- 微服务的业务处理链路。后端微服务通常会根据业务领域或功能进行划分,每个微服务负责一部分独立的业务逻辑。为了完成更复杂的业务流程,微服务之间可能会存在依赖关系。从服务间通信的交互方式可以分为同步阻塞式和异步非阻塞式调用,主要的实现方式包括:同步RPC调用和异步消息调用。所有的交互调用本质上都是数据的交换,数据最终会存储到各类存储介质中。在服务交互过程中需要特定的组件来保证数据一致性,对流量精细化管理以及提供强大的运维和可观测能力。
- 微服务的OPS链路。利用微服务运维过程中的一系列操作和工具链,开发运维团队可以构建出高效、稳定和可维护的微服务系统。通过自动化、监控和智能化的运维治理实践,可以大幅降低系统复杂性带来的挑战。
在实际应用时,您需要根据具体业务选择合适的组件构建应用架构。