1、分布式微服务架构设计原理

 

一、单体服务架构

1、JEE架构:UI、EJB逻辑层、数据库

优点:对单体架构分层,接入层、逻辑层、数据层;

缺点:

a、逻辑层业务耦合性高,组件指责划分不清晰,导致新功能迭代,增加和维护非常困难。

b、EJB2.0实现采用了大量的XML配置文件,组件学习曲线高、难以单元测试,超重量级;

 

2、SSH架构:Structs(UI 交互层)、Spring(业务逻辑实现)、Hibernate(对象领域的模型与关系型数据库模式映射)

Structs MVC模型:

  Spring:逻辑层实现核心容器,核心思想 IOC和AOP

a、IOC(控制反转):

       EJB 实现: 实现服务化组件 Bean 时,强依赖多个容器接口,复杂容器规则的 XML配置,测试依赖应用服务器环境;

      Spring 实现:业务逻辑服务组件都是独立的,Spring 容器支持单元测试,对下层依赖服务进行 Mock, 方便测试。

 
b、AOP(面向切面编程):日志、安全、事物、应用程序性能APM; 具体实现:AspectJ
 
 
Hibernate:对象领域模型与关系型数据库模型映射
 
存在性能问题,使用更加灵活的MyBatis实现ORM
 
 

   二、服务化架构 SOA

    1、WebService:

    原理:

       1)通过UDDI协议注册WebService服务目录

       2)通过UDDI协议查询服务,并获得WSDL服务描述文件

       3) 通过WSDL语言远程调用WebService提供服务

    缺点:

        1)依赖中心服务发现机制

         2)使用SOAP通信协议,通过XML序列和反序列化数据

         3)服务化管理和治理设施不完善

 

    2、ESB: 企业服务总线

原理:

1、每个服务提供者通过总线模式插入系统

2、总线根据路程的编排将服务的输出转化为流程的下一个输出节点

缺点:

1、ESB服务过重的整体服务

2、通过ESB试图隐藏系统内部的复杂性,但是系统内部复杂性依旧存在

 

三、微服务架构

1、职能团队划分

2、去中心化服务治理

微服务架构倡导去中心化的服务管理和治理,尽量不要设置中心化的管理服务,最差在中心化管理服务瘫痪时有替代方案和设计。

API网关:所有外部服务和内部服务通过API网关统一管理

缺点:用户请求通过机房,都需要经过API网关路由,服务上量后,很大程度上放量了API网关的调用TPS。

 

3、微服务交互模式

a、读者容错模式:服务提供与消费者之间对接口改变进行容错

b、消费者驱动契约模式:

举例:

生产者契约:账务系统入账请求(商户账户ID、入账订单号、入账金额)

消费者契约:账务系统入账返回(商户账户ID、入账订单号、入账金额、入账时间、财务流水号、入账状态)

 消费者驱动契约:对于交易系统只需要账户系统的入账订单号和入账状态,为了保证资金的安全,交易系统对账务系统发起者

提出幂等和滤重处理,对重复的入账请求进行拦截。

c、去数据共享模式

缺点:

a、微服务之前交互除了接口契约,还有数据存储契约

b、上有数据格式发生变化时,可能导致下游处理逻辑出现问题

在数据服务时,一定不要共享缓存和数据库等资源。

 

4、微服务的分解和组合模式

分解:

微服务架构需求分析和架构设计中,通常用领域的动词和名词来划分。拆分后,系统具有敏捷性、灵活性、可伸缩性。

例如电商后台系统,可分解为订单、商户、商户目录、库存、购物车、交易、支付、发票、物流等子系统

 

组合:

1、服务代理模式:

平滑系统迁移四阶段:

1)、新老系统双写

2)、迁移双写之前的历史遗留数据

3)、读请求切换新系统

4)、下调双写逻辑、,只写新系统

 

2、服务聚合模式

根据业务流程处理的需要,按一定的顺序调用一依赖的多个服务,对依赖的微服务返回的数据进行组合、加工和转换,最后按一定的形式返回给使用方。

3、服务串联模式,类似工作流

四、技术选型

1、RPC

1)JDK RMI:JDK1.4后内置远程服务调用技术栈,不采用

a、RMI采用自带JDK专用序列化协议,不能跨语言

b、使用底层网络协议,不如基于文本的HTTP可读

2)Hessian和Burlap

a、基于Http传输。

b、Hessian将对象序列化成语言无关的二进制协议

      Burlap将对象序列化成与语言无关的XML数据

c、都适合传输较小对象,大复杂对象,都没有RMI有优势

 

2、服务化时代框架 (过时)

Dubbo:提供高性能和透明化的RPC远程服务调用,包含基本服务监控、服务治理和服务调度能力

      默认采用传输Hessian序列化数据,Dubbo采用ZooKeeper作为注册中心来注册和发现服务。

      并通过客户端负载均衡来路由请求,算法包括:随机、轮询、最少活跃调用数、一致性hash等。

HSF:淘宝内部大规模使用,不开源。

Thrift: 高性能支持多语言服务调用框架,Apache开源,具有跨语言和高性能优点。

AXIS: Apache Web Service项目,采用SOAP协议

Mule ESB:

3、微服务框架

1)Spring Boot

a、JEE时代

Tomcat Web容器服务管理服务的启动、停止、监控、配置和日志,应用人员按照规范打包War

b、Spring Boot,将容器嵌入自动的Jar包中。Spring Boot启动时,内部启动嵌入的容器,例如Tomcat,Jetty,Nettry等。

2、Spring Clound Netfix 

包含组件Eureka、容错性组件Hystrix、智能路由组件Zuul和客户端负载均衡组件Ribbon

Netflix交互流程

1、服务在Eureka服务器实例上注册

2、Zuul作为特殊服务在Eureka注册并发现服务

3、Zuul作为网关,将发现服务给PC网站、APP和开放平台使用

4、RestTemplate和FergnClient使用简单服务调用方法调用服务1、服务2

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java分布式微服务架构是一种将大型应用程序拆分成多个小型、独立的服务架构模式。每个服务都可以独立开发、部署和扩展,通过网络进行通信。下面是Java分布式微服务架构搭建的一般步骤: 1. 服务拆分:将大型应用程序拆分成多个小型服务,每个服务负责一个特定的业务功能。拆分时需要考虑服务的边界和职责划分。 2. 服务注册与发现:使用服务注册与发现机制,例如ZooKeeper、Consul或Eureka,来管理和发现各个微服务的实例。 3. 服务间通信:微服务之间通过轻量级的通信协议进行通信,常见的方式有RESTful API、消息队列和RPC(远程过程调用)等。 4. 负载均衡:使用负载均衡器,例如Nginx或Ribbon,来分发请求到多个服务实例,提高系统的可用性和性能。 5. 高可用性和容错:通过使用容错机制,例如熔断器(Circuit Breaker)和限流器(Rate Limiter),来保护系统免受故障的影响。 6. 数据一致性:在分布式环境下,保证数据的一致性是一个挑战。可以使用分布式事务管理器,例如Atomikos或Seata,来实现分布式事务。 7. 监控和日志:使用监控工具和日志系统,例如Prometheus、Grafana和ELK(Elasticsearch、Logstash和Kibana),来监控和分析微服务的运行情况。 8. 安全性:在分布式微服务架构中,安全性是一个重要的考虑因素。可以使用认证和授权机制,例如OAuth2和JWT(JSON Web Token),来保护微服务的访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值