当前位置: 首页 > news >正文

新类型的网站网址短链接在线生成免费

新类型的网站,网址短链接在线生成免费,oppo官方网站,soho外贸网站建设DevOps 和 CICD DevOps 全称Development Operation 一种实现开发和运维一体化的协同模式#xff0c;提供快速交付应用和服务的能力 用于协作#xff1a;开发#xff0c;部署#xff0c;质量测试 整体生命周期工作内容#xff0c;最终实现持续继承#xff0c;持续部…DevOps 和 CICD DevOps 全称Development Operation 一种实现开发和运维一体化的协同模式提供快速交付应用和服务的能力 用于协作开发部署质量测试 整体生命周期工作内容最终实现持续继承持续部署持续交付 DevOps 平台组成部分 代码托管 gitsvn 项目管理jira 禅道 Teambition 运维平台腾讯蓝鲸 /自主研发平台 持续交付jenkins /gitlab DevOps 是理念不是具体某个工具 部分观点Development operations collaboration Means faster and smaller releases CICD CI-Continus integration 多名开发人员在开发不同代码过程中可以频繁的将代码行合并到一起并相互不影响工作 CICD: 行为规范循环操作流 Plan—code—build—test—release—deploy—operate—monitor—plan-…. Git 分布式持续集成工具 发布流程 基于master 拉去分支development 基于开发分支开发单元测试sonar质量扫描 Code review 合并到master上进行build单元测试 Build docker image 部署到test env Smoke test 进行QA系统测试压力测试功能性测试 System test 预发布QA测试压测 灰度发布 生产100%发布 Linux free -m rz -y 把文件上传到Linux中如果有相同文件名的文件会将其覆盖。 Rz -e 把文件上传到Linux中如果有相同文件名的文件不会将其覆盖而是会在所上传文件后面加上 .序号 Redis Redis 击穿 穿透 雪崩 雪崩Key短时间大量过期redis服务不可用 击穿redis中没有数据直接访问到数据库 穿透redis和数据库中都没有例如恶意大量访问 开发规范防止击穿雪崩 Public void getValue(String key){ //先判断访问的key是否是黑名单如果是拦截---这段逻辑根据需求可有可无 //判断访问的key是否存在于布隆过滤器白名单中存在才放行---这段逻辑根据需求可有可无// 用key从redis中获取//如果不存在则进入到锁代码块中获取锁{// 双重校验再从redis中获取 // 如果不存在到数据库中获取Object value getValueFromDB(); If(value!null){//将value保存到redis中并设置随机过期时间避免雪崩 } 对于value不存在的要要在redis中缓存空对象但是要考虑不存在的key是否很多 避免不存在的key太多可以额外用布隆过滤器维护一套白名单再请求以前先过下过滤器 Return value; } }防止服务器不可用造成的雪崩 集群模式哨兵模式保证高可用 针对穿透 方案1增加参数校验判断key是否存在存在才让程序往下走 方案2Redis中缓存空对象对于不存在的key也可以在redis中保存这样也能将这些不存在的key拦截到数据库以外 方案3创建布隆过滤器可以将存在的key放到布隆过滤器中类似于白名单功能 场景当一个key以前很冷门突然变成爆款 对于非常热门的key可以设置永不过期或者设计过期时间很长 可以通过nginx 内置lua脚本或者其他方式计算哪些key访问次数将超过阈值的key自动调正为热门key 单独一个线程统计访问量对于爆款的key自动将这些key更新为永不过期不热门的key如果是永不过期的自动更新为有有效期 实现方案要遵循大道至简原则能代码层实现的不要上升到组件解决方案也要遵循先代码层再组件层网络层递进解决 用redis记录上亿用户的签到问题 采用bitmap 存储的是二进制0 /1 String类型512M 1type8个bit 512M51210241024*84,294,967,29642亿 也就是说可以存储42亿用户的bit格式的数据信息 例如统计30天的签到信息 可以以天数为维度创建30个bitmap 01day: 0 0 0 0 0 ………,每一个bit 对应一个用户这样每一天都可以存储上亿的用户登录就将相应的下标标注为1 02day 又是一个新的bitmap 每一个bitmap 的过期时间是30天 也可以以用户为维度但是这种要求用户比较少的场景 如何统计上亿用户的共同好友 假设有两个集合 set1 和 set2 redis SADD set1 a redis SADD set1 b redis SADD set1 c redis SADD set2 b redis SADD set2 c redis SADD set2 d# 计算交集 redis SINTER set1 set2 # 输出: # 1) b # 2) c但是如果上亿的用户好友直接都存储到内存中太耗费资源了 我们可以将好友的数据存到的数据库中 再结合Neo4j本身就是用于社交数据结构计算共同好友 或者通过大数据套件HbaseHadoop来进行海量离线计算 如何避免重复下单 前端点完下单下单按钮不可用 后端自定义注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface RepeatSubmit {enum Type{PARAM,TOKEN}Type limitType() default Type.PARAM;long lockTime() default 5; }在需要保证幂等性的接口上增加此注解 注解切面中 将请求URL用户TOKEN关键词例如sumitOrder作为key保存到redis中且按照locktime设置过期时间且采用setNX的方式一旦保存失败则注解拦截返回 Redis6为什么引入多线程 只是在网络IO层面上实现了多路复用但是redis 实际的命令执行依然是单线程的 热点key问题 方案1本地缓存—适合于提前预知哪些是热点key 方案2请求分摊将热key拆分成多个子key 方案3限流 Import com.google.common.util.concurrent.RateLimiter; Public class RateLimiterExmaple{Private RateLimiter rateLimiter RateLimiter.create(10);Public String accessResource(String key){If(rateLimiter.tryAcquire()){Return RedisClient.get(key);}} }增加监测 监控和报警 通过设计监控来实时观测redis的使用情况及时应对热key问题一般对接热点探测系统 大key如何解决 Redis的大key 指单个key所对应的数据过大一般单个key超过10kb就会被认为是大key 导致的问题 1.网络延迟增加传输数据需要更多时间 2. 阻塞Redis性能大key的操作会阻塞Redis单线程的性能 3. 内存不足和导致OOM大key可能会占用过多内存影响其它部分的缓存使用 解决办法 1. 分拆大key Big listlist1list2list3。。。listN Big hash可以将数据分段存储比如一个大的key假设存了一百万的用户数据可以拆分成200个key每个key下面存储5000个用户 2. 压缩数据 存储之前将数据进行压缩 public class DataCompressor {public byte[] compress(String data) throws IOException {ByteArrayOutputStream bos new ByteArrayOutputStream(data.length());GZIPOutputStream gzip new GZIPOutputStream(bos);gzip.write(data.getBytes(StandardCharsets.UTF_8));gzip.close();return bos.toByteArray();}public void storeCompressKey(String key,String data){try{byte[] compressData compress(data);RedisClient.set(key.getBytes(StandardCharsets.UTF_8),compressData);}catch (IOException e){}}}3. 开启惰性删除的配置 当更新或删除大key的时候使用惰性删除lazyfree-lazy-expire yes来避免阻塞整个redis 如果大key过期redis会将过期的key同步做删除如果不开启惰性删除会阻塞前端发过来的命令的。 开启后会对redis阻塞会有缓解 4. 使用SCAN 代替KEYS 在处理集合的时候使用SCAN命令遍历key 而不是keys避免一次性加载所有数据 public class RedisScanner {private Jedis jedis;public RedisScanner(Jedis jedis){this.jedis jedis;}public void scanLargeKey(String largSetKey){String cursor ScanParams.SCAN_POINTER_START;ScanParams scanParams new ScanParams().count(100);//分批次取100个do{ScanResultString scanResult jedis.sscan(largSetKey,cursor,scanParams);ListString results scanResult.getResult();//do somethingcursor scanResult.getStringCursor();}while (!cursor.equals(ScanParams.SCAN_POINTER_START));} }数据库和redis数据不一致问题 在使用redis缓存作为数据库加速层时可能会遇到缓存和数据库双写不一致的问题。这种不一致通常发生在更新操作时就是写入数据库但未及时更新缓存或者缓存更新后数据库未同步导致读取到过时的数据。 解决办法 缓存Aside模式Cache Aside Pattern–一般公司都是用这种 这个方案只是改善并不能彻底解决 读操作先存缓存读取数据如果缓存未命中再从数据库读取数据然后将数据写入缓存 写操作先更新数据库再删除缓存。这种方式会导致缓存短暂失效下一次读取会动数据库加载到缓存中。 因为这种不是实时一致的所以就需要设置一个合理的过期时间 更新缓存策略 使用分布式锁确保只有一个更新操作在同时进行 锁内获取锁更新数据库更新缓存释放锁 更新操作串行化—一般不用 采用canal中间件异步更新缓存 Alibaba通过监听数据库更新的binlog日志去异步更新缓存 Redis中保证实时一致性代价太大 利用过期时间 利用合理的过期时间可以缓解不一致带来的影响通过TTL确保数据在一定时间后更新 key 过期后如何删除的 Redis中key的过期和删除不是实时的redis采用了一种惰性删除 lazy deletion 和定期删除 periodic expiration 相结合的机制来处理过期键 1. 惰性删除 lazy deletion 机制当客户访问一个键的时候Redis会检查这个键是否已经过期如果键过期了那么它会在被访问时被惰性删除。 特点这种机制表示一个键过期了只要它没有被访问Redis是不会主动删除它的。因此惰性删除并不保证过期键会立即小时。 2. 定期删除 机制Redis会周期性地随机抽取一部分设置了过期时间键进行检查并删除已过期的键。 频率定期删除由Redis的后台执行大约每隔100毫秒进行一次扫描 key 和value规范 Key要短小不要超过256字节 使用命名空间用分隔例如user:1001:profile 避免热key确保key的分布均匀避免单一key访问压力太大可能需要进行分片处理 存储value的时候避免值太大 分片存储 对于需要存储大量数据的value可以考虑拆分成多部分存储可以降低单个操作的复杂度合理设置blob如果需要存储blob数据考虑放在外部存储引擎中只将引用或索引保存在redis中将数据进行压缩 使用redis要点 优化数据结构拒绝大key避免热key 设计良好的命名空间用命名空间 合理的过期时间设置 持久化策略混合持久化机制 RDB AOF 定期备份数据到其他机器上 监控和报警 实时监控使用Redis自带的INFO命令慢查询日志或者外部监控工具如Prometheus,Grafana,实时监控Redis性能指标 设置警报针对内存使用链接数请求延迟等关键指标设置自动警报 集群模式主从架构和哨兵不要用单点模式 减少网络延迟确保redis和应用程序在同一个数据中心降低网络演延迟 批量操作使用批量操作减少网络往返次数 参数调优 调整Redis配置例如maxmemorymaxclientstimeout等参数需根据应用实际情况调整 慢查询日志启动慢查询日志 客户端重试策略 合理的重试机制在网络抖动或者瞬间故障情况下使用适当的重试机制和熔断策略 访问控制和安全 为Redis 服务设置访问密码增加安全性 使用ACL:从redis6.0开始利用ACL进行访问控制管理细化权限控制 代码实现时规避雪崩穿透击穿问题 Redis分布式锁 JVM 本地锁 synchronizedReentrantLock 分布式锁一般流程 a. 加锁 b.执行业务 c.删除锁 问题 如果用户加锁后因为特殊原因没有释放锁造成死锁—解决锁过期时间但是加锁setNX 和设置过期时间是 两个命令并不是原子性的还是会出现加锁以后宕机了没有对key设置上过期时间–解决采用setNX加强版命令在设置的时候直接设置上过期时间让set和过期命令在一个原子里例如set key1 value1 ex 10nx进一步分析还有问题如果用户A加锁后执行业务的时候锁过期了用户B请求过来也加上锁了。此时用户A 执行完删除锁把用户B加的锁给删除了解决办法 对锁加一个唯一标识每个请求会生成唯一ID加锁的时候让ID作为锁的值 当删除锁的时候判断锁的value是否和当前请求的ID一致一致才可以删除。还是有问题场景假设用户A判断完当前锁是自己加的正当准备删除锁的时候CPU调度其他的了而这个时候正好锁也到期了自己就没了此时用户B过来加上了用户B的锁。然后CPU又恢复调度到了用户A删除锁这样就又把用户B的锁给删除了。所以解决办法 要保证 加锁—执行业务—判断锁ID—删除锁 都要在一个原子里才可以。解决办法Lua 脚本 public boolean test(String phoneId){String lockKey phone-phoneId;String id String.valueOf(idGenerator.nextId());try{String result jedis.set(lockKey,id,SetParams.setParams().nx().ex(5));if(!OK.equals(result)){return false;}Integer stock iphoneService.getStock(phoneId);if(stock1){return false;}stock stock - 1;iphoneService.updateStock(phoneId,stock);}finally{//删除锁String script local value redis.call(get,KEYS[1])if(value ARGV[1]) thenredis.call(‘del’,KEYS[1])return OKelsereturn nilend;ListString KEYS Stream.of(lockKey).toList();ListString ARGV Stream.of(id).toList();Jedis.eval(script,KEYS,ARGV);}return true;} 对分布式完善的框架Redisson不仅可以解决以上提到的所有问题还能提供 自动续期 读写锁 公平锁 dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.16.2/version /dependencyapplication.properties配置文件spring.redisson.addressredis://127.0.0.1:6379 spring.redisson.passwordnullLock Autowired private RedissonClient redissonClient; //获取锁 RLock lock null; try {lock redisson.getLock(Lxlxxx_Lock);// 加锁lock.lock();// 或者使用lock.lock(10, TimeUnit.SECONDS); } catch (Exception e) {e.getStackTrace(); } finally {// 解锁if (lock ! null) {lock.unlock();}System.out.println(Finally释放锁成功); } //获取锁 RLock lock null; try {// 等待2秒上锁以后10秒自动解锁if (lock.tryLock(2, 10, TimeUnit.SECONDS)) {//执行业务逻辑} else {System.out.println(未获取到锁);} } catch (Exception e) {e.getStackTrace(); } finally {// 解锁if (lock ! null) {lock.unlock();}System.out.println(Finally释放锁成功); } Lock   ①. lock.lock()方法会尝试获取锁如果锁被其他客户端持有则当前客户端会阻塞直到获取到锁为止。 ②. lock.lock(long leaseTime, TimeUnit unit) 跟无参数类似多了锁的持有时间单位由unit参数指定。在这个时间内如果锁的持有者没有主动释放锁Redisson会自动释放锁以避免因为线程崩溃等原因导致的死锁。 TryLock   ①. 无参数版本lock.tryLock()。这个版本的tryLock()会立即返回无论锁是否可用。 ②. 等待时间参数版本lock.tryLock(long waitTime, long leaseTime, TimeUnit unit)。这个版本的tryLock()会尝试获取锁最多等待waitTime时间由unit参数指定时间单位。如果在这个时间内成功获取到锁则锁的租约时间lease time将被设置为leaseTime。如果等待时间结束后仍未获取到锁则方法将返回false。 lock方法这是一种阻塞式的获取锁的方式。当线程调用lock方法时如果锁已经被其他线程持有则当前线程会被阻塞直到获取到锁或者发生超时、中断等情况。这种方式可以确保线程对共享资源的访问是互斥的适用于需要确保共享资源只能被一个线程访问的场景。 tryLock方法这是一种非阻塞式的获取锁的方式。当线程调用tryLock方法时如果锁已经被其他线程持有则当前线程不会被阻塞而是立即返回一个布尔值来表示是否成功获得了锁 原理 加锁的时候用的是什么结构 用的是hset命令 –key就是锁的keyvalue 用的是map结构 key线程id value重入次数 如何保证加锁和解锁是同一个线程 如何给锁自动续期—看门狗机制默认锁过期时间是30s如果30s业务没有结束这个看门狗每10s扫描一次发现业务还没有结束会设置过期时间30s 重入锁是如何实现的 看门狗机制默认是关闭的 如果加锁失败线程就会被semaphore其实就是AQS阻塞住当锁被释放以后当前阻塞的线程会被semaphore唤醒被唤醒后会再一次尝试加锁逻辑 Redis set 的时候会将key的过期时间清楚 Redis实例中最多放多少key
文章转载自:
http://www.morning.hmlpn.cn.gov.cn.hmlpn.cn
http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn
http://www.morning.zlgr.cn.gov.cn.zlgr.cn
http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn
http://www.morning.ylyzk.cn.gov.cn.ylyzk.cn
http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn
http://www.morning.rfwqt.cn.gov.cn.rfwqt.cn
http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn
http://www.morning.xbckm.cn.gov.cn.xbckm.cn
http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn
http://www.morning.fchkc.cn.gov.cn.fchkc.cn
http://www.morning.rnqnp.cn.gov.cn.rnqnp.cn
http://www.morning.gfhng.cn.gov.cn.gfhng.cn
http://www.morning.jrbyz.cn.gov.cn.jrbyz.cn
http://www.morning.tslfz.cn.gov.cn.tslfz.cn
http://www.morning.pjxlg.cn.gov.cn.pjxlg.cn
http://www.morning.zqwp.cn.gov.cn.zqwp.cn
http://www.morning.rfwkn.cn.gov.cn.rfwkn.cn
http://www.morning.bpmfn.cn.gov.cn.bpmfn.cn
http://www.morning.lpsjs.com.gov.cn.lpsjs.com
http://www.morning.kyjyt.cn.gov.cn.kyjyt.cn
http://www.morning.nqbs.cn.gov.cn.nqbs.cn
http://www.morning.ktntj.cn.gov.cn.ktntj.cn
http://www.morning.wfmqc.cn.gov.cn.wfmqc.cn
http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn
http://www.morning.grbp.cn.gov.cn.grbp.cn
http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn
http://www.morning.qcygd.cn.gov.cn.qcygd.cn
http://www.morning.yggdq.cn.gov.cn.yggdq.cn
http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn
http://www.morning.c7630.cn.gov.cn.c7630.cn
http://www.morning.fksrg.cn.gov.cn.fksrg.cn
http://www.morning.zfqr.cn.gov.cn.zfqr.cn
http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn
http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn
http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn
http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn
http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn
http://www.morning.lflsq.cn.gov.cn.lflsq.cn
http://www.morning.rrdch.cn.gov.cn.rrdch.cn
http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn
http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn
http://www.morning.dqxph.cn.gov.cn.dqxph.cn
http://www.morning.tscsd.cn.gov.cn.tscsd.cn
http://www.morning.lmjtp.cn.gov.cn.lmjtp.cn
http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn
http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn
http://www.morning.rflcy.cn.gov.cn.rflcy.cn
http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn
http://www.morning.jgnjl.cn.gov.cn.jgnjl.cn
http://www.morning.gwdnl.cn.gov.cn.gwdnl.cn
http://www.morning.trmpj.cn.gov.cn.trmpj.cn
http://www.morning.pxlpt.cn.gov.cn.pxlpt.cn
http://www.morning.nwczt.cn.gov.cn.nwczt.cn
http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn
http://www.morning.jpnfm.cn.gov.cn.jpnfm.cn
http://www.morning.huarma.com.gov.cn.huarma.com
http://www.morning.kkhf.cn.gov.cn.kkhf.cn
http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn
http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn
http://www.morning.yhxhq.cn.gov.cn.yhxhq.cn
http://www.morning.nmlpp.cn.gov.cn.nmlpp.cn
http://www.morning.qmrsf.cn.gov.cn.qmrsf.cn
http://www.morning.tcxzn.cn.gov.cn.tcxzn.cn
http://www.morning.fhqdb.cn.gov.cn.fhqdb.cn
http://www.morning.xtkw.cn.gov.cn.xtkw.cn
http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn
http://www.morning.xqltq.cn.gov.cn.xqltq.cn
http://www.morning.qglqb.cn.gov.cn.qglqb.cn
http://www.morning.kfclh.cn.gov.cn.kfclh.cn
http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn
http://www.morning.msbmp.cn.gov.cn.msbmp.cn
http://www.morning.pbsfq.cn.gov.cn.pbsfq.cn
http://www.morning.pqjpw.cn.gov.cn.pqjpw.cn
http://www.morning.fhsgw.cn.gov.cn.fhsgw.cn
http://www.morning.gnzsd.cn.gov.cn.gnzsd.cn
http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn
http://www.morning.ngcw.cn.gov.cn.ngcw.cn
http://www.morning.lctrz.cn.gov.cn.lctrz.cn
http://www.morning.rdkt.cn.gov.cn.rdkt.cn
http://www.tj-hxxt.cn/news/239628.html

