首页 文章 精选 留言 我的

精选列表

搜索[个人博客],共10000篇文章
优秀的个人博客,低调大师

ModStartBlog v9.6.0 博客公告功能,文件前端直传

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 会员模块通用且完整,支持完整的API调用 大文件分片上传,进度条显示,已上传文件管理 强大的模块扩展功能,所有模块可以无缝集成,支持在线安装、卸载模块 完善的开发助手,实现模块、主题的的一键创建 完善的后台权限管理,支持基于RBAC的权限管理系统 后台管理支持使用手机、平板、PC,无论何时何地都可方便管理 第三方登录(QQ、微信、微博、支付宝、微信小程序) 第三方支付支持(微信、支付宝、支付宝当面付、微信扫码、微信小程序) 第三方云存储支持,支持云储存分片上传(阿里云、百度云、华为云、腾讯云、FTP、七牛云、UCloud、又拍云) 第三方短信支持(阿里云、腾讯云、华为云、百度云、253云通讯、聚合、七牛云、融云、赛邮、UCloud、云片、网易云) V9.6.0版本更新 2024年07月16日ModStartBlog发布v9.6.0版本,增加了以下22个特性: [新功能] 模型操作增加 insertIfNotExists 方法,支持快捷插入数据 [新功能] 参数占位处理工具类 ParamUtil ,支持处理参数占位符 [新功能] Grid 批量操作弹窗支持自定义大小 ( data-dialog-width、data-dialog-width 属性) [新功能] 用户文件、图片上传支持前端直传云存储(需要安装模块支持) [新功能] 可完全自定义上传功能定制的特性 UploadScript Hook [新功能] WebUploader 内置 JS 组件升级 [新功能] Grid 增改差页面支持标题自定义,使用 pageTitleAdd、pageTitleEdit、pageTitleShow 属性 [新功能] Grid 表格操作支持底部操作区域(方法 footOperatePrepend) [新功能] Provider 和 Biz 增加 listAllEnabled 方法,支持查询所有启用数据 [新功能] ValueUtil 和 ArrayUtil.firstValidValue 方法,支持获取第一个有效值 [新功能] Json 组件 API 数据配置显示优化 [系统优化] 多语言 i18n 渲染方式优化 [系统优化] Grid 中批量操作快捷监听优化 data-batch-dialog-operate [系统优化] 用户登录事件 MemberUserLoginedEvent 参数异常问题 [系统优化] CurlUtil 请求头格式校验,避免错误传参导致的异常 [系统优化] BizTrait 增加 first 和 firstName 方法,支持查询第一条数据 [系统优化] 轮播类型添加修改是否为空判断 [系统优化] Json 组件 API 模式支持处理响应内容 [Bug修复] MultiSelect 组件数据回显异常修复 [Bug修复] uni-app 打包脚本在 windows 环境下运行异常问题 [Bug修复] CurlUtil 中 GET 请求方法大小写引起的异常问题 [Bug修复] 富文本编辑器高度自适应概率性失效问题 模块市场一键安装 系统内置模块市场,有行业应用、插件、云存储、云短信等功能模块,后台支持一键安装、启用、禁用、卸载,可快速搭建属于自己的系统应用。 系统演示与文档 码云仓库:https://gitee.com/modstart/ModStartBlog Github仓库:https://github.com/modstart/ModStartBlog 系统演示:https://blog.demo.tecmz.com/ 框架功能演示:https://demo.modstart.com/ 下载使用:https://modstart.com/download 开发者文档:https://modstart.com/doc 模块市场:https://modstart.com/store

优秀的个人博客,低调大师

【博客大赛】+ 生产环境自动化变更全纪录

