微服务:认识篇

本文将从时代背景、发展过程、微服务特点出发,对微服务整体构建一个大致的理解:

时代背景

  1. 解决复杂性的需求——传统的单体应用架构将所有的功能和模块集中在一个单独的应用程序中,导致应用程序开发、部署和维护变得困难,并且不利于快速迭代和扩展。

  2. 高可用性和扩展性的需求(如高并发和大规模用户访问)——用户对于应用程序的高可用性和即时响应的期望越来越高,而单体应用架构难以实现高可用性和弹性扩展(一个组件的故障可能会影响整个应用程序的可用性,并且扩展整个应用程序可能会面临技术和性能上的限制)。

  3. 快速迭代和团队协作的需求(可包含于1.1)——传统的单体应用架构可能不利于快速迭代,因为一个小的更改可能需要重新构建整个应用程序并进行全面的测试和部署,而且微服务为人员的分工提供了便捷,可以更好地支持快速迭代和敏捷开发。

    来自《凤凰架构》:譬如,制约软件质量与业务能力提升的最大因素是人而非硬件。多数企业即使有钱也很难招到大量的靠谱的开发者。此时,无论是引入外包团队,抑或是让少量技术专家带着大量普通水平的开发者去共同完成一个大型系统就成为了必然的选择。在单体架构下,没有什么有效阻断错误传播的手段,系统中“整体”与“部分”的关系没有物理的划分,系统质量只能靠研发与项目管理措施来尽可能地保障,少量的技术专家很难阻止大量螺丝钉式的程序员或者不熟悉原有技术架构的外包人员在某个不起眼的地方犯错并产生全局性的影响,并不容易做出整体可靠的大型系统。

  4. 新技术云计算分布式架构的支持——云计算的兴起为分布式架构提供了理想的基础设施。云计算提供了弹性的计算资源和可扩展的基础设施,使得构建分布式系统和服务变得更加容易。

发展过程:

  1. 早期阶段:
    1. SOA的出现:在这个阶段,服务导向架构(SOA)的概念开始引起关注。SOA提倡将应用程序拆分为一组可重用的服务,通过标准化的接口进行通信。这为后来微服务架构的发展奠定了基础。
  2. 兴起阶段:
    1. 架构模式的探索:微服务架构作为一种新兴的架构风格(更灵活、可维护和可扩展)开始受到关注。
    2. 云计算和虚拟化技术的发展:云计算和虚拟化技术的兴起为微服务架构的发展提供了理想的基础设施。这些技术为构建分布式系统和部署微服务提供了更好的支持。
  3. 推广阶段:
    1. 微服务的推广:微服务架构开始广泛被采用并得到推广。越来越多的组织开始采用微服务架构,以应对复杂性增加、快速迭代和团队协作的挑战。
    2. 开源和商业化工具的涌现:随着微服务的普及,大量的开源和商业化工具、框架和平台涌现,用于辅助微服务架构的开发、部署和管理。这些工具提供了服务注册与发现、负载均衡、容器化和编排、监控和日志等功能,为微服务架构提供了更好的支持。
    3. 实践经验的积累:随着实际应用的增多,对于微服务架构的实践经验也在不断积累。开发人员和组织逐渐摸索出一些最佳实践、设计模式和解决方案,以应对微服务架构中的挑战和复杂性。
  4. 演进阶段(将来):微服务架构是一个动态的领域,仍在不断演进和发展中。它的发展历史仍在进行中,将随着技术的进步和业务需求的变化而不断推进。因此,微服务架构的未来发展将会受到更多新技术、实践经验和业务需求的影响。

微服务特点:

不同点 微服务架构 单体架构
团队规模 微服务架构可以将传统模式下的单个应用拆分为多个独立的服务,每个微服务都可以单独开发、部署和维护。每个服务从设计、开发到维护所需的团队规模小,团队管理成本小。 单体架构的应用程序通常需要一个大型团队,围绕一个庞大的应用程序工作,团队管理的成本大。
项目结构(部署方式) 微服务架构中每个服务都可以独立开发、部署和维护,也可以独立于其他服务进行扩展。如果部署得当,基于微服务的架构可以帮助企业提高应用程序的部署效率。 采用单体架构的应用程序的每一次功能更改或 bug 修复都必须对整个应用程序重新进行部署(所有的业务逻辑都集中在同一个工程中)。
开发模式 在采用微服务架构的应用程序中,不同模块可以使用不同的技术或语言进行开发,开发模式更加灵活 在采用单体架构的应用程序中,所有模块使用的技术和语言必须相同,开发模式受限。
故障隔离 在微服务架构中,故障被隔离在单个服务中,避免系统的整体崩溃。 在单体架构中,当一个组件出现故障时,故障很可能会在进程中蔓延,导致系统全局不可用。

