zoukankan      html  css  js  c++  java
  • 架构:第一章:项目架构的演变历史

    1. 架构演进过程
      1. 纯单机版架构
      2. Maven依赖分层单机版架构
      3. WebService服务调用分布式架构
        1. CXF框架/HttpClient
        2. RESTTemplate
        3. Dubbo+ZooKeeper
        4. Spring Boot+Spring Cloud

    远古时代:单一架构:整个项目只有一个工程。在Servlet容器上运行的时候,只有一个war包。

    黑铁时代:基于WebService实现方法的远程调研,进而实现分布式架构

    WebService本质就是实现所有“方法远程调用”技术的总和。

    方法调用形式:

    一:本地调用:在同一个工程里面直接调用某个对象的某个对象的某个方法。userService.doLogin(user);

    二:远程调用:调用方法时要经过网络,调用另一个工程的方法。

    模块A要调用模块B,原来单一架构,工程之间通过工程jar调用,相互之间依赖,聚合,继承,属于本地调用;而我们通过网络,可以在java代码中发起一个请求,调用对象方法;原来web阶段我们发现客户端可以访问浏览器了,而现在通过远程调用发现客户端项目之间也可以访问

    方法的远程调用内外两方面意义

    对内:帮我们实现分布式架构

    对外:让我们能够调用第三方接口

    发短信

    查物流

    看天气

    支付

    ……

     

    SOA:Service Oriented Architecture面向服务的架构,在项目的内部基于方法的远程调用实现分布式架构,被调用的方法工程称为服务端,调用用的方法工程称为客户端。

    模块A:客户端,模块B:服务端

    模块B提供了服务。模块B提供服务是通过在一个接口中定义可以被调用的方法提供服务。

    好处:隐藏实现细节,保证数据安全,资金安全,商业秘密安全;面向接口编程,只有我们接口不变,不管实现类如何变化,调用方都感觉不到,能够实现解耦合,符合项目开发过程中的“高内聚,低耦合”原则。

    你写过接口吗?

    青铜时代:Dubbo+Zookeeper,实现项目总体的分布式架构

    Dubbo:基于RPC(Remote Procedure Call远程过程调用)的分布式架构环境下服务治理框架。

    Zookeeper:项目中服务的注册中心。项目中的各个provider模块将自己开发的服务的相关信息注册到Zookeeper,各个consumer(消费)模块根据Zookeeper中注册的信息调用provider(提供).

    白银时代:SpringBoot+SpringCloud

    SpringBoot:在进行Spring环境下开发是帮开发者简化配置文件,简化第三方的技术文件。

    server:
      port: 10002
    spring:
      application:
        name: ManagerProvider
      datasource:
        name: druid-source
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: org.gjt.mm.mysql.Driver
        url: jdbc:mysql://127.0.0.1:3306/atcrowdfunding180725?rewriteBatchedStatements=true&useUnicode=true&characterEncoding=utf8
        username: root
        password: root
        dbcp2:
          min-idle: 5
          initial-size: 5
          max-total: 5
          max-wait-millis: 200
    mybatis:
      mapper-locations:
      - classpath:mappers/*Mapper.xml
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:10000/eureka

    引入Eureka服务注册中心

                    <dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    		@EnableEurekaClient

    SpringCloud:实现微服务架构。提供了一整套一站式解决方案。

    负载均衡,注册中心,网关,熔断机制,服务监控。。。。

    SpringCloud:要求每个模块,每个组件都是使用SpringBoot开发的微服务工程,而使用SpringBoot时,不一定使用SpirngCloud.

    Service Mesh服务网格:服务间通信的基础设施层。将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。

    分布式架构的好处:

    有利于分工:直接把一个模块分配给某个小组或某个程序员

    有利于实现非常庞大的项目模块结构:当我们的各个模块太多时使用package划分组件无法接受。所有分散到不同工程里。

    模块化程度高,结构更清晰:有利于开发维护。

    有利于提升性能:每个模块可以独占一个服务器的硬件资源。

    针对某个访问压力大的模块可以进行集群化部署。

    集群:多台服务器上运行相同模块

    集群:多台服务器上运行相同模块

    分布式:多台服务器上运行不同模块

    中间件:

    知识体系:

    分布式事务

    概念

    保证分布式架构系统中,修改数据时,让各个模块和各个中间件中存储的数据保持一致。

    ※注意:没办法做到绝对。

    情景举例

     

    在修改商品数据时,各个组件都需要修改,但是其中某一个操作可能失败。此时需要回滚机制——但是,这样的机制并不是天然存在的。

    可以在修改操作的那写个逆操作,但这样有个问题,逆操作也有可能失败。

    补偿性解决方案

    简单来说:失败的操作再试一次。需要借助消息队列实现效果。

    如果第二次尝试操作又失败了,那么写入日志的同时触发报警系统,立即给运维人员或开发人员发短信,尽快解决。同时如果有必要借助客服部门人工进行必要协调。

     

    CAP定理

    C:强一致性——在很高强度下保持数据一致

    A:高可用性——在并发量很高情况下依然可用

    P:分区容错性——整个系统中某个组件故障时整个系统仍然可用而不是崩溃

    P必须保证。C和A之间二选一。因为要做到强一致性,需要在必要的地方加数据锁,必然会影响性能。

    CP

    AP

  • 相关阅读:
    Eleven-面向对象进阶
    Ten-面向对象
    Nine-常用模块
    Eight-内置函数和匿名函数
    Seven-递归函数和装饰器函数
    Six-迭代器和生成器
    Five-函数
    Four-深浅copy和文件操作
    Third-基础数据类型
    Second-基础
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812054.html
Copyright © 2011-2022 走看看