特别申明:本文根据生产变更编写,所有ip、用户名、文件路径和文件名等敏感信息已做替换删除或打码处理。 服务器列表 ip 主机名 备注 172.16.5.111 app01 1号机 172.16.5.112 app02 2号机 172.16.5.113 app03 3号机 172.16.5.200 db01 数据库服务器 172.16.5.150 ansible spug自动变更服务器 执行生产变更时会登陆3台应用和一台数据库服务器,根据变更实施步骤,手动在每台服务器上敲命令执行,这是传统的变更方式。这样做有几个弊端: 重复性工作多。生产变更少则十几步,多则几十步,很多步骤会在全部或部分服务器上执行。比如注释定时任务,4台服务器都要手敲注释命令;停应用操作会在3台应用服务器都执行。 失误多。由于所有的步骤都是通过手敲命令方式执行,敲错命令在所难免。另外由于执行步骤多、执行的服务器也多,很容易发生漏执行或者重复执行的现象。 文件传输不方便。生产环境一般通过堡垒机登陆,传文件也是通过堡垒机的ftp工具来执行。在变更时会多次涉及文件上传下载,这样就显得非常不便。 耗时长。这点是前三点的延续。由于都是手动执行,执行步骤多,还涉及堡垒机的登陆,整个变更做下来想快都很难。 变更步骤抽象 变更手册大小步骤几十项,根据功能和关联性,抽象合并为16步,并分为实施准备、变更实施、变更收尾3类。 模板 模板对应变更的16个步骤,相应的模板分为准备工作、变更实施和变更收尾3个大类。 变更实施准备的模板 变更实施的模板 变更收尾 自动化变更流程 1.将所有变更抽象为16个步骤; 2.每个步骤对应1个或多个脚本; 3.将脚本转化为spug平台的模板; 4.每次执行变更步骤时选择对应的模板和执行主机; 登录系统 登陆堡垒机,搜索分发服务器172.16.5.150,通过浏览器方式登陆 在浏览器地址栏输入http://172.16.5.150/或者直接点击历史窗口 输入用户名密码,登陆系统 一、变更前准备工作 第1步--注释定时任务 在执行任务栏选择主机和执行模板 选择主机,3台应用服务器和数据库服务器都执行 选择模板 执行命令 数据库执行结果,有5个定时任务被注释,右上角的对号表示执行成功 应用服务器有3个定时任务被注释 定时任务注释条数:1号机4条、2号机3条、3号机3条、数据库5条 第2步--停应用 3台应用执行该操作,停止后台进程和java程序 执行反馈 ‘the process is killed’代表后台进程停止,‘the java is killed’表示java程序停止运行;若脚本正常执行,返回的界面右上角会有对号√ 第3步--数据库跑批 跑批脚本: 执行结果: 第4步--数据库抽壳 数据库上执行抽壳操作 执行结果: 二、变更实施 第5步--应用程序替换 3台应用上执行 执行结果: 依次检查执行结果,正常的返回如图 应用程序替换是一个关键的步骤,集成了scp文件获取、文件解压、文件上传和移动文件到指定目录、赋权以及执行sql等。 第6步--日初日终改为手动 备份响应的表,并将xx启动方式调整为手动 该操作数据库服务器上执行 执行结果: 第7步--修改发送步骤 变更前update所有发送步骤,致不用发送,测试完成后恢复,数据库机器执行 执行结果: 变更完恢复发送时注意比对sql执行结果的条数 第8步--执行sql 执行sql,在PL/SQL内根据变更手册执行对应sql 自动化平台spug内也可以直接通过数据库服务器的console执行sql,不过返回结果没有PL/SQL直观。 第9步--启动应用 3台应用服务器上执行应用启动脚本 执行结果: 应用启动会启动后台程序和java进程,也会重新装载共享内存映射 第10步--跑批 跑批有两种方式,一种是直接复制变更文档跑批命令在分发平台console上执行;一种是将跑批命令拷贝后上传自动执行。本文采用第一种方式,第二种方式适用于批次很多的情况。 进入console 执行批次 第11步--比对 可以三台一起比对,也可以单独比对: 执行结果: 获取结果: 比对结果会上传到数据库服务器的/yssfgs/result目录,通过文件管理器可下载至本地电脑分析查看 比对这个也是关键步骤,之前跑批完每台服务器手敲命令执行比对,比对完然后登陆堡垒机通过ftp工具下载比对结果,劳时费力,而且批次越多花的时间越长,现在自动化了不受批次多少影响,所有的比对工作自动化完成。 三、变更收尾 第12步--日初验证 在1号机上通过执行日初批次验证变更有效性 开始执行: 执行结果: 第13步--查看是否有跳过步骤 查看跑批是否有Skipp步骤,正常结果为空,数据库上执行本步骤 执行结果: 如不为空需逐一排查原因 第14步--解注释 ​ 3台应用和数据库服务器都执行 执行结果: 变更准备工作被注释的定时任务都被解开 第15步--恢复发送 恢复并修改发送,数据库上执行 执行结果: 第16步--日初日终改为自动 恢复有效并将启动方式调整为手动 数据库上执行本脚本 变更执行完成 总结 自动化变更优势: 执行效率高。传统变更大概需要2到3小时,如果遇到批次多的情况时间会更长。自动化后变更时长缩短到1个小时不到,并且不受批次影响,即无论批次多少都不影响变更时长。 失误少。由于所有执行步骤都封装成了脚本做成了模板,杜绝了手动敲错命令的现象。 界面友好。各步骤执行完后结果反馈的界面很直观,很容易判断执行结果。 集成度高。通过spug自动化变更平台,可以方便的登陆各服务器并执行命令,轻松的进行文件的上传下载。 后记 运维自动化是每个运维人绕不开的话题,现在没有哪个公司不做自动化运维的。公司内也有很多工具和产品,之前也试用过很多开源的自动化平台。结合生产实际,无论是自研的还是开源,选哪个平台用什么产品不是问题,关键是如何切实的减轻工作量,提升工作效率。 目前私有云上的统一运维管理我选的是ansible,变更选择spug。这两个平台都很精准的解决了运维的痛点。一个简单的例子,之前生产环境改密码,100多台服务器至少需要两个小时才能改完,还出现过改错了的情况。每次改密码至少需要登录3次crt,一次是开着窗口防止密码改错了可以及时改回来,一个是修改密码用的,再一个是复核密码。光登录系统就让人崩溃,使用ansible一个yaml脚本统一执行,秒级完成且不会出错。 自动化运维平台不在乎高大上,好用是王道。 如果想了解spug自动化平台,请移步:自动化运维平台Spug测试

