微服务1--服务架构

[复制链接]
发表于 2025-9-23 05:48:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
体系架构

单体应用架构





  • 特点:全部功能会合在一个应用中(如传统的 Spring Boot WAR 包)。
  • 实用场景:小型项目、快速验证阶段。
  • 优缺点:

    • ✅ 开辟简单,摆设方便。
    • ❌ 扩展性差,技能栈耦合。

集群应用架构




  • 实现:

    • 无状态服务水平扩展

      • 通过负载平衡(Nginx/LVS)将流量分发到多个单体实例。
      • Session共享:Redis存储用户会话。

    • 数据库主从分离

      • 主库写,从库读(MySQL Replication)。


  • 优缺点:

    • ✅ 进步并发本领,克制应用层单点故障
    • ❌ 代码仍为单体,维护复杂,数据主库压力大

 垂直应用架构


演进动机


  • 办理集群架构中业务耦合题目,按功能拆分独立应用。
实现方式


  • 垂直拆分:将单体按业务线拆分为多个独立应用(如电商拆分为用户中央、订单体系、商品体系)。
  • 每个应用有自己的数据库,克制全表扫描压力。
优缺点 


  • ✅ 业务解耦,数据库压力分散
  • ❌ 重复构建,跨体系调用复杂
微服务架构 


微服务架构是服务化思想的最佳时间方向和服务管理不停完满和交付链路渐渐成熟后的天然产物。
微服务 

概念名词

服务管理

服务管理就是举行服务的自动化管理,其核心是服务的自动注册与发现。 
        服务注册:服务实例将自身服务信息注册到注册中央。 
        服务发现:服务实例通过注册中央获取到此中的服务实例的信息,通过这些信息去哀求他们提供服务。
        服务剔除:服务注册中央将出题目的服务自动剔除到可用列表之外,使其不会被调用到。
服务调用

服务调用是指一个软件体系通过某种通讯协议哀求另一个软件体系提供特定服务的过程。
  现在主流的远程调用技能有基于 HTTP 的 RESTful 接口以及基于 TCP 的 RPC协议。 服务网关

随着微服务的不停增多,差别的微服务一样平常会有差别的网络地点,外部客户端大概需要调用多个服务接口才气完成一个业务需求,如果让客户端直接与各个服务之间举行通讯就会出现一系列的题目(跨域,认证)。
网关是一种在微服务架构中使用的服务器端组件,用于管理哀求的转发和路由。API网关将API调用统一接入API网关层,由网关层统一接入和输出。
一个网关的根本功能有:统一接入、安全防护、协议适配、流量管控、是非链接支持、容错本领。
​

服务容错

服务容错是确保体系在部门服务出现故障时仍能继续运行的本领。
  在微服务当中,一个哀求常常会涉及到调用几个服务,如果此中某个服务不可用,没有做服务容错 的话,极有大概会造成连续串的服务不可用,这就是雪崩效应。 我们没法防备雪崩效应的发生,只能尽大概去做好容错。 链路追踪

  随着微服务架构的盛行,服务按照差别的维度举行拆分,一次哀求往往需要涉及到多个服务。互联 网应用构建在差别的软件模块集上,这些软件模块,有大概是由差别的团队开辟、大概使用差别的编程 语言来实现、有大概布在了几 千台服务器,高出多个差别的数据中央。因此,就需要 对一次哀求涉及的 多个服务链路举行日记记载,性能监控监控即链路追踪.  微服务调用

  以商城体系为例:客户想订单服务发起一个下订单哀求,这时在保存订单之前就需要先调用商品服务查询商品信息。  一样平常把服务的自动调用方称为服务斲丧者,把服务的被调用方称为服务提供者。
在这种环境下,订单订单微服务就是一个服务斲丧者, 商品微服务就是一个服务提供者。
实现方式
  使用 RestTemplate 使用 http 方式远程访问  这种方式存在诸多题目:  1.一旦服务提供者地点厘革,就要手动修改代码  2.如果是多个服务提供者,无法实现负载平衡  3.服务过多,人工维护调用关系困难且本钱巨大。  
  1. @RestController
  2. @RequestMapping("/order")
  3. public class OrderController{
  4.     @Autowired
  5.     OrderService orderService;
  6.     @Autowired
  7.     RestTemplate restTemplate;
  8.    
  9.     @RequestMapping("/create/{pid}/{uid}/{num}")
  10.     public Order createOrder(@PathVariable("pid") int pid, @PathVariable("uid")int uid, @PathVariable("num") int num){
  11.         //核心代码
  12.         Product p = restTemplate.getForObject("http://127.0.0.1:8091/product/get/"+pid, Product.class);
  13.         User u = restTemplate.getForObject("http://127.0.0.1:8081/user/get/"+uid, User.class);
  14.         Order order= null;
  15.         if(p!=null){
  16.             if(p.getStock()>=num){
  17.                 if(u!=null){
  18.                     order = orderService.saveorder(pid,uid,num);
  19.                 }
  20.             }
  21.         }
  22.         return order;
  23.     }
  24. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表