美文网首页
Java 微服务

Java 微服务

作者: bowen_wu | 来源:发表于2022-01-12 17:10 被阅读0次

    单体式应用程序 Monolithic Application

    Monolithic Application 指单层的应用程序,其用户界面和资料存取程式整合在单一系统平台上的一个程式里

    Monolithic Application 缺点

    • 难以扩展(scale)
    • 交付时间长、开发慢(焦油坑)
    • 复杂、维护困难
    • 故障率高

    微服务 Microservice

    Microservice 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块(Small Building Blocks)为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的 API 集相互通信

    每一个服务中只有一小块代码,只对外提供一个服务

    • 整个应用按照业务拆分,互相使用 RPC | HTTP | REST 通信
    • 松散耦合
    • 独立开发、测试、部署、演进
    • 不限制语言

    RPC

    Remote Procedure Call 远程过程调用是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC 是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接收回应进行信息交互的系统

    开发一个微服务

    1. 将应用按照业务拆分成模块,每个模块既是一个 Microservice
    2. 定义接口,模块之间使用接口进行通信
    3. 开发服务的提供者
    4. 分别部署

    代码方式

    Maven 多模块

    一个团队维护多个微服务

    • 好处:代码放在一起容易管理
    • 坏处:界限不明显,放在一起的代码容易被人改

    不同项目

    不同的团队维护不同的微服务

    • 好处:界限清楚
    • 坏处:代码不在一起,比较麻烦

    Dubbo

    分布式 RPC 框架

    • 角色 => 消费者 + 提供者 + 注册中心
    • 功能 => 负载均衡 + 容错 + 限流 + 降级

    Dubbo 服务调用与代理模式

    • 当消费者调用接口的时候,接口的背后是 JDK 生成的动态代理,实际上执行的代码是 dubbo 里的 InvokerInvocationHandler 类中的 invoke 方法,该方法实现了 JDK 代理标准实现 InvocationHandler,之后转发给 RpcInvocation
    • 消费者调用一个方法,传递一个参数,代理对象通过 TCP 长连接将方法名、参数、版本等信息发送给远端提供服务的生产者,之后服务的生产者得到响应后,通过 TCP 长连接将响应返回给代理。代理对象可以进行负载均衡、自动重试、服务降级(如果所有的服务都挂了,给到消费者一个默认的实现)、限流等等功能
    invoke method
    • 代理模式 => 在调用服务时,服务的具体实现代码在其他地方
    • 服务调用 => 分布式注册中心 + 本地缓存 + 长连接

    为何使用 TCP 长连接

    1. TCP 长连接不用重新握手
    2. 一个服务的生产者对应很多个消费者,每个消费者的代理和生产者维护一个 TCP 长连接会非常有助于性能的提高

    知识点

    1. scale 扩展
      • 水平扩展 => horizontal scale => 从一台机器扩展到 n 台机器
      • 垂直扩展 => vertical scale => 将一台机器扩展为特别好的机器 => 机器性能有上限

    相关文章

      网友评论

          本文标题:Java 微服务

          本文链接:https://www.haomeiwen.com/subject/asuwcrtx.html