JVM

JVM

JVM

Posted by Jimmer on November 5, 2019

JVM 笔记

问题

  • JVM作用
  • JVM技术选型
  • JVM如何使用及原理
  • JVM生产问题(高并发?)

1. JVM作用

  • JVM的核心功能
    (1)动态路由:新开发某个服务,动态把请求路径和服务的映射关系热加载到JVM里去;服务增减机器,JVM自动热感知
    (2)灰度发布
    (3)授权认证(token)
    (4)性能监控:每个API接口的耗时、成功率、QPS
    (5)系统日志
    (6)数据缓存
    (7)限流熔断

2. Eureka

架构图

  • For Spring Cloud
  • 模式:集群(peer-to-peer)
  • CAP:高可用(AP),不保证一致性,但保证最终一致性
  • 时效性:默认配置下,时效性很差。(多个缓存,缓存定时同步)
  • 很难支撑大规模的服务实例,因为每个eureka实例都要接受所有的请求,实例多了压力太大,扛不住,也很难到几千服务实例

2.1 生产问题

  • 如何保证高可用
    集群部署。一台挂了,直接请求另一台。
  • 生产环境配置

    server端application.yml配置: 关掉自我保护机制:eureka.server.enableSelfPreservation = false
    注册表缓存同步时间3秒:eureka.server.responseCacheUpdateIntervalMs = 3000
    心跳检测间隔6秒:eureka.server.evictionIntervalTimerInMs = 6000
    超过多少秒停止心跳删除注册9秒:eureka.instance.leaseExpirationDurationInSeconds = 9

    client端application.yml配置:
    客户端拉取注册表时间3秒:eureka.client.registryFetchIntervalSeconds = 3000
    客户端心跳间隔3秒:eureka.client.leaseRenewalIntervalInSeconds = 3

3. Zookeeper

  • For Dubbo
  • 模式:主从(leader-follower),只有leader可写,leader和follower都可读。
  • CAP:高一致性(AP)
  • 时效性:可以达到秒级。
  • 不适合大规模的服务实例。因为服务上下线的时候,需要瞬间推送数据通知到所有的其他服务实例,所以一旦服务规模太大,到了几千个服务实例的时候,会导致网络带宽被大量占用

3.1 生产问题

  • 如何保证高可用
    集群主从部署。可用性较低一些,leader服务挂了,重新选举leader的过程会导致服务不可用。