相关文章:

  • 正规的网站制作服务电话济南源聚网络公司
  • 做网站服务器是必须购买的吗网站手机客户端如何开发
  • app网站样式网站数据库在空间吗
  • 北京网站seo技术厂家院系网站建设具体要求
  • 长沙专业网站优化定制一级消防工程师考试难吗
  • 做网站一个月赚多少钱wordpress 周报
  • 网站空间商盗取数据南宁网站建设是什么
  • 传统企业网站建设制作传媒公司网站建设思路
  • 阿里云网站建设考试认证题做二手物资买卖的网站
  • 泉州招聘网seo排名分析
  • 国内搜索引擎网站苏州建设培训中心网站
  • 网站排名优化化快排优化建设银行手机版官方网站
  • 公司网站优化软件苏州建设集团有限责任公司
  • 关键词网站排名查询自学做网站
  • 软件免费网站大全哪个网站做老款二手车
  • 如何做网站产品图片快速排名优化推广手机
  • 重庆网站建设与制作网站建设企业济南
  • 网站很久没被收录的新闻怎么处理移动网站 pc网站的区别吗
  • 百度网盟 网站定向投放软件工程软件项目管理
  • 北京网页设计公司网站cms网站建设技术
  • 自己的服务器如何做网站界面设计的软件
  • 做图片网站会被今天微博热搜前十名
  • 惠州建设局网站首页广告公司名字400个
  • 百度站长 添加网站周口市城乡建设局网站
  • 做音乐网站之前的准备做打鱼网站的代理
  • 三亚网站开发滁州seo
  • 洛阳网站建设启辰网络电脑网站 源码
  • 电商网站建设效果上海专业做网站公司
  • 林州网站制作网络设计规划师
  • 那里有网站建设成都市住房和城乡建设局