优秀的个人博客,低调大师

【博客大赛】攻城掠地-微服务篇(Spring boot详解)

什么是微服务 a. 微服务是⼀种架构⻛格,也是⼀种服务;b. 微服务的颗粒⽐较⼩,⼀个⼤型复杂软件应⽤由多个微服务组成,⽐如Netflix⽬前由500多个的微服务组成;c. 它采⽤UNIX设计的哲学,每种服务只做⼀件事,是⼀种松耦合的能够被独⽴开发和部署的⽆状态化服务(独⽴扩展、升级和可替换)。 微服务之间是如何独⽴通讯的 a. Dubbo 使⽤的是 RPC 通信,⼆进制传输,占⽤带宽⼩;b. Spring Cloud 使⽤的是 HTTP RESTFul ⽅式。 springcloud和dubbo有哪些区别 a. Dubbo具有调度、发现、监控、治理等功能,⽀持相当丰富的服务治理能⼒。Dubbo架构下,注册中⼼对等集群,并会缓存服务列表已被数据库失效时继续提供发现功能,本身的服务发现结构有很强的可⽤性与健壮性,⾜够⽀持⾼访问量的⽹站。b. 虽然Dubbo ⽀持短连接⼤数据量的服务提供模式,但绝⼤多数情况下都是使⽤⻓连接⼩数据量的模式提供服务使⽤的。所以,对于类似于电商等同步调⽤场景多并且能⽀撑搭建Dubbo 这套⽐较复杂环境的成本的产品⽽⾔,Dubbo 确实是⼀个可以考虑的选择。但如果产品业务中由于后台业务逻辑复杂、时间⻓⽽导致异步逻辑⽐较多的话,可能Dubbo 并不合适。同时,对于⼈⼿不⾜的初创产品⽽⾔,这么重的架构维护起来也不是很⽅便。c. Spring Cloud由众多⼦项⽬组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,提供了搭建分布式系统及微服务常⽤的⼯具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、⼀次性token、全局锁、选主、分布式会话和集群状态等,满⾜了构建微服务所需的所有解决⽅案。⽐如使⽤Spring Cloud Config 可以实现统⼀配置中⼼,对配置进⾏统⼀管理;使⽤Spring Cloud Netflix 可以实现Netflix 组件的功能 - 服务发现(Eureka)、智能路由(Zuul)、客户端负载均衡(Ribbon)。d. dubbo的开发难度较⼤,原因是dubbo的jar包依赖问题很多⼤型⼯程⽆法解决。e. Dubbo 提供了各种 Filter,对于上述中“⽆”的要素,可以通过扩展 Filter 来完善。 springboot和springcloud认识 a. Spring Boot 是 Spring 的⼀套快速配置脚⼿架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是⼀个基于Spring Boot实现的云应⽤开发⼯具;b. Spring Boot专注于快速、⽅便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;c. Spring Boot使⽤了默认⼤于配置的理念,很多集成⽅案已经帮你选择好了,能不配置就不配置;d. Spring Cloud很⼤的⼀部分是基于Spring Boot来实现,可以不基于Spring Boot吗?不可以。 什么是服务熔断,什么是服务降级 a. 服务熔断:i. 如果检查出来频繁超时,就把consumer调⽤provider的请求,直接短路掉,不实际调⽤,⽽是直接返回⼀个mock的值。b. 服务降级:i. consumer 端:consumer 如果发现某个provider出现异常情况,⽐如,经常超时(可能是熔断引起的降级),数据错误,这时,consumer可以采取⼀定的策略,降级provider的逻辑,基本的有直接返回固定的数据。 provider 端:当provider 发现流量激增的时候,为了保护⾃身的稳定性,也可能考虑降级服务。⽐如,1,直接给consumer返回固定数据,2,需要实时写⼊数据库的,先缓存到队列⾥,异步写⼊数据库。 微服务的优缺点 a. 优点:i. 单⼀职责:每个微服务仅负责⾃⼰业务领域的功能;ii. ⾃治:⼀个微服务就是⼀个独⽴的实体,它可以独⽴部署、升级,服务与服务之间通过REST等形式的标准接⼝进⾏通信,并且⼀个微服务实例可以被替换成另⼀种实现,⽽对其它的微服务不产⽣影响。iii. 逻辑清晰:微服务单⼀职责特性使微服务看起来逻辑清晰,易于维护。iv. 简化部署:单系统中修改⼀处需要部署整个系统,⽽微服务中修改⼀处可单独部署⼀个服务。v. 可扩展:应对系统业务增⻓的⽅法通常采⽤横向(Scale out)或纵向(Scale up)的⽅向进⾏扩展。分布式系统中通常要采⽤Scale out的⽅式进⾏扩展。vi. 灵活组合:vii. 技术异构:不同的服务之间,可以根据⾃⼰的业务特点选择不通的技术架构,如数据库等。b. 缺点:i. 复杂度⾼: 服务调⽤要考虑被调⽤⽅故障、过载、消息丢失等各种异常情况,代码逻辑更加复杂; 对于微服务间的事务性操作,因为不同的微服务采⽤了不同的数据库,将⽆法利⽤数据库本身的事务机制保证⼀致性,需要引⼊⼆阶段提交等技术。ii. 运维复杂:系统由多个独⽴运⾏的微服务构成,需要⼀个设计良好的监控系统对各个微服务的运⾏状态进⾏监控。运维⼈员需要对系统有细致的了解才对够更好的运维系统。iii. 通信延迟:微服务之间调⽤会有时间损耗,造成通信延迟。 使用中遇到的坑! a. 超时:确保Hystrix超时时间配置为⻓于配置的Ribbon超时时间b. feign path:feign客户端在部署时若有contextpath应该设置 path="/***"来匹配你的服务名。c. 版本:springboot和springcloud版本要兼容。 列举微服务技术栈 a. 服务⽹关Zuulb. 服务注册发现Eureka+Ribbona. 服务配置中⼼Apollob. 认证授权中⼼Spring Security OAuth2c. 服务框架Spring Bootd. 数据总线Kafkae. ⽇志监控ELKf. 调⽤链监控CATg. Metrics监控KairosDBh. 健康检查和告警ZMoni. 限流熔断和流聚合Hystrix/Turbine eureka和zookeeper都可以提供服务的注册与发现功能,他们的区别a. Zookeeper保证CP当向注册中⼼查询服务列表时,我们可以容忍注册中⼼返回的是⼏分钟以前的注册信息,但不能接受服务直接down掉不可⽤。也就是说,服务注册功能对可⽤性的要求要⾼于⼀致性。但是zk会出现这样⼀种情况,当master节点因为⽹络故障与其他节点失去联系时,剩余节点会重新进⾏leader选举。问题在于,选举leader的时间太⻓,30 ~ 120s, 且选举期间整个zk集群都是不可⽤的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因⽹络问题使得zk集群失去master节点是较⼤概率会发⽣的事,虽然服务能够最终恢复,但是漫⻓的选举时间导致的注册⻓期不可⽤是不能容忍的。b. Eureka保证APEureka看明⽩了这⼀点,因此在设计时就优先保证可⽤性。Eureka各个节点都是平等的,⼏个节点挂掉不会影响正常节点的⼯作,剩余的节点依然可以提供注册和查询服务。⽽Eureka的客户端在向某个Eureka注册或如果发现连接失败,则会⾃动切换⾄其它节点,只要有⼀台Eureka还在,就能保证注册服务可⽤(保证可⽤性),只不过查到的信息可能不是最新的(不保证强⼀致性)。除此之外,Eureka还有⼀种⾃我保护机制,如果在15分钟内超过85%的节点都没有正常的⼼跳,那么Eureka就认为客户端与注册中⼼出现了⽹络故障,此时会出现以下⼏种情况: Eureka不再从注册列表中移除因为⻓时间没收到⼼跳⽽应该过期的服务 Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可⽤) 当⽹络稳定时,当前实例新的注册信息会被同步到其它节点中因此, Eureka可以很好的应对因⽹络故障导致部分节点失去联系的情况,⽽不会像zookeeper那样使整个注册服务瘫痪。 eureka服务注册与发现原理: a. 每30s发送⼼跳检测重新进⾏租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中⼼移除。b. 注册信息和更新会被复制到其他Eureka 节点,来⾃任何区域的客户端可以查找到注册中⼼信息,每30s发⽣⼀次复制来定位他们的服务,并进⾏远程调⽤。c. 客户端还可以缓存⼀些服务实例信息,所以即使Eureka全挂掉,客户端也是可以定位到服务地址的。 dubbo服务注册与发现原理 调⽤关系说明: 服务容器负责启动,加载,运⾏服务提供者。 服务提供者在启动时,向注册中⼼注册⾃⼰提供的服务。 服务消费者在启动时,向注册中⼼订阅⾃⼰所需的服务。 注册中⼼返回服务提供者地址列表给消费者,如果有变更,注册中⼼将基于⻓连接推送变更数据给消费者。 服务消费者,从提供者地址列表中,基于软负载均衡算法,选⼀台提供者进⾏调⽤,如果调⽤失败,再选另⼀台调⽤。 服务消费者和提供者,在内存中累计调⽤次数和调⽤时间,定时每分钟发送⼀次统计数据到监控中⼼。 限流:1、http限流:我们使⽤nginx的limitzone来完成:1 //这个表示使⽤ip进⾏限流 zone名称为req_one 分配了10m 空间使⽤漏桶算法 每秒钟允许1个请求2 limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;3 //这边burst表示可以瞬间超过20个请求 由于没有noDelay参数因此需要排队 如果超过这20个那么直接返回5034 limit_req zone=req_three burst=20;2、dubbo限流:dubbo提供了多个和请求相关的filter:ActiveLimitFilter ExecuteLimitFilter TPSLimiterFilter 1. ActiveLimitFilter: 1 @Activate(group = Constants.CONSUMER, value = Constants.ACTIVES_KEY) 作⽤于客户端,主要作⽤是控制客户端⽅法的并发度;当超过了指定的active值之后该请求将等待前⾯的请求完成【何时结束呢?依赖于该⽅法的timeout 如果没有设置timeout的话可能就是多个请求⼀直被阻塞然后等待随机唤醒。 ExecuteLimitFilter:1 @Activate(group = Constants.PROVIDER, value = Constants.EXECUTES_KEY)作⽤于服务端,⼀旦超出指定的数⽬直接报错 其实是指在服务端的并⾏度【需要注意这些都是指的是在单台服务上⽽不是整个服务集群】 TPSLimiterFilter:1 @Activate(group = Constants.PROVIDER, value = Constants.TPS_LIMIT_RATE_KEY)作⽤于服务端,控制⼀段时间内的请求数;默认情况下取得tps.interval字段表示请求间隔 如果⽆法找到则使⽤60s 根据tps字段表示允许调⽤次数。使⽤AtomicInteger表示允许调⽤的次数 每次调⽤减少1次当结果⼩于0之后返回不允许调⽤3、springcloud限流:1、我们可以通过semaphore.maxConcurrentRequests,coreSize,maxQueueSize和queueSizeRejectionThreshold设置信号量模式下的最⼤并发量、线程池⼤⼩、缓冲区⼤⼩和缓冲区降级阈值。1 #不设置缓冲区,当请求数超过coreSize时直接降级2 hystrix.threadpool.userThreadPool.maxQueueSize=-13 #超时时间⼤于我们的timeout接⼝返回时间4 hystrix.command.userCommandKey.execution.isolation.thread.timeoutInMilliseconds=15000这个时候我们连续多次请求/user/command/timeout接⼝,在第⼀个请求还没有成功返回时,查看输出⽇志可以发现只有第⼀个请求正常的进⼊到user-service的接⼝中,其它请求会直接返回降级信息。这样我们就实现了对服务请求的限流。2、漏桶算法:⽔(请求)先进⼊到漏桶⾥,漏桶以⼀定的速度出⽔,当⽔流⼊速度过⼤会直接溢出,可以看出漏桶算法能强⾏限制数据的传输速率。⾓⾊说明Provider 暴露服务的服务提供⽅Consumer 调⽤远程服务的服务消费⽅Registry 服务注册与发现的注册中⼼Monitor 统计服务的调⽤次调和调⽤时间的监控中⼼Container 服务运⾏容器3、令牌桶算法:除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图2所示,令牌桶算法的原理是系统会以⼀个恒定的速度往桶⾥放⼊令牌,⽽如果请求需要被处理,则需要先从桶⾥获取⼀个令牌,当桶⾥没有令牌可取时,则拒绝服务。4、redis计数器限流; springcloud核⼼组件及其作⽤,以及springcloud⼯作原理: springcloud由以下⼏个核⼼组件构成:Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从EurekaServer拉取注册表,从⽽知道其他服务在哪⾥Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从⼀个服务的多台机器中选择⼀台Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求Hystrix:发起请求是通过Hystrix的线程池来⾛的,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩的问题Zuul:如果前端、移动端要调⽤后端系统,统⼀从Zuul⽹关进⼊,由Zuul⽹关转发请求给对应的服务 eureka的缺点: 某个服务不可⽤时,各个Eureka Client不能及时的知道,需要1~3个⼼跳周期才能感知,但是,由于基于Netflix的服务调⽤端都会使⽤Hystrix来容错和降级,当服务调⽤不可⽤时Hystrix也能及时感知到,通过熔断机制来降级服务调⽤,因此弥补了基于客户端服务发现的时效性的缺点。 eureka缓存机制: a. 第⼀层缓存:readOnlyCacheMap,本质上是ConcurrentHashMap:这是⼀个JVM的CurrentHashMap只读缓存,这个主要是为了供客户端获取注册信息时使⽤,其缓存更新,依赖于定时器的更新,通过和readWriteCacheMap 的值做对⽐,如果数据不⼀致,则以readWriteCacheMap 的数据为准。readOnlyCacheMap 缓存更新的定时器时间间隔,默认为30秒b. 第⼆层缓存:readWriteCacheMap,本质上是Guava缓存:此处存放的是最终的缓存, 当服务下线,过期,注册,状态变更,都会来清除这个缓存⾥⾯的数据。 然后通过CacheLoader进⾏缓存加载,在进⾏readWriteCacheMap.get(key)的时候,⾸先看这个缓存⾥⾯有没有该数据,如果没有则通过CacheLoader的load⽅法去加载,加载成功之后将数据放⼊缓存,同时返回数据。 readWriteCacheMap 缓存过期时间,默认为 180 秒 。c. 缓存机制:设置了⼀个每30秒执⾏⼀次的定时任务,定时去服务端获取注册信息。获取之后,存⼊本地内存。 熔断的原理,以及如何恢复? a. 服务的健康状况 = 请求失败数 / 请求总数.熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值⽐较决定的.i. 当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况⾼于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.ii. 当熔断器开关打开时, 请求被禁⽌通过.iii. 当熔断器开关处于打开状态, 经过⼀段时间后, 熔断器会⾃动进⼊半开状态, 这时熔断器只允许⼀个请求通过. 当该请求调⽤成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁⽌通过.熔断器的开关能保证服务调⽤者在调⽤异常服务时, 快速返回结果, 避免⼤量的同步等待. 并且熔断器能在⼀段时间后继续侦测请求执⾏结果, 提供恢复服务调⽤的可能. 服务雪崩? a. 简介:服务雪崩效应是⼀种因 服务提供者 的不可⽤导致 服务调⽤者 的不可⽤,并将不可⽤ 逐渐放⼤ 的过程.b. 形成原因:i. 服务提供者不可⽤ii. 重试加⼤流量iii. 服务调⽤者不可⽤c. 采⽤策略:i. 流量控制ii. 改进缓存模式iii. 服务⾃动扩容iv. 服务调⽤者降级服务 服务隔离的原理?如何处理服务雪崩的场景? a. Hystrix通过将每个依赖服务分配独⽴的线程池进⾏资源隔离, 从⽽避免服务雪崩. 多个消费者调⽤同⼀接⼝,eruka默认的分配⽅式是什么?a. RoundRobinRule:轮询策略,Ribbon以轮询的⽅式选择服务器,这个是默认值。所以示例中所启动的两个服务会被循环访问;b. RandomRule:随机选择,也就是说Ribbon会随机从服务器列表中选择⼀个进⾏访问;c. BestAvailableRule:最⼤可⽤策略,即先过滤出故障服务器后,选择⼀个当前并发请求数最⼩的;d. WeightedResponseTimeRule:带有加权的轮询策略,对各个服务器响应时间进⾏加权处理,然后在采⽤轮询的⽅式来获取相应的服务器;e. AvailabilityFilteringRule:可⽤过滤策略,先过滤出故障的或并发请求⼤于阈值⼀部分服务实例,然后再以线性轮询的⽅式从过滤后的实例清单中选出⼀个;f. ZoneAvoidanceRule:区域感知策略,先使⽤主过滤条件(区域负载器,选择最优区域)对所有实例过滤并返回过滤后的实例清单,依次使⽤次过滤条件列表中的过滤条件对主过滤条件的结果进⾏过滤,判断最⼩过滤数(默认1)和最⼩过滤百分⽐(默认0),最后对满⾜条件的服务器则使⽤RoundRobinRule(轮询⽅式)选择⼀个服务器实例。 接⼝限流⽅法? a. 限制 总并发数(⽐如 数据库连接池、线程池)b. 限制 瞬时并发数(如 nginx 的 limit_conn 模块,⽤来限制 瞬时并发连接数)c. 限制 时间窗⼝内的平均速率(如 Guava 的 RateLimiter、nginx 的 limit_req模块,限制每秒的平均速率)d. 限制 远程接⼝ 调⽤速率e. 限制 MQ 的消费速率f. 可以根据 ⽹络连接数、⽹络流量、CPU 或 内存负载 等来限流

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册