wangJiaLun-go

王加伦的技术分享

0%

服务雪崩

服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象

如下图: 一个服务失败,导致整条链路的服务都失败的情形,我们称之为服务雪崩

1

我把服务雪崩的参与者简化为 服务提供者服务调用者,并将服务雪崩产生的过程分为以下三个阶段来分析形成的原因:

  1. 服务提供者不可用
  2. 重试加大流量
  3. 服务调用者不可用
阅读全文 »

自我保护机制

当EurekaServer与EurekaClient网络不通的情况下,EurekaServer不会将EurekaClient服务剔除。

通过一个场景来了解一下:

有两个服务:用户服务app-user、订单服务app-order,用户服务做了集群,有两台机器,分别是8010和8011

img

现在order使用负载均衡的轮询机制,调用user的接口,可以看到是8010和8011轮询访问的。

img

那如果现在8010这台服务宕机了,会是什么情况?

img

阅读全文 »

搭建服务提供者

  • 新建maven项目配置pom

    引入eureka客户端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    </dependencies>

    配置yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    spring:
    application:
    name: eureka-client
    server:
    port: 20001
    eureka:
    client:
    service-url:
    defaultZone: http://localhost:20000/eureka/
    阅读全文 »

分布式系统CAP定理

分布式系统协议只能在CAP这三者间有所折中。

  • Consistenct (强一致性)也称原子一致性/线性一致性

    在任意时刻,更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

    • 强一致性

    • 顺序一致性

      • 任何一次读都能读到某个数据的最近一次写的数据。
      • 系统的所有进程的顺序一致,而且是合理的。即不需要和全局时钟下的顺序一致,错的话一起错,对的话一起对。
    • 弱一致性

      • 系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值。

      • 但即使过了“不一致时间窗口”这段时间后,后续对该数据的读取也不一定是最新的值。

      • 所以说,可以理解为数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。

    • 最终一致性

      • 是弱一致性的特殊形式,存储系统保证在没有新的更新的条件下,最终所有的访问都是最后更新的值。
      • 不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。
      • 简单说,就是在一段时间后,节点间的数据会最终达到一致状态。
  • Availiablity(高可用性)

    服务一直可用,而且是正常响应时间。

    系统再出现异常时仍然可用提供服务。

    通用衡量标准是宕机时间的比例。

  • Partition tolerance(分区容错性)

    系统可以对网络分区这种异常情况进行容错处理。

    阅读全文 »

[TOC]

优点

  • 快速响应变更

    • 单一职责
    • 独立部署
  • 独立拓展

    • 边界清晰
    • 不过度受制于技术栈
  • 精细粒度业务控制

  • 降级熔断

  • 局部限流

  • 面向业务/领域模型

  • 不依赖数据模型

  • 易于抽象

缺点

  • 部署结构复杂
    • 模块众多
    • 额外组件
  • 依赖平台支撑
    • 依赖微服务组件
    • 研发成本
  • 分布式问题
    • 一致性
    • 异常补偿
  • 拆分的水平
    • 粒度过粗/过细

采不采用微服务

  • 业务规模 (成本收益)
  • 预期迭代的次数以及需要的效率
  • 研发团队配置
  • 业务领域 (服务如何拆分以及粒度)
    • 业务架构
    • 领域模型

[TOC]

分布式限流

Guava RateLimiter 客户端限流

基于Nginx的IP限流

基于Nginx的连接数限制

问题记录: no sapjco3 in java.library.path

对接厂家的SAP系统, 部署至linux环境时报下面的错误日志, 查了缺libsapjco3.so包

对应包下载地址 链接:https://pan.baidu.com/s/1YO0ZJq4J_SL9dI8VyuDsBg 提取码:8888

查了很多帖子是放在tomcat里, 现在springboot直接jar跑不方便加进去, 下面是配置到环境变量中

  • 错误日志

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1088)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.loadLibrary(DefaultJCoRuntime.java:441)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.registerNativeMethods(DefaultJCoRuntime.java:307)
    at com.sap.conn.jco.rt.JCoRuntime.registerNatives(JCoRuntime.java:969)
    at com.sap.conn.rfc.driver.CpicDriver.<clinit>(CpicDriver.java:955)
    at com.sap.conn.rfc.engine.DefaultRfcRuntime.getVersion(DefaultRfcRuntime.java:43)
    at com.sap.conn.rfc.api.RfcApi.RfcGetVersion(RfcApi.java:261)
    at com.sap.conn.jco.rt.MiddlewareJavaRfc.<clinit>(MiddlewareJavaRfc.java:200)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.initialize(DefaultJCoRuntime.java:73)
    at com.sap.conn.jco.rt.JCoRuntimeFactory.<clinit>(JCoRuntimeFactory.java:23)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:191)
    at com.sap.conn.jco.JCo.createJCo(JCo.java:52)
    at com.sap.conn.jco.JCo.<clinit>(JCo.java:26)
    at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:61)
    at com.changhong.vmi.admin.xfire.jco.SrmSapJCo.getGoodsPlan(SrmSapJCo.java:79)

阅读全文 »

centos7安装 rabbitMQ

  • 安装准备

  • 安装服务

    1
    2
    3
    4
    5
    6
    7
    8
    # 安装基础软件包
    yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
    # 安装erlang
    rpm -ivh erlang-24.0.5-1.el8.x86_64.rpm
    # 安装socat
    yum install -y socat
    # 安装rabbitMq
    rpm -ivh rabbitmq-server-3.8.22-1.el8.noarch.rpm
阅读全文 »