9.4. 分布式与微服务架构

这篇具有很好参考价值的文章主要介绍了9.4. 分布式与微服务架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在本章节中,我们将介绍分布式系统和微服务架构的基本概念。分布式系统解决了单体应用面临的可扩展性、高可用性等问题,而微服务架构进一步提升了系统的可维护性和灵活性。

9.4.1. 分布式系统基本概念

分布式系统是由多个独立的计算节点组成的系统,这些节点通过网络进行通信和协作。 分布式系统的主要特点是可扩展性、高可用性和容错性。

  1. 可扩展性(Scalability):分布式系统可以通过添加更多的计算节点来提升处理能力,以应对不断增长的业务需求。
  2. 高可用性(High availability):分布式系统可以在某个节点发生故障时,自动将任务转移到其他正常节点上,从而保证系统的正常运行。
  3. 容错性(Fault tolerance):分布式系统可以在部分节点发生故障时,依然能够正常提供服务。

9.4.2. 微服务架构基本概念

微服务架构是一种软件架构风格,它将一个大型应用划分为多个独立的、可独立部署的小型服务。这些小型服务可以使用不同的编程语言和技术栈进行开发,它们通过轻量级的通信协议(如HTTP/REST)进行互相调用。

微服务架构的主要优势在于:

  1. 可维护性(Maintainability):将一个复杂的大型应用划分为多个小型服务,可以降低每个服务的复杂度,提高代码的可读性和可维护性。
  2. 灵活性(Flexibility):微服务可以独立进行更新和部署,这意味着我们可以更快地响应业务需求的变化,以及尝试新的技术和架构。
  3. 可扩展性(Scalability):我们可以根据每个微服务的需求,独立地进行横向扩展,从而提高整个系统的处理能力。

9.4.3. Spring Cloud

Spring Cloud是一个基于Spring Boot的开发工具集,它提供了一系列用于构建分布式系统和微服务架构的解决方案。在本节中,我们将简要介绍Spring Cloud的主要组件。

  1. Spring Cloud Config:提供了一个集中式配置管理服务,可以让所有的微服务从一个中心位置获取配置信息。
  2. Spring Cloud Eureka:提供了一个服务注册与发现的解决方案。微服务可以向Eureka注册,然后通过Eureka获取其他微服务的实例信息。
  3. Spring Cloud Ribbon:提供了客户端负载均衡的功能。通过Ribbon,我们可以将请求自动分发到多个服务实例,从而提高系统的可用性和容错性。
  4. Spring Cloud Feign:提供了一个声明式的HTTP客户端。通过Feign,我们可以更加简洁地编写服务间的调用代码。
  5. Spring Cloud Hystrix:提供了熔断器和线程隔离的功能。当某个服务出现故障时,Hystrix可以自动降级服务,从而保证整个系统的稳定性。
  6. Spring Cloud Zuul:提供了一个API网关服务。通过Zuul,我们可以实现请求路由、负载均衡、认证授权等功能。

9.4.4. 示例:创建一个简单的微服务应用

在这个示例中,我们将使用Spring Boot和Spring Cloud创建一个简单的微服务应用。该应用包含两个服务:一个是用户服务,另一个是订单服务。用户服务负责管理用户信息,订单服务负责管理订单信息。订单服务需要调用用户服务来获取用户信息。

1. 创建Eureka服务注册中心

首先,我们需要创建一个Eureka服务注册中心。使用Spring Boot创建一个新项目,并添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

application.yml文件中,配置Eureka服务:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

在启动类上添加@EnableEurekaServer注解:

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

2. 创建用户服务

创建一个新的Spring Boot项目,并添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml文件中,配置服务名和Eureka服务地址:

spring:
  application:
    name: user-service

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

创建一个简单的用户实体类和控制器:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // 省略getter和setter方法
}

@RestController
@RequestMapping("/users")
public class UserController {
    // 这里仅用一个Map模拟数据库
    private final Map<Long, User> userMap = new ConcurrentHashMap<>();

    @PostMapping
    public User createUser(@RequestBody User user) {
        user.setId(userMap.size() + 1L);
        userMap.put(user.getId(), user);
        return user;
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        return userMap.get(id);
    }
}

在启动类上添加@EnableDiscoveryClient注解:

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

3. 创建订单服务

创建一个新的Spring Boot项目,并添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

application.yml文件中,配置服务名和Eureka服务地址:

spring:
  application:
    name: order-service

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

创建一个简单的订单实体类和控制器:

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long userId;
    // 省略getter和setter方法
}

@RestController
@RequestMapping("/orders")
public class OrderController {
    // 这里仅用一个Map模拟数据库
    private final Map<Long, Order> orderMap = new ConcurrentHashMap<>();

    @Autowired
    private UserServiceClient userServiceClient;

    @PostMapping
    public Order createOrder(@RequestBody Order order) {
        order.setId(orderMap.size() + 1L);
        orderMap.put(order.getId(), order);
        return order;
    }

    @GetMapping("/{id}")
    public Order getOrder(@PathVariable("id") Long id) {
        Order order = orderMap.get(id);
        User user = userServiceClient.getUser(order.getUserId());
        order.setUser(user);
        return order;
    }
}

创建一个Feign客户端来调用用户服务:

@FeignClient("user-service")
public interface UserServiceClient {
    @GetMapping("/users/{id}")
    User getUser(@PathVariable("id") Long id);
}