优点:

  • 松耦合:微服务架构通过将应用程序拆分为多个独立的服务来实现松耦合。每个服务都是自治的,可以独立开发、部署、扩展和维护。这种松耦合性使团队能够独立开发和部署不同的服务,降低了开发的复杂性,并且更容易实现敏捷开发和持续交付。
  • 可伸缩性(扩展性):由于微服务架构中的每个服务都是独立的,可以根据需求对每个服务进行单独的扩展。这意味着可以根据流量和负载的变化,只需对需要扩展的服务进行扩展,而无需扩展整个应用程序。这种可伸缩性使系统能够更好地应对高流量和大规模的并发请求。
  • 技术多样性:微服务架构允许使用不同的编程语言、框架和技术栈来构建不同的服务。这使得团队可以选择最适合其需求和技术能力的工具和技术,从而实现更好的灵活性和创新性。

缺点:

  • 分布式系统复杂性:微服务架构引入了分布式系统的复杂性。服务之间的通信和协调需要考虑网络延迟、服务发现、故障处理等因素。这增加了系统的复杂性,并需要适当的工具和技术来管理分布式环境。
  • 运维复杂性:由于微服务架构中存在大量的服务实例和组件,运维和监控这些服务变得更加复杂。需要适当的工具和流程来管理和监控每个服务的性能、可用性和健康状态。
  • 分布式事务管理:微服务架构中的服务可能需要进行跨服务的事务操作。由于每个服务都是自治的,保持一致的事务管理变得复杂。需要使用一些机制(如分布式事务或补偿性事务)来管理分布式事务的一致性和可靠性。
    此外,微服务还有其他一些特点,比如可以与容器(Docker)配合使用,可以进行链路追踪等,但是我们主要的目的,还是为了解决复杂性(实现独立开发、部署和维护,保证敏捷开发和持续交付)和提高可用性和扩展性(故障隔离、对服务进行扩展、可使用多种技术和语言),所以仅列出上述优缺点和特点。

与SOA的区别:

微服务 VS SOA:

  • 相同:面向服务;
  • 不同:强约束 VS 软指导;强一致 VS 自由;规范标准 VS 实践标准。
    微服务丢掉了 SOA 的强标准,换来了自由。自由的代价是工程师需根据业务情况选择适合的技术,过程中可能会犯错。微服务带来自由,也带来迷茫。微服务只是一种思想,它丢掉了 SOA 的包袱,却没带来什么具体的东西。RPC 等分布式的问题重新出现,交由社区解决;一时间,百花齐放,百家争鸣。

引自《凤凰架构》:
SOA 在 21 世纪最初的十年里曾经盛行一时,有 IBM 等一众行业巨头厂商为其呐喊冲锋,吸引了不少软件开发商、尤其是企业级软件的开发商的跟随,最终却还是偃旗息鼓,沉寂了下去。在稍后的远程服务调用一节,笔者会提到 SOAP 协议被逐渐边缘化的本质原因:过于严格的规范定义带来过度的复杂性。而构建在 SOAP 基础之上的 ESB、BPM、SCA、SDO 等诸多上层建筑,进一步加剧了这种复杂性。开发信息系统毕竟不是作八股文章,过于精密的流程和理论也需要懂得复杂概念的专业人员才能够驾驭。SOA 诞生的那一天起,就已经注定了它只能是少数系统阳春白雪式的精致奢侈品,它可以实现多个异构大型系统之间的复杂集成交互,却很难作为一种具有广泛普适性的软件架构风格来推广。SOA 最终没有获得成功的致命伤与当年的EJB (opens new window)如出一辙,尽管有 Sun Microsystems 和 IBM 等一众巨头在背后力挺,EJB 仍然败于以 Spring、Hibernate 为代表的“草根框架”,可见一旦脱离人民群众,终究会淹没在群众的海洋之中,连信息技术也不曾例外过。


微服务:认识篇
http://shoumingchilun.github.io/2024/03/13/backend/microservice/microservice-introduce/
作者
寿命齿轮
发布于
2024年3月13日
许可协议