当前位置: 首页 > article >正文

14天学习微服务-->第1天:微服务架构入门

一、微服务架构概述

微服务架构是一种将复杂应用程序分解为一组小型、独立服务的架构风格。每个服务围绕特定的业务功能构建,并且可以独立部署和扩展。这种架构风格在过去十年中迅速发展,成为构建现代分布式系统的首选方式之一。

二、微服务架构与单体架构的区别
特性微服务架构单体架构
服务划分按业务功能拆分为多个独立服务所有功能集成在一个大型应用程序中
技术栈可以使用不同的技术栈开发不同服务通常使用统一的技术栈
部署方式独立部署,互不影响整体部署,更新复杂
扩展性按需扩展特定服务需要整体扩展
故障隔离单个服务故障不影响其他服务单点故障可能导致整个系统崩溃
开发效率多团队并行开发,效率高大型团队协作复杂,效率低
三、微服务架构的优缺点

优点:

  1. 高可用性:服务之间相互独立,单个服务的故障不会导致整个系统崩溃。

  2. 可扩展性:可以根据业务需求独立扩展每个服务,灵活应对流量高峰。

  3. 技术多样性:允许团队根据需求选择最适合的技术栈。

  4. 快速迭代:独立部署和服务的自治性使得团队可以快速迭代和发布新功能。

缺点:

  1. 复杂性增加:分布式系统带来了网络延迟、数据一致性等问题。

  2. 运维成本高:需要管理多个服务,增加了运维的复杂性和成本。

  3. 分布式事务管理:跨服务的事务管理较为复杂,需要额外的技术支持。

四、微服务架构如何帮助企业实现高可用性、可扩展性和灵活性
  1. 高可用性:通过服务的独立部署和隔离,即使部分服务出现故障,其他服务仍可正常运行,从而提高系统的整体可用性。

  2. 可扩展性:根据业务负载动态扩展服务实例,按需分配资源,避免资源浪费。

  3. 灵活性:支持快速迭代和独立部署,团队可以更快地响应市场需求,推出新功能。

五、Spring Cloud入门

Spring Cloud 是基于 Spring Boot 的微服务框架,提供了服务注册与发现、配置中心、断路器、网关等功能,帮助开发者快速构建微服务架构。

核心组件及其功能:

  1. 服务注册与发现(Eureka)

    • 服务提供者在启动时向注册中心注册服务信息。

    • 服务消费者从注册中心获取服务列表,动态调用服务。

    示例代码:

    // 服务提供者:添加依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    // 启动类
    @SpringBootApplication
    @EnableDiscoveryClient
    public class ServiceProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServiceProviderApplication.class, args);
        }
    }
    
    // application.yml
    server:
      port: 8001
    spring:
      application:
        name: service-provider
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
  2. 配置中心(Config Server)

    • 集中管理配置信息,支持动态刷新配置。

    示例代码:

    // 配置中心:添加依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    
    // 启动类
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ConfigServerApplication.class, args);
        }
    }
    
    // application.yml
    server:
      port: 8888
    spring:
      application:
        name: config-server
      cloud:
        config:
          server:
            git:
              uri: https://github.com/your-repo/config-repo
  3. 断路器(Hystrix)

    • 防止服务雪崩,提供降级和熔断机制。

    示例代码:

    // 添加依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    
    // 服务消费者
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableHystrix
    public class ServiceConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServiceConsumerApplication.class, args);
        }
    }
    
    @RestController
    public class ConsumerController {
        @Autowired
        private RestTemplate restTemplate;
        
        @HystrixCommand(fallbackMethod = "fallback")
        public String callService() {
            return restTemplate.getForObject("http://service-provider/hello", String.class);
        }
        
        public String fallback() {
            return "Service is down!";
        }
    }
六、总结

微服务架构通过将复杂系统拆分为独立的服务,极大地提高了系统的高可用性、可扩展性和灵活性。Spring Cloud 提供了一系列强大的组件,帮助开发者快速构建和管理微服务。在学习微服务的过程中,我们需要关注其核心概念和优势,同时也要注意分布式系统带来的复杂性。希望今天的入门内容能为你打开微服务的大门,让我们一起在接下来的14天里深入探索微服务的奥秘!


感悟与启示:

微服务架构是现代软件开发的重要趋势,它不仅改变了我们构建系统的思维方式,还为企业带来了更高的灵活性和竞争力。在学习微服务的过程中,建议从实际问题出发,结合Spring Cloud的组件逐步深入实践。同时,关注架构设计的合理性,避免过度拆分导致的复杂性增加。


http://www.kler.cn/a/512858.html

相关文章:

  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
  • 力扣 739. 每日温度
  • 小白爬虫——selenium入门超详细教程
  • Node.js的解释
  • 深入探索Python人脸识别技术:从原理到实践
  • 虚幻商城 Fab 免费资产自动化入库
  • Java锁 死锁及排查 JVM 工具 jconsole 工具 排查死锁
  • R语言的编程范式
  • cuda从零开始手搓PB神经网络
  • QT:多窗口设计(主窗口点击按钮打开子窗口)
  • 开源的Text-to-SQL工具WrenAI
  • SQL Server2022版详细安装教程(Windows)
  • 有线通信方式(I2C、UART、RS485)
  • 【Red Hat8】:搭建FTP服务器
  • springboot接入deepseek深度求索 java
  • vue3使用音频audio标签
  • 可视化平台建设技术方案,商业BI系统解决方案,大屏建设功能需求分析(word原件)
  • Datawhale组队学习笔记task2——leetcode面试题
  • 前〈和平精英〉技术策划进军AI游戏领域,获新投资
  • 【数据结构】搜索二叉树
  • 【有啥问啥】什么是端到端(End-to-End)?
  • 【AI大模型Agent探索】深入探索实践 Qwen-Agent 的 Function Calling
  • 【Linux】Linux入门(4)其他常用指令
  • 基于Docker的Kafka分布式集群
  • leetcode——和为K的子数组(java)
  • 【配置环境】VS Code中JavaScript环境搭建