在启动类上添加@EnableDiscoveryClient@EnableFeignClients注解:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderServiceApplication.class, args);
    }
}

至此,我们已经创建了一个简单的微服务应用。用户服务和订单服务都向Eureka服务注册中心注册了自己,订单服务可以通过Feign客户端调用用户服务获取用户信息。

9.4.5. 示例总结

在本示例中,我们使用了Spring Cloud的主要组件来构建一个简单的微服务应用。Eureka服务注册中心负责管理服务实例信息,Feign客户端简化了服务间调用的代码。微服务架构使得我们可以独立地开发、部署和扩展每个服务。

这个示例仅仅涉及到了微服务架构的一些基本概念。在实际项目中,我们还需要考虑其他诸如数据一致性、服务降级、API网关等问题。通过不断学习和实践,你会对分布式系统和微服务架构有更加深入的理解。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

9.4. 分布式与微服务架构文章来源地址https://www.toymoban.com/news/detail-473295.html

到了这里,关于9.4. 分布式与微服务架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • OceanBase 4.0:当我们谈单机分布式一体化架构时,我们在说什么?

    关于作者: 杨传辉,OceanBase CTO。2010年作为创始成员之一加入 OceanBase 团队,主导了 OceanBase 历次架构设计和技术研发,从无到有实现 OceanBase 在蚂蚁集团全面落地。同时,他也主导了两次 OceanBase TPC-C 测试并打破世界纪录,著有《大规模分布式存储系统:原理与实践》。目前

    2023年04月09日
    浏览(18)
  • Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中,单机爬虫可能面临性能瓶颈和资

    2024年02月11日
    浏览(15)
  • 单体架构 微服务架构 分布式 微服务通信方式 网关与nginx

    单体架构 优点:架构简单,维护成本低 缺点:各个模块耦合度太高,当对一个模块进行更新修改时,会影响到其他模块,要一起进行修改。当存在性能瓶颈的时候,需要对整个服务进行扩容,不能有针对性的扩容,如一个程序的主要功能时其中某个服务,要对其增加机器,

    2024年02月10日
    浏览(51)
  • 微服务【分布式架构&认识微服务&SpringCloud】第1章

    微服务【分布式架构&认识微服务&SpringCloud】第1章

    目录 1,认识微服务 1.1,单体架构 1.2,分布式架构 1.3,微服务 1.4,SpringCloud 1.5,总结 💂 个人主页:  爱吃豆的土豆 🤟 版权:  本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 🏆 人

    2023年04月08日
    浏览(44)
  • 微服务架构学习与思考(13):分布式配置中心

    微服务架构学习与思考(13):分布式配置中心

    微服务架构系列文章集合:https://www.cnblogs.com/jiujuan/p/17307285.html 用编程语言编写应用项目时,一般都会有项目的配置文件。比如用 java 编写项目,有一个 properties 的配置文件,会把一些配置信息写入到该文本文件中,例如数据库相关的配置信息。 这也体现了软件设计的一个原

    2024年02月06日
    浏览(15)
  • 聊聊分布式架构08——SpringBoot开启微服务时代

    聊聊分布式架构08——SpringBoot开启微服务时代

    目录 微服务架构时代 快速入门 入门详解 SpringBoot的自动配置 石器时代:XML配置bean 青铜时代:SpringConfig 铁器时代:AutoConfigurationImportSelector 手写简单Starter SpringApplication启动原理 微服务架构时代 Spring Boot的出现与微服务架构有关,它是Spring Framework的一部分,旨在简化开发独

    2024年02月06日
    浏览(17)
  • 分布式、服务化的ERP系统架构设计

    分布式、服务化的ERP系统架构设计

    ERP 之痛        曾几何时,我混迹于电商、珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP)。作为一个ERP系统,系统主要功能模块无非是订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理等等。作为一个管理系统,大家的一般开发习惯就是使用

    2024年02月11日
    浏览(51)
  • 应用架构——集群、分布式、微服务的概念及异同

    应用架构——集群、分布式、微服务的概念及异同

    一、什么是集群?         集群是指将多台服务器集中在一起, 每台服务器都实现相同的业务,做相同的事;但是每台服务器并不是缺 一不可,存在的主要作用是缓解并发能力和单点故障转移问题。 集群主要具有以下特征: (1)、 伸缩性         在一些大系统中,

    2024年02月03日
    浏览(41)
  • 分布式软件架构——服务端缓存的三种属性

    分布式软件架构——服务端缓存的三种属性

    在透明多级分流系统中,我们以流量从客户端中发出开始,以流量到达服务器集群中真正处理业务的节点结束。一起探索了在这个过程中与业务无关的一些通用组件,包括DNS、CDN、客户端缓存,等等。 实际上,服务端缓存也是一种通用的技术组件,它主要用于减少多个客户端

    2024年02月07日
    浏览(45)
  • 微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

    微服务架构-服务网关(Gateway)-权限认证(分布式session替代方案)

    前面我们了解了Gateway组件的过滤器,这一节我们就探讨一下Gateway在分布式环境中的一个具体用例-用户鉴权。 从我们开始学JavaEE的时候,就被洗脑式灌输了一种权限验证的标准做法,那就是将用户的登录状态保存到HttpSession中,比如在登录成功后保存一对key-value值到session,

    2024年02月16日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包